Azimkin ab8e129277 Implement automatic poll answer statistics tracking
Features:
- Add poll_mappings table to link Telegram poll_id with question_id
- Add PollStatisticsHandler to automatically record user votes
- Implement save_poll_mapping, get_question_id_by_poll methods
- Implement get_answer_id_by_option_index for answer lookup
- Update scheduler to save poll mappings on publish
- Add comprehensive test suite (test_statistics.py)
- Add STATISTICS_GUIDE.md with detailed documentation
- Update README.md with statistics features

Statistics features:
✅ Automatic vote counting for each answer option
✅ Percentage distribution display
✅ Anonymous tracking (no user data stored)
✅ View statistics via /manage → 📊 Statistics
✅ Support for multiple poll publications per question

All tests passing successfully!

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-05 12:27:45 +02:00
2026-04-05 12:18:08 +02:00

Would You Rather Bot

Telegram бот для проведения игр "Would You Rather" с автоматической публикацией вопросов по расписанию.

Возможности

  • 🎮 Публикация вопросов "Would You Rather" в виде опросов
  • 📊 Автоматическая запись статистики ответов
  • ⏰ Автоматическая публикация по расписанию (cron)
  • 🛠️ Управление вопросами и расписаниями через Telegram
  • 📝 Поддержка множественных источников вопросов через API
  • 🔒 Анонимная статистика (не сохраняются данные о пользователях)

Основные команды

  • /start - Начало работы с ботом
  • /manage - Панель управления (только для администраторов)
    • Добавление/редактирование/удаление вопросов
    • Просмотр статистики ответов в реальном времени
    • Управление расписаниями публикаций

Документация

Система расписаний

Бот поддерживает автоматическую публикацию вопросов по расписанию в формате cron.

Быстрый старт:

  1. Откройте /manage → ⏰ Расписания
  2. Нажмите ➕ Добавить расписание
  3. Отправьте: Ежедневно в 12:00 | 0 12 * * * | 1

Примеры расписаний:

  • 0 9 * * 1-5 - каждый будний день в 9:00 UTC
  • 0 */4 * * * - каждые 4 часа
  • 0 12 * * 6,0 - каждые выходные в 12:00 UTC

📖 Подробное руководство: SCHEDULER_GUIDE.md

Статистика ответов

Бот автоматически записывает статистику каждого голоса в опросах:

  • ✅ Подсчёт голосов за каждый вариант ответа
  • ✅ Процентное распределение
  • ✅ Просмотр через /manage → 📊 Смотреть статистику
  • ✅ Полная анонимность (не сохраняются данные о пользователях)

Пример статистики:

Что бы вы предпочли?

Путешествовать во времени: 42 (35.0%)
Читать мысли: 78 (65.0%)

Всего голосов: 120

📖 Подробнее: STATISTICS_GUIDE.md

Установка и запуск

Требования:

  • Python 3.11+
  • Telegram Bot Token
  • Telegram API credentials (api_id, api_hash)

Шаги установки:

  1. Клонируйте репозиторий:
git clone <repository-url>
cd WouldYouRather
  1. Создайте виртуальное окружение и установите зависимости:
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# или
.venv\Scripts\activate  # Windows

pip install -r requirements.txt
  1. Создайте файл .env с вашими credentials:
APP_ID=your_app_id
API_HASH=your_api_hash
BOT_TOKEN=your_bot_token
SESSION_NAME=would-you-rather-bot
  1. Настройте data/settings.toml:
# ID администраторов бота
admin_ids = [123456789]

# ID каналов для публикации
poll_channel_ids = [-1001234567890]

# Источники вопросов (опционально)
[[question_apis]]
name = "default-source"
url = "https://example.com/api/questions/random"
handler = "default"
  1. Запустите бота:
python main.py

Структура проекта

WouldYouRather/
├── bot/                    # Telegram бот
│   ├── bot.py             # Основной файл бота
│   ├── commands.py        # Команды бота
│   ├── manage.py          # Панель управления
│   └── scheduler.py       # Система расписаний
├── game/                   # Бизнес-логика
│   ├── database.py        # Работа с БД
│   ├── game.py            # Игровая логика
│   ├── settings.py        # Настройки приложения
│   └── api_service.py     # API для загрузки вопросов
├── data/                   # Данные (БД, сессии, конфиг)
│   ├── game.sqlite3       # База данных
│   └── settings.toml      # Конфигурация
├── main.py                # Точка входа
└── requirements.txt       # Зависимости

База данных

Бот использует SQLite для хранения:

  • Вопросов и ответов
  • Статистики голосований
  • Расписаний публикаций
  • Истории запусков расписаний

Структура создается автоматически при первом запуске.

Возможности управления

Вопросы:

  • ✅ Просмотр всех вопросов с пагинацией
  • ✅ Добавление новых вопросов
  • ✅ Редактирование существующих вопросов
  • ✅ Просмотр статистики по вопросам

Расписания:

  • ✅ Создание расписаний с cron-выражениями
  • ✅ Редактирование расписаний
  • ✅ Включение/выключение расписаний
  • ✅ Удаление расписаний
  • ✅ Просмотр всех расписаний

Логирование

Логи сохраняются в data/logs/ с ротацией:

  • bot.log - основной лог
  • Автоматическая ротация по дням
  • Хранение последних 7 дней

Лицензия

MIT License

Автор

Developed by @azimkin.dev

Description
телеграм-бот с игрой Would you rather?
Readme 107 KiB
Languages
Python 100%