Реализация телеграм-ботов различными методами, начиная от написания бота на чистом Python без внешних фреймворков и заканчивая реализацией бота внутри фреймворка Django
Проект находится в стадии разработки и будет регулярно дополняться
- Настройка рабочей среды
- Хардкор-бот без фреймворков
- Бот с webhook на Flask
- Бот на Django
- Полезные ресурсы
Для начала необходимо установить и активировать виртуальную среду, обновить pip и установить все зависимости:
python3 -m venv venv
source ./venv/bin/activate
pip install pip --upgrade
pip install -r requirements.txtПростой эхо-бот. Умеет работать только с GET-запросами.
Для этого он использует библиотеку requests.
Для получения обновлений от Telegram используется метод getUpdates.
Исходники лежат здесь.
Предполагается, что токен лежит в файле
config.pyв папкеbot-hardcore
Разница между предыдущим ботом и этим в методе получения обновлений от Telegram.
Здесь бот вместо того, чтобы периодически спамить сервера Telegram методом getUpdates для получения обновлений,
работает по принципу Webhook.
Исходники лежат здесь.
Предполагается, что токен лежит в файле
config.pyв папкеbot-flask
-
Для этого на сервере необходимо настроить связку Flask + UWSGI + Nginx
В этом вам поможет статья на DigitalOceanTelegram требует, чтобы url-адрес для вебхука начинался с
https://. Поэтому для установки бота на локальный сервер или на сервер без SSL-сертификата вам понадобится установить "туннель" через сторонние сервисы типа localhost.run или ngrok. Рассмотрим пример установки с localhost.run.Например, если в ваш web-сервер на Flask с телеграм-ботом внутри запущен по адресу
127.0.0.1:5000(по умолчанию), вам достаточно ввести в терминале эту команду:ssh -R 80:localhost:5000 localhost.run
В ответ вы получите url-адреса вида
https://f6773f9edca4d5.localhost.run, по которому извне можно будет получить доступ к локальным файлам вашего компьютера
Для установки вебхука необходимо послать get-запрос такого формата:
https://api.telegram.org/{token}/setWebhook?url={url}Где:
- token - это токен, который вы получили от BotFather
- url - это url-адрес, на который будут приходить обновления в виде POST-запроса
Например:
https://api.telegram.org/bot123445:FJFIOEJFIOER/setWebhook?url=https://bot.mysite.comЧтобы послать get-запрос скопируйте url выше (изменив данные на свои) и:
- либо вставьте url в поле ввода адреса вашего браузера и нажмите Enter
- либо в терминале пошлите запрос через
curl:curl -X GET https://api.telegram.org/bot123445:FJFIOEJFIOER/setWebhook?url=https://f6773f9edca4d5.localhost.run
В ответ вы должны получить:
{
"ok":true,
"result":true,
"description":"Webhook was set"
}Бот, который реализован внутри приложения Django и запускаетя по команде python manage.py bot.
Используется фреймворк python-telegram-bot
Исходники лежат здесь.
Предполагается, что токен лежит в файле
config.pyв папкеbot-django
Для того, чтобы бот работал, он должен находиться внутри зарегистрированного приложения Django. Если у вас уже есть готовый проект на Django, переходите сразу на шаг №2. В ином случае:
- Создайте проект Django в терминале:
django-admin startproject myproject
cd ./myproject- Скопируйте
bot-djangoв родительскую папку проекта Django (в моем случае это папкаmyproject) и зарегистрируйте приложение в настройках по пути `myproject/settings.py':
...
INSTALLED_APPS = [
...
'bot-django',
]
...Если все прошло успешно, при наборе в терминале команды python manage.py --help вы должны увидеть что-то подобное:
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
...
[bot-django]
botКак вы, наверное, уже догадались, запуск бота осуществляется командой python manage.py bot.
Если бот успешно запущен, вы должны увидеть в терминале такой ответ:
{'id': 1234567890, 'first_name': 'Крутой-бот', 'is_bot': True, 'username': 'very_cool_bot', 'can_join_groups': False, 'can_read_all_group_messages': False, 'supports_inline_queries': False}