LichessStatTgWeb/LichessClientTG_bot
vrubelroman 8080921141
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 12s
fix periodic-check request queue throughput bottleneck
The bot's request_queue.py 4s FIFO gate wasn't protecting against Lichess's
rate limiter — that's already handled downstream in LichessWebServices/
rate_limiter.py (0.2s, shared across all callers of our stats service). The
bot-side gate only paced calls to our own local service, and since it awaited
each request to full completion before dequeuing the next, real dispatch gaps
were max(4s, previous request's duration) — with 454 tracked gamer/user pairs,
any burst (e.g. after a restart) piled into the queue and took 10-20+ minutes
to drain.

Replace it with a paced-dispatch + bounded-concurrency design: a hard 2s floor
between dispatches (still never lets 2+ requests through in that window),
decoupled from completion time, with up to 10 requests actually in flight at
once via a semaphore. Doesn't touch the real Lichess-facing rate limit at all.

Also add deterministic per-(user,gamer) checkpoint jitter: previously every
pair sharing the same period_minutes re-locked onto the same wall-clock phase
on every restart (backlog collapse snaps period_end_approx to `now` for
everyone overdue at once), recreating the pileup each time. Jitter is stable
across restarts (crc32-based, not Python's salted hash()) and capped well
under the 2h stale-backlog threshold. Small startup stagger added too, purely
cosmetic smoothing on top of the jitter fix.
2026-07-04 20:30:49 +00:00
..
admin_bot.py add /sendusers0 2025-11-28 18:28:51 +03:00
bot.py fix periodic-check request queue throughput bottleneck 2026-07-04 20:30:49 +00:00
config.py fix periodic-check request queue throughput bottleneck 2026-07-04 20:30:49 +00:00
database.py fix by codex 2026-03-21 22:58:47 +03: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 fix silent addgamer drop on restart and periodic-check backlog buildup 2026-07-04 18:33:45 +00:00
lichess_api.py fix silent onboarding drop-off in /addgamer flow 2026-07-03 12:23:40 +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. Логи контейнера на наличие ошибок