телеграм бот что отправляет статистику и активность по игрокам lichess.org
Find a file
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
.forgejo/workflows remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
docs remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
LichessClientTG_bot fix periodic-check request queue throughput bottleneck 2026-07-04 20:30:49 +00:00
LichessWebServices simplify per-game table: tracked player only, no rating diff column 2026-07-03 10:08:35 +00:00
.env.example refactor: move bot tokens to .env, remove hardcoded credentials 2026-06-30 18:15:44 +00:00
.gitattributes add scripts pull variations 2025-11-16 21:52:05 +03:00
.gitignore remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
about.md messages when doing questions 2025-11-16 23:10:08 +03:00
analyze_notifications.py fix bug push from timer 2025-11-20 01:22:52 +03:00
CHANGELOG.md adding docs 2025-11-20 14:19:08 +03:00
check_recent_games.py пофиксил баг отправки уведомлений 2025-12-06 00:28:53 +03:00
check_today_activity.py fix bug push from timer 2025-11-20 01:22:52 +03:00
docker-compose.prod.yml remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
docker-compose.yml remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
export_db.sh пофиксил баг отправки уведомлений 2025-12-06 00:28:53 +03:00
import_db.sh Добавлена документация и скрипты для работы с БД 2025-10-28 21:38:10 +03:00
logs.sh пофиксил баг отправки уведомлений 2025-12-06 00:28:53 +03:00
README.md remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00
start.sh remove admin web panel (LichessWebView) from the project 2026-07-02 18:32:06 +00:00

Lichess Statistics Ecosystem

Полнофункциональная система для отслеживания статистики игроков Lichess.org с Telegram ботом.

🎯 Описание проекта

Система состоит из двух взаимосвязанных компонентов:

  1. LichessWebServices - REST API для получения статистики игроков Lichess
  2. LichessClientTG_bot - Telegram бот для управления подписками и уведомлений

🏗️ Архитектура

┌─────────────────────────────────────────────────────────────┐
│                     Telegram Users                           │
│                                                              │
│  ┌────────────────────────────────────────────────────┐   │
│  │           LichessClientTG_bot                       │   │
│  │  (Управление подписками, уведомления)               │   │
│  └────────┬───────────────────────────────────────────┘   │
│           │                                                 │
│  ┌────────▼───────────┐                                    │
│  │ LichessWebServices  │                                   │
│  │                     │                                   │
│  │  REST API для       │                                   │
│  │  получения          │                                   │
│  │  статистики         │                                   │
│  └────────┬────────────┘                                   │
│           │                                              │
└───────────┼──────────────────────────────────────────────┘
            │
            ▼
    ┌───────────────┐
    │  Lichess API  │
    └───────────────┘

🚀 Быстрый старт

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

# Клонируем репозиторий
git clone https://github.com/vrubelroman/LichessStatTgWeb.git
cd LichessStatTgWeb

# Запускаем все сервисы
./start.sh

Скрипт start.sh запустит все контейнеры в правильном порядке.

Доступные сервисы

После запуска доступны:

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

LichessStatTgWeb/
├── LichessWebServices/      # REST API сервис
│   ├── main.py              # FastAPI приложение
│   ├── stats_service.py     # Логика обработки статистики
│   ├── lichess_client.py   # Клиент для Lichess API
│   └── models.py           # Pydantic модели
│
├── LichessClientTG_bot/     # Telegram бот
│   ├── bot.py              # Основная логика бота
│   ├── database.py         # Работа с БД
│   ├── lichess_api.py     # API клиент
│   ├── formatters.py      # Форматирование ответов
│   └── config.py          # Конфигурация
│
├── docker-compose.yml       # Общая конфигурация контейнеров
├── start.sh                 # Скрипт запуска всех сервисов
└── README.md               # Этот файл

🔧 Компоненты

1. LichessWebServices (API)

REST API для получения статистики игроков Lichess.

Возможности:

  • Статистика за сегодня/вчера/неделю
  • Статистика игр по режимам (Bullet, Blitz, Rapid)
  • Статистика решения задач (puzzles)
  • Получение игр за произвольный период

Endpoints:

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

2. LichessClientTG_bot (Telegram бот)

Telegram бот для управления отслеживанием игроков Lichess.

Возможности:

  • Добавление игроков для отслеживания (друзья, соперники, ученики)
  • Выбор активного игрока
  • Получение статистики по всем отслеживаемым игрокам (сегодня/вчера/неделя)
  • Статистика за последний год или последние 1000 рейтинговых игр
  • Статистика по режимам (Bullet, Blitz, Rapid, Classical, Correspondence)
  • Статистика решения задач (puzzles)
  • Настройка периодических уведомлений с гибкими интервалами (15 минут - 24 часа)
  • Информативные сообщения о процессе обработки запросов
  • Каждый пользователь имеет свой набор игроков
  • Версионность бота (отображается в команде /support)
  • Многоязычная поддержка: Русский и английский языки с автоматическим определением и ручным выбором через /set_lang
  • Очередь запросов: Автоматическая задержка 7 секунд между запросами к Lichess API для периодических уведомлений

Команды:

  • /start - начало работы с ботом и добавление первого игрока
  • /addgamer - добавить игрока Lichess (только имя пользователя)
  • /addtoken - добавить игрока с токеном (для статистики по задачам)
  • /getgamers - выбрать активного игрока
  • /delgamer - удалить игрока из списка
  • /today - статистика за сегодня по всем отслеживаемым игрокам с активностью
  • /yesterday - статистика за вчера по всем отслеживаемым игрокам с активностью
  • /week - статистика за неделю по всем отслеживаемым игрокам с активностью
  • /lastYear_or_1000games - статистика за последний год или последние 1000 рейтинговых игр (по всем игрокам с активностью)
  • /setperiod - настроить периодические уведомления для активного игрока
  • /set_lang - выбрать язык бота (🇬🇧 English / 🇷🇺 Русский)
  • /support - контактная информация для обратной связи с разработчиком

Подробнее о боте: см. about.md

🗄️ База данных

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

  • telegram_users - пользователи Telegram
  • gamers - игроки Lichess
  • user_gamers - связь пользователей с игроками и настройки

Структура:

  • Каждый пользователь видит только своих игроков
  • У каждого пользователя свой активный игрок
  • Период отслеживания привязывается к паре пользователь-игрок

🐳 Docker

Все компоненты запускаются в Docker контейнерах:

# Запуск всех сервисов
docker-compose up -d

# Просмотр логов
docker-compose logs -f

# Остановка всех сервисов
docker-compose down

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

Telegram бот

Токены ботов задаются переменными окружения в .env (см. .env.example):

TELEGRAM_BOT_TOKEN=YOUR_BOT_TOKEN
ADMINPANEL_TELEGRAM_BOT_TOKEN=YOUR_ADMIN_BOT_TOKEN

LichessClientTG_bot/config.py читает их через os.getenv(...). Разделение на тестовый и продакшн стенды обеспечивается не флагом в коде, а раздельными .env на каждом окружении: на локальном/тестовом стенде — тестовые токены, на проде — свои, боевые.

Lichess API

Для получения статистики по задачам нужен токен Lichess:

  1. Зайдите на https://lichess.org/account/oauth/token/create
  2. Создайте токен с правами на чтение
  3. Используйте токен при добавлении игрока в боте

📊 API документация

Полная документация API доступна по адресу: http://localhost:8001/docs

Включает:

  • Swagger UI для интерактивного тестирования
  • Описание всех endpoints
  • Примеры запросов и ответов

🛠️ Разработка

Локальная разработка

# API сервис
cd LichessWebServices
docker-compose up -d

# Telegram бот
cd LichessClientTG_bot
docker-compose up -d

Логи

# Логи API
docker logs lichesswebservices_lichess-api_1 -f

# Логи бота
docker logs lichess-telegram-bot -f

📝 Лицензия

MIT

👤 Автор

Roman Vrubel

📖 Дополнительная информация

  • О боте - подробное описание функций бота, для кого он предназначен и примеры использования
  • История изменений - список всех изменений и обновлений проекта

🔗 Полезные ссылки