Skip to content

kuzmich/django_api_telegram_bot

Repository files navigation

Погодное API и телеграм бот на Django (в одном флаконе)

Это шаблон, на основе которого можно начать разрабатывать API на Джанго, и одновременно использовать Django как обработчик веб-хуков Telegram. Т.к. популярные решения для разработки телеграм-ботов, например python-telegram-bot, используют свой веб-сервер, это усложняет интеграцию бота в проект.

Компромиссы

Правильным решением было бы интегрировать готовую библиотеку для телеграм-ботов, например (customwebhookboot.py), а не изобретать колесо и обрабатывать сообщения "руками". Однако хотелось показать идею минимальным количеством кода.

Python

Версия Python - 3.10+, т.к. используется Structural Pattern Matching.

Структура файлов

В шаблоне не используется стандартная для Django структура файлов. Вместо этого проект оформлен как Python package, из которого можно собрать distribution package (.whl или .tar.gz).

Файл настроек (local_settings.py)

Скопируйте файл local_settings.py.tmpl в local_settings.py и сделайте нужные настройки.

В коде используется API Яндекс.Погоды, и соответственно нужен ключ для доступа к API, который можно получить в Кабинете разработчика. Впишите его в YANDEX_API_KEY.

Также потребуется ключ для BotAPI - его можно получить у BotFather. Впишите его в BOT_TOKEN.

При разработке можно использовать Local Bot API Server, который позволяет использовать http вместо https для обработчика запросов от телеграма. Установите значение TG_API_BASE_URL в нужное значение.

INSTANCE_DIR - это директория, где лежат файлы, не входящие в пакет - файл настроек, файлы кеша. По-умолчанию выставляется в папку, в которой лежит manage.py. Идея заимствована из Flask.

Запуск локально

$ python -m venv path/to/env/dir
$ source path/to/env/dir/bin/activate

$ mv local_settings.py.tmpl local_settings.py
$ пропишите нужные настройки

$ pip install -e .
$ ./manage.py runserver

Запуск тестов

$ pytest -v tests/

Развертывание на сервере

$ pip install -U build
$ python -m build

$ scp dist/weather_ab-1.0.0-py2.py3-none-any.whl my_server:/some/path
$ scp prod_settings.py wsgi.py my_server:/some/path

$ ssh my_server
$ cd /some/path

$ python -m venv .venv
$ source .venv/bin/activate

$ pip install weather_ab-1.0.0-py2.py3-none-any.whl
$ pip install gunicorn

$ gunicorn wsgi

About

Django project template with Telegram bot webhook as usual Django view

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages