Skip to content
Skip-BugPublic

About

Бот викторина

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🎯 bot-quiz

📖 Описание

Бот-викторина «Своя игра» для Telegram и ВКонтакте. Задаёт вопросы из базы, проверяет ответы с опечатками через нечёткое сравнение, хранит вопросы и текущее состояние игроков в Redis.

Telegram VKontakte
Telegram VKontakte

GitHub Репозиторий Лицензия MIT VK Telegram

🧰 Требования

  • 🐍 Python 3.8 – 3.10 (более новые версии не тестировались). Версию можно узнать командой:

    python --version
  • 🟥 Redis (локально или удалённо).

    Проверить, что запущен:

    redis-cli ping
    # → PONG

⚙️ Переменные окружения

  • 🔑 Telegram Bot Token: инструкция по регистрации бота доступна здесь. Пример токена: 958423683:AAEAtJ5Lde5YYfkjergber.

  • 🔑 VK Bot Token — инструкция ниже.

🪙 Получение токена ВКонтакте

Создайте группу в ВКонтакте.

Включить сообщения: Управление сообществом → Сообщения → Сообщения сообщества: Включены. Сообщения

Включить Long Poll: Управление сообществом → Дополнительно → Работа с API → Long Poll API. Переключатель в положение «Включено», версию API выберите свежую. Long Poll

Выбрать типы событий: Там же, на вкладке «Типы событий», поставьте галочку напротив «Входящие сообщения» (message_new).

Включить возможности ботов: Управление сообществом → Сообщения → Настройки для бота → «Возможности ботов»: Включены. Без этого клавиатура и часть методов будут падать с ошибкой [912]. Возможности ботов

Создать токен: На вкладке «Ключи доступа» нажмите «Создать ключ» и дайте ему права на сообщения. Этот токен вставьте в переменную VK_BOT_TOKEN. Ключи доступа

🧱 Установка

📦 Установите зависимости:

pip install -r requirements.txt

⚙️ Настройте переменные окружения. Создайте файл .env в корне проекта:

TG_BOT_TOKEN=ваш_токен_телеграм_бота
VK_BOT_TOKEN=ваш_токен_вконтакте
REDIS_URL=redis://localhost:6379/0

📚 База вопросов

В папке quiz-questions/ лежат .txt-файлы в кодировке KOI8-R. Формат блока:

Вопрос 1:
Текст вопроса?
Ответ:
Текст ответа.
Комментарий:
Необязательный комментарий для ведущего.

Блоки разделяются пустой строкой. Парсер:

  • склеивает переносы внутри блока,
  • вырезает пометки [чтецу ...], [ведущему ...],
  • обрезает ответ до первого предложения,
  • убирает дубли по «отпечатку» (регистр, пунктуация, ё/е).

Если у вас UTF-8 вместо KOI8-R — перекодируйте файлы или поменяйте encoding в questions.load_quiz.

📥 Заливка базы в Redis

После первого запуска (и при изменении .txt) базу надо залить в Redis:

python load_quiz_to_redis.py
# → Залито вопросов: 300000

Проверка:

redis-cli LLEN quiz:questions
# → 300000

Без этого шага боты ответят «База пуста».

🚀 Запуск

Telegram-бот:

python tg_bot_quiz.py

VK-бот:

python vk_bot_quiz.py

Оба бота можно запускать одновременно — они независимы и используют разные префиксы ключей в Redis (tg: и vk:).

🎮 Как играть

  • /start — приветствие и клавиатура.
  • Новый вопрос — бот задаёт вопрос.
  • Ответ текстом — бот сравнит с правильным:
    • «Правильно!» — если совпало (или почти).
    • «Близко! Попробуй ещё раз.» — если похоже, но не точно.
    • «Неверно. Правильный ответ: …» — если мимо.
  • Сдаться — бот покажет правильный ответ.
  • Мой счёт — пока заглушка.

⚙️ Как это работает

  • Вопросы хранятся в Redis, ключ quiz:questions. Бот достаёт случайный вопрос из Redis, не загружая базу в память.

  • Каждый игрок имеет свой текущий вопрос, он хранится в Redis:

    tg:user:<id>:current_question / current_answer (для Telegram)
    vk:user:<id>:current_question / current_answer (для VK)
    
  • Проверка ответа — rapidfuzz.token_sort_ratio:

    • ≥ 80 → correct (верно)
    • ≥ 50 → close (близко)
    • иначе → wrong (неверно)

⚖️ Лицензия

MIT License

🎡 Цель проекта

Код написан в образовательных целях на онлайн-курсе для разработчиков dvmn.org.

About

Бот викторина

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages