Skip to content

pavel-glukhov/Secret-Santa-Telegram-Bot

Repository files navigation

Secret Santa Telegram Bot

Описание

  • Бот для игры в Тайного Санту через Telegram бота

Схема: https://miro.com/app/board/uXjVNxWmMtE=/?share_link_id=603886678614

Поддержка 4-х языков, перевод был осуществлен машинным способом. Включенные языки:

  1. RU

  2. ENG

  3. KAZ

  4. UK

  5. Создание персональных комнат

    • Каждый желающий может создать комнату для неограниченного количества людей.

      • При создании нужно указать:
        • Имя комнаты
        • Бюджет для своей компании игроков
        • Свои пожелания для подарка

      Переменная окружения USER_ROOMS_LIMIT задает лимит колличества комнат, которыми может управлять один игрок.

      При создании комнаты, генерируется случайный уникальный номер, длина номеера задается параметром ROOM_NUBER_LENGTH.

  6. Вход в существующую комнату по ID комнаты

  7. Управление своим профилем

    • Бот позволяет внести и изменить такие данные как:
      • Имя и Фамилия
      • Домашний Адрес
      • Номер Телефона
      • Часовой пояс
      • Разрешено полное удаление внесенных данных

    Адрес и номер телефона шифруется в базе Fernet алгоритмом в целях безопасности.

  8. Управление комнатами

    • Меню управления комнатами для обычного пользователя:

      • Выйти из комнаты
      • Изменить пожелания
    • Меню управления комнатами для владельца:

      • Начать игру - позволяет установить время рассылки
        • Указать часовой пояс - Установить часовой пояс для конкретной зоны
      • Изменить пожелания
      • Настройки
        • Удалить комнату
        • Изменить имя комнаты
        • Изменить владельца
        • Изменить бюджет комнаты

      Администратор комнаты не может выйти из нее, пока не передаст управление другому. Комната может быть только окончательно удалена.

      Если при жеребьевке не оказалось нужного колличества игроков, комнату можно активировать повторно.

  9. Коммуникация

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

    • Отправка сообщения Тайному Санте
    • Отправка сообщения получателю
  10. Не реализовано в боте

    1. Покрытие тестами

Стек

  1. Aiogram 3
  2. FastAPI
  3. SQLAlchemy 2
  4. Alemnic
  5. PostgreSQL
  6. Redis

Запуск Бота:

Ручной запуск:

  • Установить PostgreSQL и Redis, сконфигурировать и создать БД.
    • Redis требует включения доступа по паролю:
      sudo nano /etc/redis/redis.conf
      # requirepass foobared
      
    • Создать свой .env файл по шаблону .env.example
    • pip install -r requirements
    • alembic upgrade head
    • uvicorn app.cli:create_app --reload

В Docker контейнере:

  • Установить Docker https://docs.docker.com/engine/install/ubuntu/

    • Создать свой .env файл по шаблону .env.example
  • Запуск Docker Compose

    • docker-compose up -d
  • Пересборка при обновлении кода

    • docker-compose build
  • Перезапуск контейнеров с пересобранными образами:

    • docker-compose up -d --build

    Миграции

      docker exec -t <backend container> alembic upgrade head

Права доступа:

  • Что бы добавить Superuser права пользователю, выполните:

       python .\manage.py set_superuser <telegram_user_id>
  • Что бы удалить их, выполните ****

        python .\manage.py remove_superuser <telegram_user_id>
  • Регистрация вебхука

      python .\manage.py register_webhook

    Или сформируйте и сделайте GET запрос https://api.telegram.org/bot{telegram_token}/setWebhook?url=https://{domain_name}/bot/

    Пример: https://api.telegram.org/bot1234567890:AAABBBCCCDDDEEEFFF0000000_FFFFF/setWebhook?url=https://e87d-5-76-101-111.ngrok-free.app/bot/

  • Так же, для работы Telegram Login Widget, требуется зарегистрировать домен вашего сайта в @BotFather используя команду /setdomain

Бекапы

Бекапить базу данных можно с помощью команды ниже, добавленной в cron: docker exec -t <имя_контейнера> pg_dump -U <имя_пользователя> <имя_базы_данных> > <имя_файла>.sql

Или добавить готовый скрипт в cron находящийся в deploy\backup. Нужно будет внести настройки под себя.