date-duel-bot
date-duel-bot copied to clipboard
A telegram bot game for guessing historical dates.
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
Установка
- Клонирование репозитория:
git clone https://github.com/welel/date-duel-bot.git
-
Заполнить файл
.env.distи переименовать его.env. -
Сборка образа и запуск контейнеров при помощи 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 // Очки
}