Skip to content

A telegram bot game for guessing historical dates.

License

Notifications You must be signed in to change notification settings

welel/date-duel-bot

Repository files navigation

Date Duel - игровой телеграм бот для угадывания исторических дат

Ссылка: https://t.me/dateduelbot

Это Telegram-бот для игры в угадывание исторических дат. Пользователь запускает игру, набрав /play, и бот выдает событие. Пользователь должен угадать дату события. Бот будет давать подсказки после каждого неверного предположения и обновлять счет пользователя после каждой игры. Пользователь может просмотреть свой прогресс, набрав /stat.

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

Команды:

  • /start - запустить бота.
  • /help - правила игры и команды.
  • /play - начать играть.
  • /sur - сдаться и получить информацию о событии.
  • /cancel - выход из режима игры.
  • /stat - просмотреть статистику.

Бот использует базу данных MongoDB для пользовательской информации и результатов игр. Это позволяет боту отслеживать прогресс пользователя с течением времени и обеспечивает долговременное хранение его прогресса.

Зависимости

Python 3.8
aiogram 3.0.* - для использования Telegram Bot API
PyMongo - драйвер для MongoDB

Установка

  1. Клонирование репозитория:
git clone https://github.com/welel/date-duel-bot.git
  1. Заполнить файл .env.dist и переименовать его .env.

  2. Сборка образа и запуск контейнеров при помощи Docker Compose. Бот автоматически запустится и будет готов к работе.

docker compose up --bulid -d

Данные

Данные с историческими событиями хранятся в json файле res/events.json.

[{
  "_id": 0, // Уникальное
  "_type": "date",
  "event": "Начало княжения Рюрика",
  "date": 862,
  "description": "Рюрик начал свое княжение...", // Опциональное
  "image_path": "res/images/date-0.jpg" // Опциональное
}]

Структура MongoDB:

// Collection - Players
{
  "_id": {
    "$numberLong": "6855231396" // Уникальное (tg user id)
  },
  "current_event": null, // id угадываемого события
  "guessed_events": [0, 1], // Отгаданные события
  "attempts": 7, // Общее кол-во попыток
  "score": 37 // Очки
}