Skip to content

K-u-n-i-n/CodeMasterBot

Repository files navigation

🤖 CodeMasterBot

Этот проект представляет собой Telegram-бота, работающего в режиме Webhook.
Бот написан на Python с использованием библиотеки python-telegram-bot
Данный проект основан на этой статье , код которой и был взят за основу для разработки бота на нижеописанном стеке.


Что умеет бот:

  • Выдает 10 вопросов в виде викторины и проверяет правильность ответов
  • Оповещает о необходимости пройти тесты (раз в сутки)
  • Есть возможность настройки времени оповещения для каждого пользователя
  • Есть возможность выбора сложности (вида) тестов для каждого пользователя
  • Реализована возможность выбора темы викторины для каждого пользователя

Что требуется реализовать в будущем:

  • Расширить перечень тем для викторины и наполнить бд по каждой из них
  • Прикрутить к проекту Redis, Celery и подключить WebSocket для обработки событий в реальном времени.
  • Реализовать сбор статистики пользователя для улучшения подачи вопросов
  • Возможность поиска вопроса по названию

Подробнее ознакомится с ходом работы можно в релизах
Пощупать моего бота можно тут: CodeMasterBot

🚀 Основной функционал

  • Работа в режиме Webhook.
  • Подключение к PostgreSQL для хранения данных.
  • Админ-панель на Django для управления контентом.
  • Поддержка викторины (в данный момент без сохранения результатов пользователей).
  • Логирование всех событий в файлы и в Docker.
  • Автоматический деплой через GitHub Actions.

Технологии:

Python Django python-telegram-bot

PostgreSQL Docker

Language

Особенности реализации

  • Проект запускается в четырёх контейнерах — db, wsgi, bot и nginx;
  • Образы masterbot_backend, masterbot_bot и masterbot_nginx запушены на DockerHub;
  • Реализован workflow c автодеплоем (GitHub Actions) на удаленный сервер и отправкой сообщения в Telegram;

Main CodeMasterBot workflow

Развертывание на локальном сервере в режиме: Polling

  • Зарегистрируйте 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
  • Бот готов к работе!

Развертывание на локальном сервере в режиме: Webhook

  • Зарегистрируйте 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)

About

🚀 Пет-проект: 🤖 Бот для изучения Python

Resources

Stars

Watchers

Forks

Packages

No packages published