Оглавление
Создание чат-бота в Telegram для платформы интеллектуального волонтерства ProCharity (НКО Фонд Друзья).
Чат-бот @ProCharity_bot
Платформа представляет собой агрегатор волонтерских заданий от различных благотворительных проектов - любой желающий согласно своим желаниям и умениям может откликаться на конкретные предложения благотворительных проектов о волонтерской помощи, в свою очередь благотворительный проект/фонд выбирает из всех откликов подходящих кандидатов.
Чат-бот реализует функционал волонтерской платформы в приложении Telegram - с помощью JSON рассылает подписчикам новые появляющиеся задания от фондов.
-
Создайте и заполните файл
.env
:# Переменные приложения BOT_TOKEN= # Токен аутентификации бота SECRET_KEY= # Cекретный ключ для генерации jwt-токенов # Переменные базы данных POSTGRES_DB=procharity_back_db_local # Название базы данных POSTGRES_USER=postgres # Логин для подключения к базе данных POSTGRES_PASSWORD=postgres # Пароль для подключения к базе данных DB_HOST=procharity_postgres # Название хоста с БД DB_PORT=5432 # Порт для подключения к базе данных # Organization data ORGANIZATIONS_EMAIL=[email protected] # Адреса электронной почты администраторов EMAIL_ADMIN=[email protected]
Note Для получения токена аутентификации бота обратитесь к разделу Регистрация бота Telegram.
-
Собрать и запустить контейнеры из файла infra/docker-compose.local.yml.
docker compose -f infra/docker-compose.local.yml up
Эта команда создаст и запустит все необходимые контейнеры, включая базу данных и бэкенд.
-
После успешного запуска контейнеров, выполните следующую команду, которая войдет в контейнер, выполнит миграции и наполнит тестовую базу данных (включая таблицу пользователей):
docker exec -it procharity_bot_backend sh -c "alembic upgrade head && python3 fill_db.py with_fake_users"
Если тестовая база данных должна содержать только задания и не должна содержать таблицу пользователей, то необходимо выполнить команду:
```shell
docker exec -it procharity_bot_backend sh -c "alembic upgrade head && python3 fill_db.py"
```
-
Клонировать репозиторий.
git clone https://github.com/Studio-Yandex-Practicum/ProCharity_back_2.0.git cd ProCharity_back_2.0
-
Установить зависимости и активировать виртуальное окружение.
poetry env use python3.11 poetry install poetry shell
-
Настроить pre-commit. В режиме
poetry shell
pre-commit install
Note Перед каждым коммитом будет запущен линтер и форматтер, который автоматически отформатирует код согласно принятому в команде codestyle.
-
Создайте и заполните файл
.env
:# Переменные приложения BOT_TOKEN= # Токен аутентификации бота SECRET_KEY= # Cекретный ключ для генерации jwt-токенов # Переменные базы данных POSTGRES_DB=procharity_back_db_local # Название базы данных POSTGRES_USER=postgres # Логин для подключения к базе данных POSTGRES_PASSWORD=postgres # Пароль для подключения к базе данных DB_HOST=localhost # Название хоста с БД DB_PORT=5432 # Порт для подключения к базе данных # Organization data ORGANIZATIONS_EMAIL=[email protected] # Адреса электронной почты администраторов EMAIL_ADMIN=[email protected]
Note Для получения токена аутентификации бота обратитесь к разделу Регистрация бота Telegram.
-
Запустить Docker с БД.
sudo docker compose -f infra/docker-pg.yml up -d
-
Применить миграции базы данных.
alembic upgrade head
-
Выполнить скрипт наполнения тестовой базы.
Генерация тестовых данных без таблицы пользователей
python3 fill_db.py
Генерация тестовых данных c таблицей пользователей
python3 fill_db.py with_fake_users
-
Запустить сервер приложения.
uvicorn src:app --reload
После выполнения инструкций, описанных в разделе "Для разработки",
будет запущен FastAPI-сервер по адресу http://localhost:8000.
Также по адресу http://localhost:8000/docs доступна полная документация API.
Данный раздел содержит информацию, которая может быть полезна для разработчиков. Настоятельно рекомендуем каждому прочитать его хотя бы один раз.
-
Найдите в Telegram бота @BotFather и откройте с ним чат.
-
Напишите ему
/newbot
. -
Придумайте и напишите название бота. Оно будет отображаться в контактах и чатах. Например:
My Dev Bot
. -
Придумайте и напишите юзернейм. Он используется для упоминания бота и в ссылках. Юзернейм должен быть на латинице и обязательно заканчиваться на «bot». Например:
my_dev_bot
. -
Готово. @BotFather пришлет токен бота — его нужно скопировать в переменную окружения
BOT_TOKEN
(см. в разделе "Установка и Запуск").
-
Запуск без API приложения
Выполнить скрипт запуска.
python src/run.py
Warning: Возможно только в режиме polling.
-
Polling
Задать значение переменной окружения (
.env
).BOT_WEBHOOK_MODE=False
-
Webhook
Задать значение переменным окружения (
.env
).BOT_WEBHOOK_MODE=True APPLICATION_URL=http://example.com # Пример
Note Подробнее о webhooks
Note Для теста через HTTPS можно использовать Ngrok (см. раздел "Использование Ngrok").
-
Применить существующие миграции:
alembic upgrade head
-
Создать новую миграцию:
alembic revision --autogenerate -m "<Название миграции>"
В название миграции указывается для какого поля или модели внесены изменения, например:
- add_shift_model
- shift_add_field_title
- shift_remove_field_title
-
Повторить пункт 1, для применения созданной миграции.
-
Откатить последнюю миграцию:
alembic downgrade -1
В этом разделе представлены наиболее часто используемые команды.
Подробнее: https://python-poetry.org/docs/cli/
-
Настройка окружения проекта Установку необходимо выполнять через curl, как в документации.
poetry env use python3.11; poetry install
-
Активировать виртуальное окружение
poetry shell
-
Добавить зависимость
poetry add <package_name>
Note Использование флага
--dev (-D)
позволяет установить зависимость, необходимую только для разработки. Это полезно для разделения develop и prod зависимостей.
poetry run <script_name>.py
Этот раздел будет полезен, если у вас нет доменного имени с установленным SSL-сертификатом.
Ngrok — это инструмент, который позволяет создавать временный общедоступный адрес (туннель) для вашего локального сервера, находящимся за NAT или брандмауэром.
Подробнее: https://ngrok.com/
https://ngrok.com/download
В режиме локального запуска.
-
Запустите сервер:
ngrok http http://127.0.0.1:8000/
-
Задайте значение переменной окружения в файле (.env) :
APPLICATION_URL=https://1234-56-78-9.eu.ngrok.io # Это пример. Рабочее значение нужно взять в появившемся окне ngrock п.1
В режиме разработки. Задайте значение переменной окружения в (.env).
USE_NGROK=True