Как сделать программу которая будет отвечать на вопросы

Давно хотел сделать своего собственного Jarvis. Недавно удалась свободная минутка и я его сделал. Он умеет переписываться с Вами, а также искать ответы на Ваши вопросы в Wikipedia. Для его реализации я использовал язык Python.

Для начала установим все необходимые библиотеки. Их три: pyTelegramBotAPI, scikit-learn, а также Wikipedia. Устанавливаются они просто:

pip install pyTelegramBotAPI
pip install Wikipedia
pip install scikit-learn

После установки всех библиотек приступаем к разработке. Для начала импортируем все библиотеки, установим язык для Википедии и подключим телеграмм бота

import telebot, wikipedia, re from sklearn.feature_extraction.text import CountVectorizer from sklearn.linear_model import LogisticRegression wikipedia.set_lang(«ru») bot = telebot.TeleBot(‘Ваш ключ, полученный от BotFather’)

Теперь напишем код, для очистки всех ненужных нам знаков, которые вводит пользователь:

def clean_str(r): r = r.lower() r = [c for c in r if c in alphabet] return ».join(r) alphabet = ‘ 1234567890-йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm?%.,()!:;’

Также Вам необходимо создать в папке, где находится Ваш код файл dialogues.txt, в нем мы будем создавать реплики на которые должен отвечать бот. Вот пример данного файла:

Создаю ИИ феминистку на Python


привет как делахорошо. кто тыя Джарвис.

Строка до знака означает вопрос пользователя, а после ответ нашего бота. После чего напишем такой код в наш файл с ботом:

def update(): with open(‘dialogues.txt’, encoding=’utf-8′) as f: content = f.read() blocks = content.split(‘n’) dataset = [] for block in blocks: replicas = block.split(‘\’)[:2] if len(replicas) == 2: pair = [clean_str(replicas[0]), clean_str(replicas[1])] if pair[0] and pair[1]: dataset.append(pair) X_text = [] y = [] for question, answer in dataset[:10000]: X_text.append(question) y += [answer] global vectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(X_text) global clf clf = LogisticRegression() clf.fit(X, y) update()

Этот кусок кода читает файл dialogues.txt, потом превращает реплики в так называемые вектора, с помощью которых наш бот будет искать наиболее подходящий ответ к заданному нами вопросу. Например, если Вы написали в файле dialogues.txt вопрос «Ты знаешь Аню», а ответ на него «Да, конечно», то бот будет отвечать также и на похожие вопросы, например «Ты знаешь Васю».

Теперь напишем кусок кода, который будет генерировать ответы на основе векторов:

def get_generative_replica(text): text_vector = vectorizer.transform([text]).toarray()[0] question = clf.predict([text_vector])[0] return question

Этот кусок кода принимает вопрос от пользователя и возвращает ответ от бота.

Теперь напишем функцию для поиска информации в Википедии:

def getwiki(s): try: ny = wikipedia.page(s) wikitext=ny.content[:1000] wikimas=wikitext.split(‘.’) wikimas = wikimas[:-1] wikitext2 = » for x in wikimas: if not(‘==’ in x): if(len((x.strip()))>3): wikitext2=wikitext2+x+’.’ else: break wikitext2=re.sub(‘([^()]*)’, », wikitext2) wikitext2=re.sub(‘([^()]*)’, », wikitext2) wikitext2=re.sub(‘<[^<>]*>’, », wikitext2) return wikitext2 except Exception as e: return ‘В Википедии нет информации об этом’

Этот кусок кода получает вопрос пользователя, потом ищет ответ на него в Википедии и если ответ найден, то отдает его пользователю, а если ответ не найден, то пишет, что «В Википедии нет информации об этом».

НЕЙРОСЕТЬ своими руками за 10 минут на Python

Теперь пишем последний кусок кода:

В этом куске кода телеграмм бот при получении сообщения от пользователя отвечает на него и если ответ не верный, то пользователь пишет «не так». Если бот получает сообщение «не так», то он берет последний вопрос пользователя и спрашивает «а как?», после чего пользователь должен отправить ему правильный ответ. После этого бот обновляет свою базу данных вопросов и ответов и при следующих вопросах пользователя отвечает на них правильно. И если ответ на вопрос бот должен был взять из Википедии, то пользователь в ответ на вопрос «а как?», должен написать «wiki». Осталось в конце приписать строчку:

bot.polling(none_stop=True)

И можно запускать и тестировать бота.

Весь код файла с ботом прилагаю ниже:

Надеюсь, статья Вам понравилась 🙂

Источник: temofeev.ru

Гайд: как создать и настроить бота в Телеграме

Создаем своего доброго бота в Телеграме. Учим его нужным функциям и проверяем работоспособность.

Читайте также:
Программа для того что бы компьютер разговаривал

Сергей Бондаренко

Сергей Бондаренко

Автор технических статьей о маркетинге и инструкций. Расскажу о ботах в Телеграме и настройке рекламы, разбираюсь в новых темах. More posts by Сергей Бондаренко.

Сергей Бондаренко

Сергей Бондаренко

23 Mar 2022 • 10 МИН

Если вы устали вручную рассылать подписчикам новые коллекции, не можете больше отвечать на стандартные вопросы и вообще хотели бы перепоручить это кому-то другому – создайте своего бота в Телеграме.

В статье подробно расскажем, как это сделать за пару часов. Погнали.

Зачем нужен бот в Телеграме

Потратьте немного времени и сделайте бесплатного бота в Телеграме, чтобы освободить себя от рутинной работы. Этот маленький помощник будет выполнять простую работу по общению с пользователями: разговаривать с ними, отправлять новые коллекции и отвечать на стандартные вопросы 24/7. Он не устает и не оставляет без внимания сообщения подписчиков, всегда отвечает им и создает уютную атмосферу, пока владелец занят более важными задачами.

И это только маленькая часть того, что он может. Его в любой момент можно донастроить и добавить новые функции, изменить любую часть бота и перенастроить ответы. Робота можно постоянно поддерживать в актуальном состоянии.

Бот в Телеграме помогает подписчикам:

  • искать информацию;
  • читать и скачивать текстовые файлы;
  • искать и смотреть видео;
  • искать и слушать аудио;
  • комментировать статьи внутри мессенджера;
  • учиться – например, учить новые слова на иностранном языке.

Кроме того, бот умеет:

  • развлекать;
  • проводить конкурсы и опросы подписчиков;
  • показывать новости вашей группы, бизнеса, мира, чего угодно;
  • отвечать на вопросы;
  • рассылать сообщения подписчикам;
  • напоминать о встречах, помогать договариваться и организовывать их;
  • участвовать в групповых чатах;
  • выдавать информацию о товарах.

Это только популярная часть функций, которые подключают к ботам разные магазины и чаты в Телеграме. Что именно добавите вы – зависит от направления и требований вашего бизнеса.

В Телеграме и других соцсетях можно публиковать посты через сервис отложенного постинга SMMplanner. Вы можете планировать публикации одновременно в ВК, Одноклассники, другие соцсети и Телеграм. Это очень удобно – оцените сами. Тестировать весь функционал можно бесплатно в течение 2 недель после регистрации по ссылке – SMMplanner.

Подробно о том, как настроить автопостинг и зачем он нужен, – в статье «Автопостинг в Телеграме: боты, сервисы, возможности».

Одно из главных преимуществ любого бота в Телеграме – его не нужно устанавливать на устройство. Он работает прямо в мессенджере и там остается всегда.

Есть много способов создать бота в Телеграме: на телефоне или ПК, платных и бесплатных, с помощью программирования или конструкторов. А можно – вообще без знания кодов, на телефоне за пару часов.

Простой игровой бот для ВК, создаем игру для Вконтакте + исходники! | Часть 1

Данная статья, начало создания игровых механик для своего бота Вконтакте. Многие из вас завадались вопросом: А как создать игрового бота для ВК, давайте начнем создавать классного бота для совместных игр.

1. Подготовка.
Так как мы еще не определились что именно будет в нашем боте, мы будем создавать это ниже, мы подготовим наше сообщество для создания нового бота, а так же подключим сразу базу данных и сделаем регистрацию.

Создаем новое сообщество, указываем название, тематику и по желанию свой сайт (если есть).


Переходим в настройки и включаем сообщения сообщества, а так же создаем новое приветствие для новичков :), тут же в подразделе Настройки для бота не забываем включить их, и разрешить добавлять его в беседу!

Теперь переходим к настройке скрипта, назовем это основной файл отвечающий за прием событий от вк и их дальнейшей обработки
Если нет сервера, нужно приобрести, рекомендуем хостинг FirstVDS нам подойдет и обычный хостинг VDS-OVZ-Разминка, цена на время написания статьи всего 90 рублей в месяц. После заказа Вам придет на почту данные для авторизации на сервере. Использовать можете любой хостинг, на ваш вкус и цвет. Главное условие поддержка PHP 5.6+ (желательно 7.0+) и MySQL.

Читайте также:
Что такое программа webtutor

Далее переходим на сервер, создаем любое доменное имя куда будем заливать скрипты. Мы будем использовать IP адрес. Если с с настройкой сервера не понятно, то почитайте эту статью на нашем сайте, где мы наглядно показываем как загрузить файлы на сервер.

После того как разобрались с сервером, нужно загрузить как раз необходимые библиотеки и основной файл, скачать ниже:

panamera.rar

Для работы с PHP я использую PHPStorm, это платный продукт, но как получить его бесплатно, Вам, наверно, объяснять не нужно 🙂

Распаковываем архив на сервер и открываем наш файл bot.php и пишем код который останется неизменным и может использоваться при создании новых ботов.

setDatabaseName($bdname)->setCharset(‘utf8mb4’); $vk = vk_api::create($vk_key, $v)->setConfirm($confirm); $my_msg = new Message($vk); $data = json_decode(file_get_contents(‘php://input’)); //Получает и декодирует JSON пришедший из ВК $vk->sendOK(); // ТУТ УЖЕ БУДЕМ ПИСАТЬ КОД //

Здесь нам нужно заполнить следующие поля:

$host = ‘localhost’; // По умолчанию localhost или ваш IP адрес сервера
$name = »; // логин для авторизации к БД
$pass = »; // Пароль для авторизации к БД
$bdname = »; // ИМЯ базы данных
$vk_key = »; // Длинный ключ сообщества, который мы получим чуть позже
$confirm = »; // СТРОКА которую должен вернуть сервер
$v = ‘5.103’; // Версия API, последняя на сегодняшнее число, оставлять таким если на новых работать в будущем не будет

Получение ключа сообщества:
А так же в разделе Тип событий обязательно включите Входящие сообщения

Так как данные я буду вносить своего сервера, соответственно показывать их я не буду. После настройки возвращаемся снова в сообщество.

Надеюсь с этим все ясно, почти в каждой статье на нашем сайте мы каждый раз объясняем как настроить бот, почитайте их, если здесь не ясно что делать. После успешного подключения переходим уже ко второй части статьи, где будем делать регистрацию пользователей которые первый раз напишут боту.

2. Регистрация новых пользователей в боте.
Для создания игрового бота понадобится регистрация используя базу данных. Мы будем Использовать для этого обертку на родным MySQLi. Для начала создаем через PhpMyAdmin новую таблицу users с полями:

Или используем запрос ниже:

SET SQL_MODE = «NO_AUTO_VALUE_ON_ZERO»; SET time_zone = «+00:00»; CREATE TABLE `users` ( `id` int(11) NOT NULL, `vk_id` int(11) NOT NULL, `nick` varchar(20) NOT NULL, `status` int(11) NOT NULL, `time` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `users` ADD PRIMARY KEY (`id`); ALTER TABLE `users` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Переходим к самому интересному, написанию кода.

Для начала как всегда, создание переменных которые чаще всего будут использоваться в боте:

// ТУТ УЖЕ БУДЕМ ПИСАТЬ КОД // // Переменные для удобной работы в будущем $id = $data->object->message->from_id; // ИД того кто написал $peer_id = $data->object->message->peer_id; // Только для бесед (ид беседы) $time = time(); $cmd = explode(» «, mb_strtolower($data->object->message->text)); // Команды $message = $data->object->message->text; // Сообщение полученное ботом $new_ids = current($data->object->message->fwd_messages)->from_id ?? $data->object->message->reply_message->from_id; // ИД того чье сообщение переслали $userinfo = $vk->userInfo($id); // Закончили с переменными

Пишем первую проверку, на входящее сообщение, именно туда мы будем вносить весь код

if ($data->type == ‘message_new’) < // ТУТ все что будем делать дальше >

Это нужно что бы исключить все другие события, ведь у нас игровой бот который использует только текст.
Обращаемся к базе данных, что бы проверить есть ли такой пользователь в ней:

Давайте сразу добавим кнопки, ведь это удобно, так как у нас бот называется PANAMERA, давайте сделаем какую-нибудь автомобильную игру, где ваша задача получить Porshe PANAMERA, но не будем ограничиваться этим, а начнем развивать механику в разные направления.

После регистрации у вас ничего нет, нужны деньги, что бы их получить, можно использовать кнопку бонус, давайте ее и добавим в бот.
Пишем следующий код:
К переменным

$bonus = $vk->buttonText(‘⏰ Бонус!’, ‘green’, [‘command’ => ‘bonus’]);

Давайте протестируем регистрацию и ответ на нажатие кнопки:

Ответил не сразу, в коде были допущены следующие ошибки:
ids заменить на vk_id и добавить переменную $userinfo = $vk->userInfo ($id);
Так как статья пишется параллельно созданию бота, могут быть допущены ошибки, выше в исходных файлах они будут исправлены.

Читайте также:
Как найти архив программы

Давайте сделаем что бы бонус начислялся на баланс. Добавляем 2 поля к таблице USERS:

ALTER TABLE `users` ADD `balance` INT NOT NULL AFTER `time`, ADD `time_bonus` INT NOT NULL AFTER `balance`;

переходим к коду и пишем следующую проверку и рандом:

case ‘bonus’; $time_bonus = $id_reg_check = $db->query(‘SELECT time_bonus FROM users WHERE vk_id = ?i’, $id)->fetch_assoc()[‘time_bonus’]; if ($time_bonus < $time)< // + 21600 минут = 6 часов $next_bonus = $time + 21600; // Прибавляем 6 часов для следующего бонуса! $rand_money = mt_rand(100, 5000); // Рандомно выбираем число от 100 до 5000, используя встроенную функцию PHP mt_rand $db->query(‘UPDATE users SET time_bonus = ?i, balance = balance + ?i WHERE vk_id = ?i’,$next_bonus, $rand_money, $id); // Обновляем данные $vk->sendMessage($peer_id, «Вы взяли бонус, Вам выпало $rand_money монет»); > else < // Иначе сообщим о том что бонус уже взят! $next_bonus = date(«d.m в H:i:s»,$time_bonus); $vk->sendMessage($peer_id,»Вы уже брали бонус ранее, следующий будет доступен «$next_bonus»»); > break;

Проверяем:

Так это выглядит в базе данных:

Отлично у нас есть деньги, пора бы начать их и тратить 🙂 самое распространенное в играх конечно же казино, давайте сделаем что-то подобное, самое простейшее казино. Пока мы еще не придумали игровые механики для нашего игрового бота, сделаем фарм денег.

Как будет работать наше казино:
Казино все, казино 100, казино 1кк и прочие, означающие ставки. Погнали делать команду:

if ($cmd[0] == ‘казино’)< // Первая команда if (!$cmd[1])< // если вторая команда пустая она вернет FALSE $vk->sendMessage($peer_id, ‘Вы не указали ставку!’); >elseif ($cmd[1] == ‘все’ or $cmd[1] == ‘всё’)< // Если указано все $balance = $db->query(‘SELECT balance FROM users WHERE vk_id = ?i’, $id)->fetch_assoc()[‘balance’]; // вытягиваем весь баланс if($balance == 0) < $vk->sendMessage($peer_id, ‘У Вас нет денег :(‘); > else < $result = mt_rand(1, 4); // 1 — проиграл половину, 2 — победа x1.5, 3 — победа x2, 4 — проиграл все $win_money = ($result == 1 ? $balance / 2 : ($result == 2 ? $balance * 1.5 : ($result == 3 ? $balance * 2 : 0))); $win_nowin = ($result == 1 ? ‘проиграли половину’ : ($result == 2 ? ‘выиграли x1.5’ : ($result == 3 ? ‘выиграли x2’ : ‘проиграли все’))); $vk->sendMessage($peer_id, «Вы $win_nowin, ваш баланс теперь составляет $win_money монет.»); $db->query(‘UPDATE users SET balance = ?i WHERE vk_id = ?i’, $win_money, $id); // Обновляем данные > > else < $sum = str_replace([‘к’,’k’], ‘000’, $cmd[1]); // наши Кk превращаем в человеческий вид, заменяя их на нули 🙂 $sum = ltrim(mb_eregi_replace(‘[^0-9]’, », $sum),’0′); // удаляем лишние символы, лишние нули спереди и все что может поломать систему :), подробнее о функциях можно почитать в интернете $balance = $db->query(‘SELECT balance FROM users WHERE vk_id = ?i’, $id)->fetch_assoc()[‘balance’]; // вытягиваем весь баланс if($balance < $sum) < $vk->sendMessage($peer_id, ‘У вас не достаточно денег’); > else < $result = mt_rand(1, 4); // 1 — проиграл половину, 2 — победа x1.5, 3 — победа x2, 4 — проиграл все $win_money = ($result == 1 ? $balance — ($sum / 2) : ($result == 2 ? $balance + ($sum * 1.5) : ($result == 3 ? $balance + ($sum * 2) : $balance — $sum))); $win_nowin = ($result == 1 ? ‘проиграли половину’ : ($result == 2 ? ‘выиграли x1.5’ : ($result == 3 ? ‘выиграли x2’ : ‘проиграли все’))); $vk->sendMessage($peer_id, «Вы $win_nowin, ваш баланс теперь составляет $win_money монет.»); $db->query(‘UPDATE users SET balance = ?i WHERE vk_id = ?i’, $win_money, $id); // Обновляем данные > > >

Получилось довольно много кода, в будущем возможно мы еще вернемся для доработок, все зависит только от Вас, давайте попробуем это в действии:

Получилось не плохо, теперь в нашем игровом боте есть казино!

На этом наша первая часть по созданию игрового бота вконтакте подходит к концу, теперь ваши идеи и предложения будут появляться в новой статье, во второй части мы уже начнем реализацию ваших идей и предложений!

Если статья понравилась, оцените ее лайком.

Исходники готового проекта:
panamera.rar

  • Сергей Котов
  • 19.04.2020
  • 46 351
  • 11
  • 33

Источник: kotoff.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru