Как стать автором
Обновить

Как писать telegram ботов в django приложениях?

Django *Git *Python *
Ожидает приглашения

Этой статьей я хотел дополнить тот маленький клочок информации доступный в интернете по теме создания ботов который мне явно бы пригодился в прошлом. Сегодня речь пойдет о соединения вашего серверного приложения с Telegram ботом на примере языка Python, его фреймворка для разработки серверных приложений - Django и библиотеки для создания Telegram ботов - pyTelegramBotApi.


Введем вас в курс дела

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

  • pyTelegramBotApi - это лишь библиотека, своего рода обертка вокруг Telegram Api, поэтому если перед вами стоит задача написать бота с использованием любой другой библиотеки, то не отчаивайтесь. Они все одинаковые... В прямом смысле, ведь их функционал не может выйти за рамки Telegram Api и Telegram Bot Api. Почитайте документации библиотек и поймете что это так.

  • API - это программный интерфейс предоставляющий информацию с сервера через запросы.

  • Python - тоже является лишь языком программирования и если вам нужно написать бота на JavaScript или даже Dart, то не бойтесь ведь основные моменты как и в случае с библиотеками никак отличаться не будут.

  • Пусть библиотека pyTelegramBotApi и называется так, но в коде импортируется как telebot. Не путайте ее с telebot которая тоже не плохая и очень похожа на нее, но в этой статье речь пойдет не о ней.

Файловая структура проектов Django

Стандартная структура проектов Django показанная в проводнике Visual Studio Code
Стандартная структура проектов Django показанная в проводнике Visual Studio Code

В папке project которая создается самим фреймворком хранятся настройки и пути уровня проекта. Как вы уже могли понять проект называется project. А папка application - это уже приложение проекта в котором прописываются модели, представления, маршруты, тесты, настройки административного сайта и так далее. Этот список дополняется и изменяется в зависимости от предназначения приложения, формата получаемых и возвращаемых данных.

Структура Telegram ботов

Здесь уже нет какой-то конкретной структуры. Обычно пишут обработчики событий, команд, сообщений и типов контента. Запускают бесконечный цикл, передают туда токен и радуются жизни. Так мы и поступим)

А теперь когда всем всё ясно можно начинать!


Использование BaseCommand в Django

Чтобы использовать телеграмм бота в проекте можно запускать его через команды. Это то, что вы передаете в manage.py. Это делается вот так:

Необходимо в приложении создать папку под названием management и в ней создать файл __init__.py. Внутри management нужно создать папку commands и уже в ней вместе с __init__.py создать файл который будет называться так же как и ваша будущая команда.

В файле команды, в нашем случае это - bot.py вам нужно создать класс который наследует от BaseCommand как показано ниже:

from django.core.management.base import BaseCommand
from django.conf import settings
from telebot import TeleBot


# Объявление переменной бота
bot = TeleBot(settings.TELEGRAM_BOT_API_KEY, threaded=False)


# Название класса обязательно - "Command"
class Command(BaseCommand):
  	# Используется как описание команды обычно
    help = 'Implemented to Django application telegram bot setup command'

    def handle(self, *args, **kwargs):
        bot.enable_save_next_step_handlers(delay=2) # Сохранение обработчиков
        bot.load_next_step_handlers()								# Загрузка обработчиков
        bot.infinity_polling()											# Бесконечный цикл бота

К слову токен от бота это секретная информация и его стоит объявить в конфигурации проекта - settings.py, а указать его вообще в файле переменных сред вроде .env, settings.ini и тому подобные. Конечно же если вы собираетесь публиковать свой код где-нибудь на просторах интернета, то файлы содержащие опасную информацию лучше скрывать или добавлять в игнор лист. Как в примере с Git это будет .gitignore.

Вот и всё! Теперь вы можете запускать своего бота через команду:
python manage.py bot

Что просто замечательно в таком подходе что вам не нужно подключаться к базе данных из вне или как-либо усложнять себе жизнь для соединения базы данных для бота и серверного приложения. Все данные вам будут доступны через модели самого Django.

А теперь хотелось бы поблагодарить вас за прочтение этой статьи. Я надеюсь, что она сохранит вам пару часов а-то и дней поисков и напрасных стараний. Если есть какие-либо пожелания или вопросы, то оставляйте их в комментариях. Постараюсь в следующих статьях покрыть это полностью.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.