LichessStatTgWeb/LichessClientTG_bot
vrubelroman 619c00aa06
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 12s
stop infinite retry loop on rejected Lichess tokens
A gamer's periodic check would get permanently stuck if their stored token
was revoked/expired: our stats API collapsed both "Lichess rejected the
token" (401/403, permanent) and genuine transient errors into the same 502
response, so the bot treated an invalid token exactly like a network blip —
retrying the same window forever at a capped 300s backoff, never advancing
the checkpoint (observed in prod: Dor1zz stuck for 100+ consecutive errors
over 8+ hours, admin alerts firing every 25 failures).

Preserve the distinction that already existed one layer down (lichess_client.py
already tells 401/403 apart from other failures) instead of collapsing it in
stats_service.py: add PuzzleOfPeriodResponse.auth_failed, have main.py return
401 specifically for that case, and have the bot raise a distinct
InvalidTokenError instead of returning None. On InvalidTokenError, the bot now
clears the token for that pair, notifies the user to reconnect via /addtoken,
and continues tracking games normally instead of stalling forever.
2026-07-05 07:37:14 +00:00
..
admin_bot.py add /sendusers0 2025-11-28 18:28:51 +03:00
bot.py stop infinite retry loop on rejected Lichess tokens 2026-07-05 07:37:14 +00:00
config.py fix periodic-check request queue throughput bottleneck 2026-07-04 20:30:49 +00:00
database.py stop infinite retry loop on rejected Lichess tokens 2026-07-05 07:37:14 +00:00
Dockerfile Создание единого проекта Lichess Statistics Ecosystem 2025-10-26 20:23:26 +03:00
Dockerfile.admin admin panel 2025-11-13 01:00:48 +03:00
formatters.py fix silent addgamer drop on restart and periodic-check backlog buildup 2026-07-04 18:33:45 +00:00
helpEN.jpeg заменил картинки 2025-12-03 13:02:14 +03:00
helpRU.jpeg заменил картинки 2025-12-03 13:02:14 +03:00
i18n.py stop infinite retry loop on rejected Lichess tokens 2026-07-05 07:37:14 +00:00
lichess_api.py stop infinite retry loop on rejected Lichess tokens 2026-07-05 07:37:14 +00:00
message_counters.py add statistics 2025-11-13 13:32:46 +03:00
migrate_tokens.py Исправление двойного ответа и улучшение системы 2025-10-28 21:34:35 +03:00
rate_limiter.py rate limiter 0.2 sec 2025-11-18 15:10:19 +03:00
README.md Создание единого проекта Lichess Statistics Ecosystem 2025-10-26 20:23:26 +03:00
request_queue.py fix periodic-check request queue throughput bottleneck 2026-07-04 20:30:49 +00:00
requirements.txt Создание единого проекта Lichess Statistics Ecosystem 2025-10-26 20:23:26 +03:00
run.sh Change API host port to 8002 2026-03-21 23:14:51 +03:00
version.py /addgamer выдает страничку игрока 2025-11-23 16:53:12 +03:00
view_db.py Создание единого проекта Lichess Statistics Ecosystem 2025-10-26 20:23:26 +03:00

Lichess Telegram Bot

Телеграм бот для получения статистики игроков Lichess с использованием вашего веб-сервиса.

Возможности

  • Добавление пользователей: Добавление игроков Lichess с токеном или без
  • Выбор активного игрока: Глобальный выбор активного игрока для всех чатов
  • Статистика: Получение статистики за сегодня, вчера и неделю
  • Периодические уведомления: Настройка автоматических уведомлений о активности игрока

Команды

  • /start - Начать работу с ботом
  • /adduser - Добавить нового игрока Lichess
  • /getgamers - Выбрать активного игрока
  • /today - Статистика за сегодня
  • /yesterday - Статистика за вчера
  • /week - Статистика за неделю
  • /setperiod - Настроить периодические уведомления

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

С помощью Docker (рекомендуется)

  1. Убедитесь, что ваш Lichess API сервис запущен на http://localhost:8001

  2. Запустите бота:

docker-compose up -d
  1. Проверьте логи:
docker-compose logs -f lichess-bot

Локальная установка

  1. Установите зависимости:
pip install -r requirements.txt
  1. Скопируйте файл конфигурации:
cp .env.example .env
  1. Запустите бота:
python bot.py

Конфигурация

Основные настройки находятся в файле config.py:

  • TELEGRAM_BOT_TOKEN - Токен вашего телеграм бота
  • LICHESS_STATS_API_BASE_URL - URL вашего веб-сервиса (по умолчанию http://localhost:8001)
  • PERIOD_OPTIONS - Доступные периоды для уведомлений
  • POLL_INTERVAL - Интервал опроса Telegram API (1.0 секунда)
  • POLL_TIMEOUT - Таймаут для Long Polling (30 секунд)
  • DROP_PENDING_UPDATES - Игнорировать накопившиеся обновления при запуске
  • ALLOWED_UPDATES - Типы обновлений для обработки

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

├── bot.py              # Основной файл бота
├── database.py         # Работа с базой данных SQLite
├── lichess_api.py      # API клиент для Lichess и вашего сервиса
├── formatters.py       # Форматирование ответов
├── config.py           # Конфигурация
├── requirements.txt    # Python зависимости
├── Dockerfile          # Docker образ
├── docker-compose.yml  # Docker Compose конфигурация
└── README.md          # Документация

API Endpoints

Бот использует следующие endpoints вашего сервиса:

  • GET /today/{username} - Статистика за сегодня
  • GET /yesterday/{username} - Статистика за вчера
  • GET /week/{username} - Статистика за неделю
  • GET /games/{username}/period - Игры за период
  • GET /puzzle/period - Задачи за период (требует токен)

База данных

Используется SQLite база данных с таблицами:

  • gamers - Игроки Lichess
  • chat_active_gamers - Активные игроки по чатам (не используется для глобального режима)

Логирование

Бот ведет подробные логи всех операций. В Docker контейнере логи можно просмотреть командой:

docker-compose logs -f lichess-bot

Мониторинг

Docker Compose включает health checks для мониторинга состояния сервисов.

Поддержка

При возникновении проблем проверьте:

  1. Запущен ли ваш Lichess API сервис на порту 8001
  2. Правильность токена телеграм бота
  3. Логи контейнера на наличие ошибок