Масштабируемый продакшн-реди телеграм бот на django
Содержание:
- Краткое введение в NLKT
- Начало. Создание бота и добавление библиотек.
- F.A.Q.
- Рассмотрим подробно, как можно написать бота python telegram.
- База, приём!
- Подробнее о хендлерах
- Шаг 2: создание Telegram-бота с помощью @BotFather
- Как настроить бот, чтобы работать непрерывно
- Взаимодействуя с нашим ботом через ваш веб-браузер
- Хранилище
- pyTelegramBotApi
- Телеграм бот в продакшене: особенности
- Создание интерфейса бота
- Шаг 4: написание обработчика команды /start
- Пара слов от автора
- Как создать учетную запись BoT Roscord
- Установка
- Работа с базой данных в коде
- Заключение
Краткое введение в NLKT
NLTK (Natural Language Toolkit) — платформа для создания программ на Python для работы с естественной речью. NLKT предоставляет простые в использовании интерфейсы для более чем 50 корпораций и лингвистических ресурсов, таких как WordNet, а также набор библиотек для обработки текста в целях классификации, токенизации, генерации, тегирования, синтаксического анализа и понимания семантики, создания оболочки библиотек NLP для коммерческого применения.
Книга Natural Language Processing with Python — практическое введение в программирование для обработки языка. Рекомендуем ее прочитать, если вы владеете английским языком.
Загрузка и установка NLTK
- Установите NLTK: запустите pip install nltk.
- Тестовая установка: запустите python, затем введите import nltk.
Инструкции для конкретных платформ смотрите здесь.
Установка пакетов NLTK
Импортируйте NLTK и запустите nltk.download(). Это откроет загрузчик NLTK, где вы сможете выбрать версию кода и модели для загрузки. Вы также можете загрузить все пакеты сразу.
Предварительная обработка текста с помощью NLTK
Основная проблема с данными заключается в том, что они представлены в текстовом формате. Для решения задач алгоритмами машинного обучения требуется некий вектор свойств. Поэтому прежде чем начать создавать проект по NLP, нужно предварительно обработать его. Предварительная обработка текста включает в себя:
- Преобразование букв в заглавные или строчные, чтобы алгоритм не обрабатывал одни и те же слова повторно.
- Токенизация. Токенизация — термин, используемый для описания процесса преобразования обычных текстовых строк в список токенов, то есть слов. Токенизатор предложений используется для составления списка предложений. Токенизатор слов составляет список слов.
Пакет NLTK включает в себя предварительно обученный токенизатор Punkt для английского языка.
- Удаление шума, то есть всего, что не является цифрой или буквой;
- Удаление стоп-слов. Иногда из словаря полностью исключаются некоторые крайне распространенные слова, которые, как считается, не имеют большого значения для формирования ответа на вопрос пользователя. Эти слова называются стоп-словами (междометия, артикли, некоторые вводные слова);
- Cтемминг: приведение слова к коренному значению. Например, если нам нужно провести стемминг слов «стемы», «стемминг», «стемированный» и «стемизация», результатом будет одно слово — «стем».
- Лемматизация. Лемматизация — немного отличающийся от стемминга метод. Основное различие между ними заключается в том, что стемминг часто создает несуществующие слова, тогда как лемма — это реально существующее слово. Таким образом, ваш исходный стем, то есть слово, которое получается после стемминга, не всегда можно найти в словаре, а лемму — можно. Пример лемматизации: «run» — основа для слов «running» или «ran», а «better» и «good» находятся в одной и той же лемме и потому считаются одинаковыми.
Начало. Создание бота и добавление библиотек.
Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.
А также загрузим простенькую библиотеку для работы с Excel. (ЧИТАЕТ ТОЛЬКО .xls!!!)
Время импортировать все необходимые библиотеки.
Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:
-
Найти в поиске телеграма @BotFather
-
Написать ему команду /newbot
-
Первым сообщение отправить имя бота, а вторым его юзернейм (который пишется с @). Он должен быть уникальный и оканчиваться на Bot или _bot
После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.
Нужно скопировать всю строку, которая на скрине закрыта красным прямоугольником
Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это». (Более подробная инфа тут API)
F.A.Q.
How can I distinguish a User and a GroupChat in message.chat?
Telegram Bot API support new type Chat for message.chat.
- Check the attribute in object:
if message.chat.type == "private" # private chat message if message.chat.type == "group" # group chat message if message.chat.type == "supergroup" # supergroup chat message if message.chat.type == "channel" # channel message
How can I handle reocurring ConnectionResetErrors?
Bot instances that were idle for a long time might be rejected by the server when sending a message due to a timeout of the last used session. Add to your initialisation to force recreation after 5 minutes without any activity.
Рассмотрим подробно, как можно написать бота python telegram.
Мы можем подумать, как писать своего робота
Первоначально важно вернутся к постановке своей определенной задачи. Проблемой сложнейших bot в том, что диалог требует постоянного сохранения
Функцию беседы требуется прерывать на ожидание сообщений от человека, состояние будет сохранено, затем впоследствии восстанавливается, отводится к кодовому слову, отвечающему за обрабатывание чата, в результате кодовое слово становится тяготящей проблемным вопросом.
Пишем бота telegram на python. Чтобы зарегистрировать, требуется выполнить несколько простых шагов:
- разыскать его под названием @BotFather;
- набрать слово /start, или /newbot;
- для этого нужно заполнить поле, которого он попросит (ввести наименование бота и его точное имя). В результате пользователь получает уведомление с его токеном и ссылку на необходимую документацию.
База, приём!
Раз уж мы имеем дело с перманентными данными, нам нужно где-то их хранить. В стандартной библиотеке Python есть 2 чудесных способа: при помощи БД SQLite3 и при помощи хранилищ типа “ключ-значение” shelve. Будем использовать оба варианта. Начнём с БД. Здесь и далее под “БД” или “Базой Данных” я буду понимать именно SQLite3, а под словом “хранилище” — shelve. Итак, при помощи бесплатной Windows-утилиты DB Browser for SQLite я создал базу данных с одной-единственной таблицей music и заполнил её сведениями о моих аудиофайлах. Чтобы была понятна примерная структура БД, посмотрите на скриншот:
Столбец содержит идентификатор аудиозаписи, и — правильный и неправильные ответы соответственно. Для чего мне нужно это разделение, объясню позднее. Итак, наша тестовая база создана, при помощи команды экспорт я сгенерировал файл с чудесным названием следующего содержания:
Затем я залил этот файл на свой Linux-сервер, в терминале которого выполнил команду , которая привела к созданию файла music.db, являющимся базой данных наших аудиозаписей.Теперь создадим файл . Т.к. Python изначально объектно-ориентированный язык, мне захотелось оформить работу с БД в виде класса. Пусть умные люди меня поправят, если я что-то сделал не так. Вот как выглядит наш класс:
При каждом создании объекта SQLighter будет открываться отдельное соединение с БД и впоследствии закрываться. Мне кажется, это правильный подход, тем более, что бот изначально многопоточный (особенность библиотеки).
Подробнее о хендлерах
Давайте немножко упростим нашу функцию с приветствием:
Теперь мы передаём в конструктор ChatAction аргумент — это функция для фильтрации событий. Сюда мы перенесли условие. Теперь хендлер будет срабатывать только для нужных событий.
Также обратите внимание на функцию. Она отправляет сообщение в чат, из которого пришёл event
На самом деле это просто сокращение для функции , которую мы использовали выше.
Ну что ж, если у нас всё работает, то можно и поиграться! Вы можете попробовать написать свои хендлеры. Например:
Но мы пришли сюда не за этим. Мы хотим сделать команды и другие фичи для администраторов группы! Для этого нам нужно уметь отличать админов от простых участников группы. Этим мы займёмся в следующей части туториала. Мы подключим базу данных и научимся хитрым способом получать админов.
Продолжение следует.
Шаг 2: создание Telegram-бота с помощью @BotFather
Создать программу для приема сообщений и ответа на них можно через сервис @BotFather. Переходим на его страницу в Telegram и вводим команду /newbot. В чате появятся инструкции, согласно которым нужно записать сначала имя бота, а после – его адрес. Когда аккаунт-бот будет создан, на экране появится приветственное сообщение, содержащее токен. Для дальнейшей настройки воспользуемся этими командами:
- /setdescription – описание;
- /setabouttext – информация о новом боте;
- /setuserpic – фотография профиля;
- /setinline – встроенный режим;
- /setcommands – описание команд.
На последнем шаге настройки описываем /help и /exchange. Когда все этапы пройдены, пора перейти к составлению кода.
Как настроить бот, чтобы работать непрерывно
Если вы запустите свой бот в REPL.IT, а затем закройте вкладку, он работает, ваш бот будет прекратить работу.
Но есть два способа постоянно поддержания бота, даже после закрытия веб-бауза.
Первый путь и простейший способ – подписаться на оплаченный план в REPL.IT. Их самый дешевый платный план называется планом хакера, и он включает в себя пять всегда на рентам.
Вы можете получить три месяца бесплатно, используя эту ссылку (ограничена первыми 1000 человек):
После того, как вы подписались на этот план, откройте refl и щелкните по названию вверху. Затем выберите опцию «Всегда на».
Есть еще один способ сохранить ваш код, даже на свободном уровне, но это немного сложнее. Reft.it продолжит запустить веб-сервер, даже после закрытия вкладки. Но даже веб-сервер будет работать только до часа без какого-либо использования.
Вот что за reft.it docs говорят:
Чтобы постоянно поддерживать бот, мы будем использовать другой бесплатный сервис, называемый Robot Womptime At https://uptimerobot.com/ Отказ
Робот безотказной работы может быть установлен на веб-сервер Bot на REPL.IT каждые 5 минут. С постоянными звонками, бот никогда не войдет на сцену сна и будет просто продолжать работать.
Поэтому мы должны сделать еще две вещи, чтобы наш бот постоянно работать:
- Создайте веб-сервер в REPL.IT и
- Установите Robot Roomtime, чтобы непрерывно пинговать веб-сервер.
Как создать веб-сервер в REPL.IT
Создание веб-сервера проще, чем вы можете подумать.
Чтобы сделать это, создайте новый файл в вашем проекте под названием Отказ
Затем добавьте следующий код:
from flask import Flask from threading import Thread app = Flask('') @app.route('/') def home(): return "Hello. I am alive!" def run(): app.run(host='0.0.0.0',port=8080) def keep_alive(): t = Thread(target=run) t.start()
В этом коде мы используем колбу для запуска веб-сервера. Сервер возвращает «Привет. Я жив». всем, кто его посещает. Сервер будет работать на отдельной резьбе с нашего бота. Мы не будем обсуждать все здесь, так как остальные не имеют права актуальны для нашего бота.
Теперь нам просто нужен бот для запуска этого веб-сервера.
Добавьте следующую строку в верхнюю часть импортировать сервер.
from keep_alive import keep_alive
Чтобы запустить веб-сервер, когда Запускается, добавьте следующую строку в качестве второй строки, прямо перед запуском бота.
stear_alive ()
Когда вы запускаете BOT на REPL.IT После добавления этого кода, откроется новое окно веб-сервера. Для веб-сервера, показанного URL. Скопируйте URL, чтобы вы могли использовать его в следующем разделе.
Как настроить робот времени безотказной работы
Теперь нам нужно настроить робот безотказной работы для Ping на веб-сервере каждые пять минут. Это заставит бот постоянно работать.
Создайте бесплатный аккаунт на https://uptimerobot.com/ Отказ
Как только вы вошли в свою учетную запись, нажмите «Добавить новый монитор».
Для нового монитора выберите «HTTP (S)» в качестве типа монитора и назовите его, что вам нравится. Затем вставьте в URL-адрес вашего веб-сервера от REPL.IT. Наконец, нажмите «Создать монитор».
Были сделаны! Теперь бот будет работать непрерывно, чтобы люди всегда могли взаимодействовать с ним на REPL.IT.
Взаимодействуя с нашим ботом через ваш веб-браузер
Мы можем контролировать наш бот, отправив HTTPS-запросы на телеграмму. Это означает, что самый простой способ взаимодействовать с нашим ботом через веб-браузер. Посещая разные URL-адреса, мы отправляем разные команды нашу бот. SimpleSt Command – это то, где мы получаем информацию о нашем боте. Посетите следующий URL в вашем браузере (подставляя токен бота, который вы получили раньше)
https://api.telegram.org/bot/getme
Первая часть URL указывает, что мы хотим общаться с Telegram API (API.TELEGRAMAM.ORG). Мы следуем это с Чтобы сказать, что мы хотим отправить команду нашему боту, и сразу после того, как мы добавим наш токен, чтобы определить, какой бот мы хотим отправить команду и доказать, что у нас есть. Наконец, мы указываем команду, которую мы хотим отправить ( ), которая в этом случае только что возвращает базовую информацию о нашем боте, используя JSON. Ответ должен выглядеть похоже на следующее:
{"ok":true,"result":{"id":248718785,"first_name":"To Do Bot","username":"exampletodo_bot"}}
Получение сообщений, отправленных на наш бот
Самый простой способ для нас для получения сообщений, отправленных на наш бот, проходит через вызов. Если вы посетите , вы получите ответ JSON всех новых сообщений, отправленных на ваш бот. Наш бот – совершенно новый и, вероятно, еще не получил никаких сообщений, поэтому, если вы сейчас посетите это, вы должны увидеть пустой ответ.
Telegram Bots не могут говорить с пользователями, пока пользователь сначала не инициирует разговор (это уменьшить спам). Для того, чтобы попробовать Звоните, мы сначала отправлю сообщение на наш бот из нашей собственной учетной записи Telegram. Посетить Чтобы открыть разговор с вашим ботом в веб-клиенте (или найти в любой из клиентов Telegram). Вы должны увидеть ваш бот, отображаемый с . кнопка в нижней части экрана. Нажмите эту кнопку, чтобы начать общаться со своим ботом. Отправьте свой бот короткое сообщение, например «Hello».
Теперь посетите URL снова, и вы должны увидеть ответ JSON, показывающую сообщения, которые получили ваш бот (включая один из при нажатии кнопки «Пуск»). Давайте посмотрим на пример этого и выделите данные импорта, которые мы будем писать код для извлечения в следующем разделе.
{"ok":true,"result":[{"update_id":625407400, "message":{"message_id":1,"from":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits"},"chat":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits","type":"private"},"date":1478087433,"text":"\/start","entities":}},{"update_id":625407401, "message":{"message_id":2,"from":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits"},"chat":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits","type":"private"},"date":1478087624,"text":"test"}}]}
Раздел JSON – список обновлений, которые мы еще не подтвердили (мы поговорим о том, как подтвердить обновления позже). В этом примере наш бот имеет два новых сообщения. Каждое сообщение содержит кучу данных о том, кто его отправил, какой чат он является частью, и содержимое сообщения. Две детали информации, на которой мы сосредоточимся на данный момент, – это идентификатор чата, который позволит нам отправить ответное сообщение и текст сообщения, который содержит текст сообщения. В следующем разделе мы увидим, как извлечь эти две части данных с помощью Python.
Отправка сообщения от нашего бота
Окончательный вызов API, который мы попробуем в нашем браузере, которое используется для отправки сообщения. Для этого нам нужен идентификатор чата для чата, где мы хотим отправить сообщение. Есть куча разных идентификаторов в ответе JSON от Позвоните, так что убедитесь, что вы получите правильный. Это поле, которое находится внутри поле (24860000 в примере выше, но ваши будут разные). Как только у вас есть этот идентификатор, посетите следующий URL в вашем браузере, подставляя для вашего идентификатора чата.
https://api.telegram.org/bot/sendMessage?chat_id=&text=TestReply
После того, как вы посетили этот URL, вы должны увидеть сообщение от вашего бота, отправленного на ваш, который говорит «Testreply».
Теперь, когда мы знаем, как отправлять и получать сообщения, используя API Telegram, мы можем перейти с автоматическим использованием этого процесса, написав несколько логики в Python.
Хранилище
Наверняка у кого-то возникнет справедливый вопрос: “А зачем нам нужно простое хранилище, если у нас уже есть полноценная база данных?”. Ответ: я просто не хочу лишний раз дёргать БД.
Идея с key-value хранилищем ложится здесь идеально. В чём состоит моя идея: когда юзер начинает игру, вместе с вопросом я сохраняю себе правильный ответ, и при выборе ответа пользователем я сравниваю его ответ с правильным. Совпало — молодец. Не совпало — не молодец. Затем запись удаляется из хранилища, чтобы не занимать лишнее место.
Создадим файл , в котором опишем методы для сохранения правильного ответа, удаления правильного ответа, получения правильного ответа (или None, если юзер решил просто так что-то написать боту) и сохранении количества строк в основной БД. Количество строк будет пересчитываться при каждом запуске бота, тем самым, нам не надо думать, по какому правилу выбирать вопросы.
Не вижу смысла подробно комментировать данный код, поясню лишь использование ключевого слова : оно позволяет не заморачиваться о закрытии хранилища, Python сам возьмет на себя управление. Подробнее можно прочесть в .Ах да, и не забудьте создать файл , содержащий следующие строки:
На следующем занятии мы закончим нашего бота-угадайку.
← Урок №1
Урок №3 →
pyTelegramBotApi
Ссылки на документации всех библиотек будут в конце.
Создадим простого бота, отвечающего на команду , с помощью этой библиотеки:
pyTelegramBotApi является просто обёрткой для всего Telegram Bot API, но здесь разберутся только основные составляющие.Взаимодействие с ботом происходит через переменную bot (токен надо вставить свой). Декоратор @message_handler реагирует на входящие сообщение.Message – это объект из Bot API, содержащий в себе информацию о сообщении. Полезные поля: message.chat.id – идентификатор чатаmessage.from.id – идентификатор пользователяmessage.text – текст сообщенияФункция send_message принимает идентификатор чата (берем его из сообщения) и текст для отправки.
Замена клавиатуры
У ботов есть функция замены стандартной клавиатуры на кнопочную. Для этого у всех функций есть опциональный аргумент reply_markup:
ReplyKeyboardMarkup – и есть та самая клавиатура. Метод row() создает ряд (максимум 12) из кнопок, передаваемых в качестве аргумента.Также есть особенная клавиатура types.ReplyMarkupRemove(), которая меняет клавиатуру на стандартную.
Клавиатура для сообщений
Можно создавать клавиатуру для отдельного сообщения. Передавать его нужно так же в аргумент reply_markup:
У кнопок есть несколько режимов, в зависимости от второго аргумента. Подробнее можно прочитать в официальной документации, но я остановлюсь только на callback_data.При нажатии на такую кнопку боту придет отдельный CallbackQuery, который нужно обрабатывать подобно сообщению:
Для обработки обязательно указать аргумент func для «отсеивания» Callback запросов.После обработки каждого запроса нужно выполнить команду answer_callback_query, чтобы Telegram понял, что запрос обработан. В поле callback.data хранится информация из callback_data нажатой кнопки.
Изменение сообщений
У ботов есть функция изменения своих сообщений (можно использовать, чтобы сделать перелистывание страниц, например). Для этого нужно воспользоваться методом edit_message_text (edit_message_caption для картинок):
Смысл аргументов понятен из их названия.
Телеграм бот в продакшене: особенности
-
База данных должна быть нормальная (не текстовый фай, не sqlite, не in memory). Например, Postgres.
-
Это обеспечит стабильность и уменьшит шансы, что все данные внезапно потеряются.
-
-
Если что-то упало, чтобы поднялось само.
-
Желательно при этом собирать ошибки, например, через Sentry.
-
-
Настроен CI, который автоматизирует превращение нового кода в рабочий сервис.
-
Я использую GitHub Actions, который заставляет Dokku сделать git pull и начать собирать проект, когда кто-то закоммитил в мастер. Подробнее об этом в конце статьи.
-
-
Есть возможность легко масштабировать проект по необходимости. В частности — обработчики сообщений пользователей.
-
Для этого не подойдет, только вебхуки — об этом прямо сейчас ️.
-
Вебхуки
Существуют два способа работать с Telegram Bot API (да и вообще со всеми микросервисами): пулинг и вебхуки.
-
— это когда ваш скрипт периодически заходит на серверы Телеграмма и запрашивает новые события о том, как ваши пользовали провзаимодействовали с ботом.
-
Webhook — это когда вы говорите серверам Телеги: присылай мне на мой URL события сам.
Первый способ сильно упрощает разработку ботов, в то время как второй требует поднятого веб-сервера, который будет слушать входящие сообщения и засовывать из в handlers, которые вы описали. Более того, серверы Телеграмма требуют настроенного HTTPS шифрования, поэтому, например, настроить вебхуки на ваш домашний IP без настроенного DNS вряд ли получится. Решение с ngrok поможет лишь протестировать работу бота через вебхуки, в продакшене его, конечно же, не надо использовать.
Если polling — отлично помогает при разработке телеграм бота, то Webhook отлично подходит для продакшена: в случаях наплыва пользователей, можно запустить два инстанса с вашими хендлерами, а заранее настроенный load balancer сам будет параллелить между ними входящие события по вебхуку (такая функция есть как в docker-compose, так и в большинстве современных облачных PaaS, таких как Heroku, Google App Engine или Digital Ocean App Platform).
Как скрестить Django и Telegram bot
Как работать с вебхуками в случае с Django? Просто создать view (), который получит входящий ивент от Телеграмма и отправит его в ваш обработчик событий (куда вы вешали handlers — логику реакций бота на разные действия пользователей) ().
Стоит создать Django Model для . И заполнять ее как минимум каждый раз, когда кто-то нажимает команду /start. В этом случае, все пользователи вашего бота будут аккуратно складываться в базу данных, и вы сможете как минимум их посчитать. Для этого рекомендую создать , который будет создавать либо возвращать существующий объект класса User .
Создание интерфейса бота
Теперь мы можем приступить к написанию той части программы, которая обрабатывает запросы из Telegram. Создадим новую repl-среду, а в качестве языка программирования выберем Python.
Наш бот должен взаимодействовать с Telegram. Для этого нам понадобится доступ к Telegram REST API. Есть много способов сделать это, но в рамках данной статьи мы будем использовать удобную библиотеку, обернутую обернута вокруг API.
Прежде чем мы продолжим, нам нужно сделать наш токен доступным для использования нашим ботом. Создайте переменную среды под названием , щелкнув значок замка на боковой панели, как показано ниже, и вставьте свой токен бота, который вы получили ранее, например :
Создание переменной среды
Это гарантирует, что наш токен доступен как переменная среды и что к нему не смогут получить доступ люди, имеющие доступ к нашей среде repl (в бесплатной версии она открыта для всех, — прим. переводчика).
Шаг 4: написание обработчика команды /start
Если все предыдущие шаги выполнены правильно, бот начал работать. Программа регулярно создает запросы, потому что в ней использован метод getUpdates. Перед строкой с элементом none_stop нужна часть кода, обрабатывающая команду /start:
@bot.message_handler(commands=) def start_command(message): bot.send_message( message.chat.id, 'Greetings! I can show you exchange rates.\n' + 'To get the exchange rates press /exchange.\n' + 'To get help press /help.' )
При commands= равном True вызывается start_command. Содержимое сообщения переходит туда. Далее нужно реализовать функцию send_message по отношению к конкретному сообщению.
Пара слов от автора
Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.
Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.
Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)
Приглашаю прочесть мои статьи:Применение библиотеки FuzzyWuzzy для нечёткого сравнения в Python. Расстояние Левенштейна (редакционное расстояние)Как открыть ссылку в Python. Работа с WebBrowser и решение проблемы с Internet Explorer
Как создать учетную запись BoT Roscord
Для того, чтобы работать с библиотекой Python и API раздора, мы должны сначала создать учетную запись BoT Roscord.
Вот шаг к созданию учетной записи Roscord Bot.
1. Убедитесь, что вы вошли в систему на Сайт раздора Отказ
2. Перейдите к Страница приложений Отказ
3. Нажмите на кнопку «Новое приложение».
4. Дайте приложению имя и нажмите «Создать».
5. Перейдите на вкладку «Бот», а затем нажмите «Добавить бот». Вам придется подтвердить, нажав «Да, сделай это!»
Держите настройки по умолчанию для Общественный бот (проверено) и Требуется код AAuth2 Code (не проверять).
Ваш бот был создан. Следующий шаг – скопировать токен.
Этот токен – пароль вашего бота, поэтому не делитесь ни с кем угодно. Это может позволить кому-то войти в свой бот и делать все виды плохих вещей.
Вы можете восстановить токен, если он случайно будет разделен.
Установка
Почти все, что мы делаем, будет достигнуто, используя только стандартные библиотеки Python, но мы также будем использовать стороннюю Модуль, который предоставляет ряд улучшений для Python’s И позволяет нам делать HTTP-запросы очень просто и кратко. Установите это через PIP, используя команду, аналогичную следующему (вам может потребоваться использовать вместо и/или добавить флаг flag, основанный на том, как вы обычно устанавливаете Python Библиотеки).
pip3 install requests
Если вы обычно используете виртуальную среду для новых проектов Python, затем сначала установите один из них и установите запросы внутри этого.
Создание бота телеграммы
Первый шаг – сказать телеграмму, которую вы хотите создать новый бот. Все сообщения, которые наш бот отправляет и получает, пройдет через инфраструктуру телеграммы. Наш код периодически сделает запрос на получение всех новых сообщений на наш бот из серверов Telegram и затем отправит ответы на каждое сообщение по мере необходимости. Для того, чтобы зарегистрировать бот с телеграммой, вам сначала нужно создать личную учетную запись телеграммы. Посетить web.telegram.org и введите свой номер телефона. Telegram отправит вам текстовое сообщение (SMS), и затем вы можете создать учетную запись, следуя инструкциям на экране. Если у вас уже есть учетная запись Telegram, вы можете просто использовать это, и вы также можете использовать любой из настольных компьютеров Telegram и мобильных приложений, доступных из Telegram.org, вместо веб-приложения мы будем использовать для всех примеров в Это руководство.
После того, как у вас есть учетная запись Telegram, вы можете зарегистрировать новую телеграмму BOT с помощью отца BOT. Посетить Telegram.me/botfather Начать разговор с ботом телеграммы, который создает другие боты. Телеграмма боты могут получить Сообщения или Команды Отказ Первые – это просто текст, который вы отправляете, как если бы вы отправили сообщение другому человеку, в то время как последние префиксированы с помощью персонаж. Чтобы создать новый бот, отправьте следующую команду для бота отца в чате (точно так же, как будто вы разговаривали с другим человеком на телеграмме).
/newbot.
Вы должны получить ответ мгновенно, который просит вас выбрать имя для своего бота. Мы позвоним нашему боту Потому что к концу этого учебника он будет функционировать как простой список «делать». Отправьте следующее сообщение для бота Отца, когда он предложит вам имя:
Сделать бот
Бот отец теперь попросит вас выбрать имя пользователя для своего бота. Это имя пользователя должно закончиться и быть во всем мире уникальным. Когда телеграмма стала более популярной, она стала сложнее найти краткое и соответствующее имя пользователя для вашего бота. В этом руководстве мы будем использовать , но для остальной части этого учебника мы укажем имя пользователя BOT с Итак, вам придется заменить выбранное имя пользователя там, где нет необходимости. Отправьте выбранное имя пользователя на Бот Отец:
<Ваш-бот-имя пользователя>
Теперь бот отец отправит вам сообщение «поздравления», которое будет включать токен. Токен должен выглядеть что-то подобное:
2483457814: aahrlcx234_vskzwejdwjtsdfuwejhyu5mi.
Для остальной части этого учебника мы укажем, где вам нужно поставить свой токен, используя Отказ
Обратите внимание на токен, так как нам понадобится в код, который мы собираемся написать
Работа с базой данных в коде
Теперь давайте вновь перейдем к коду. Создадим 2 переменные.
В первой мы подключаем нашу базу данных, а во второй создаем курсор для работы с таблицами
Обратите внимание на то, что у меня в директории проекта создана папка db, а уже в ней находится файл БД. Если у вас по другому, укажите расположение в первой переменной
Теперь создадим функцию, которая будет нужна непосредственно для работы с таблицей.
Итак, сейчас объясню, что тут происходит. В аргументах функции мы указываем переменную user_id с типом данных inst. Далее добавляем запись в таблицу test в столбец user_id. С остальными значениями точно так же. В конце мы просто применяем изменения. Эта функция не будет выполнятся, пока мы ее не вызовем. Давайте исправим это. Создадим обработчик сообщений от пользователя и будем вносить в базу его данные.
В переменные мы вносим имя пользователя, id, имя и фамилию в Telegram, а потом сохраняем в БД. В конце кода можем сделать так, чтобы бот работал постоянно.
Пришло время проверить, как работает код. Запускаем бота и пишем ему «Привет».
Теперь можем зайти в SQLiteStudio, и выбрав вкладку Данные посмотреть что получилось:
Как мы видим, данные уже в базе. Если их по какой-то причине нет, то обновите базу, нажав на синюю кнопку Обновить
Вот весь код:
Заключение
Хотя наш примитивный бот едва ли обладает когнитивными навыками, это был неплохой способ разобраться с NLP и узнать о работе чат-ботов. «ROBO», по крайней мере, отвечает на запросы пользователя. Он, конечно, не обманет ваших друзей, и для коммерческой системы вы захотите рассмотреть одну из существующих бот-платформ или фреймворки, но этот пример поможет вам продумать архитектуру бота.
Интересные статьи:
- Как создать собственную нейронную сеть с нуля на языке Python
- Word2Vec: как работать с векторными представлениями слов
- Как применять теорему Байеса для решения реальных задач