Skip to content

Khalmatov/python-telegram-bots

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram-боты от А до Я

Реализация телеграм-ботов различными методами, начиная от написания бота на чистом Python без внешних фреймворков и заканчивая реализацией бота внутри фреймворка Django

Проект находится в стадии разработки и будет регулярно дополняться

Оглавление

  1. Настройка рабочей среды
  2. Хардкор-бот без фреймворков
  3. Бот с webhook на Flask
    1. Запуск бота на сервере
      1. С SSL
      2. Без SSL
    2. Установка вебхука
  4. Бот на Django
    1. Настройка рабочей среды Django
    2. Запуск бота Django
  5. Полезные ресурсы

Настройка рабочей среды

Для начала необходимо установить и активировать виртуальную среду, обновить 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

Бот с webhook на Flask

Разница между предыдущим ботом и этим в методе получения обновлений от Telegram. Здесь бот вместо того, чтобы периодически спамить сервера Telegram методом getUpdates для получения обновлений, работает по принципу Webhook.
Исходники лежат здесь.

Предполагается, что токен лежит в файле config.py в папке bot-flask

  1. Запуск бота на сервере

    1. Запуск на сервере с установленным сертификатом SSL

    Для этого на сервере необходимо настроить связку Flask + UWSGI + Nginx
    В этом вам поможет статья на DigitalOcean

    1. Запуск на localhost или на сервере без SSL

    Telegram требует, чтобы 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, по которому извне можно будет получить доступ к локальным файлам вашего компьютера

  2. Установка вебхука

Для установки вебхука необходимо послать 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

Бот, который реализован внутри приложения Django и запускаетя по команде python manage.py bot.
Используется фреймворк python-telegram-bot
Исходники лежат здесь.

Предполагается, что токен лежит в файле config.py в папке bot-django

  1. Настройка рабочей среды Django

Для того, чтобы бот работал, он должен находиться внутри зарегистрированного приложения Django. Если у вас уже есть готовый проект на Django, переходите сразу на шаг №2. В ином случае:

  1. Создайте проект Django в терминале:
django-admin startproject myproject
cd ./myproject
  1. Скопируйте bot-django в родительскую папку проекта Django (в моем случае это папка myproject) и зарегистрируйте приложение в настройках по пути `myproject/settings.py':
...
INSTALLED_APPS = [
	...
	'bot-django',
	]
...
  1. Запуск бота 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}

Полезные ресурсы

  1. Официальная документация Telegram Bot API in English
  2. Документация Telegram Bot API на русском
  3. Уроки про Telegram-боты от Олега Молчанова на YouTube
  4. Уроки по фреймворку Aiogram от Physics is Simple на YouTube

About

Телеграм-боты от А до Я

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages