Этот проект представляет собой Telegram-бота, работающего в режиме Webhook.
Бот написан на Python с использованием библиотеки python-telegram-bot
Данный проект основан на этой статье , код которой и был взят за основу для разработки бота на нижеописанном стеке.
Что умеет бот:
- Выдает 10 вопросов в виде викторины и проверяет правильность ответов
- Оповещает о необходимости пройти тесты (раз в сутки)
- Есть возможность настройки времени оповещения для каждого пользователя
- Есть возможность выбора сложности (вида) тестов для каждого пользователя
- Реализована возможность выбора темы викторины для каждого пользователя
Что требуется реализовать в будущем:
- Расширить перечень тем для викторины и наполнить бд по каждой из них
- Прикрутить к проекту Redis, Celery и подключить WebSocket для обработки событий в реальном времени.
- Реализовать сбор статистики пользователя для улучшения подачи вопросов
- Возможность поиска вопроса по названию
Подробнее ознакомится с ходом работы можно в релизах
Пощупать моего бота можно тут: CodeMasterBot
- Работа в режиме Webhook.
- Подключение к PostgreSQL для хранения данных.
- Админ-панель на Django для управления контентом.
- Поддержка викторины (в данный момент без сохранения результатов пользователей).
- Логирование всех событий в файлы и в Docker.
- Автоматический деплой через GitHub Actions.
- Проект запускается в четырёх контейнерах — db, wsgi, bot и nginx;
- Образы masterbot_backend, masterbot_bot и masterbot_nginx запушены на DockerHub;
- Реализован workflow c автодеплоем (GitHub Actions) на удаленный сервер и отправкой сообщения в Telegram;
- Зарегистрируйте Telegram бота
- Узнайте ID своего телеграм-аккаунта, необходимо для настройки оповещений (можно использовать для этого бота)
- Создайте файл .env в корне проекта. Шаблон для заполнения файла находится в .env.example
- Установите Docker и docker-compose
- В файле start_bot.py раскомментируйте код который отвечает за режим Polling и закомментируйте - за режим Webhook
- Запустите Docker Desktop
- Запустите docker compose, выполнив команду в терминале:
docker compose -f docker-compose.yml up --build -d - Выполните миграции:
docker compose -f docker-compose.yml exec wsgi python manage.py migrate - Создайте суперюзера:
docker compose -f docker-compose.yml exec wsgi python manage.py createsuperuser - Соберите статику:
docker compose -f docker-compose.yml exec wsgi python manage.py collectstatic --no-input - Зайдите в админку и создайте теги (тема: Функции, slug: func; тема: ..., slug: ...)
- Заполните базу вопросами:
docker compose -f docker-compose.yml exec wsgi python manage.py populate_questions - Бот готов к работе!
- Зарегистрируйте Telegram бота
- Узнайте ID своего телеграм-аккаунта, необходимо для настройки оповещений (можно использовать для этого бота)
- Создайте файл .env в корне проекта. Шаблон для заполнения файла находится в .env.example
- Установите Docker и docker-compose
- Зарегистрируйтесь и установите ngrok (если вы из России, то будут трудности...)
- Запустите Docker Desktop
- Запустите ngrok для создания публичного URL (в терминале выполните команду для проброса порта 8443):
ngrok http 8443 - Дополните файл .env адресом webhook который сгенерирует ngrok. Например:
WEBHOOK_URL=https://76fd-79-141-165-141.ngrok-free.app - Запустите docker compose, выполнив команду в терминале:
docker compose -f docker-compose.yml up --build -d - Выполните миграции:
docker compose -f docker-compose.yml exec wsgi python manage.py migrate - Создайте суперюзера:
docker compose -f docker-compose.yml exec wsgi python manage.py createsuperuser - Соберите статику:
docker compose -f docker-compose.yml exec wsgi python manage.py collectstatic --no-input - Зайдите в админку и создайте теги (тема: Функции, slug: func; тема: ..., slug: ...)
- Заполните базу вопросами:
docker compose -f docker-compose.yml exec wsgi python manage.py populate_questions - Бот готов к работе!
Режим Webhook работает только при запущенном ngrok и при его перезапуске необходимо менять WEBHOOK_URL адрес в .env и делать рестарт контейнеров!
Python Developer: Кунин Александр (k.u.n.i.n@mail.ru)
Manual QA Engineer: Татьяна Овчинникова (tg7110019@gmail.com)