Commit graph

24 commits

Author SHA1 Message Date
vrubel
293c1d90c8 fix: player tracking subscription flow and /myplayers display
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 4s
- scan_for_player: remove hardcoded TNR range (1434k-1450k), search full cache
- discover_max_tnr: start from cache MAX(tnr) instead of stuck-at-500k value
- addplayer: if no tournament found, add fide_only watch instead of asking for URL
- rescan_new_tournaments: deactivate fide_only entry when real tournament found
- /myplayers: card layout grouped by player, removal by FIDE ID
- /removeplayer: now accepts FIDE ID, removes all subscriptions for that player
- fix MarkdownV2 escaping: dates (hyphens), <> in messages, title='None'
- check_all_subscriptions: skip fide_only entries; interval 5min → 1min

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:54:01 +00:00
vrubel
d18c5016ce feat: rescan_existing_tournaments — detect new players in cached tournaments every 2h
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 6s
2026-06-20 22:09:48 +00:00
vrubel
9a583c8fa5 fix: match player by SNo, not name (Latin/Cyrillic mismatch) 2026-06-20 08:55:09 +00:00
vrubel
ba293dcb70 feat: pairings output - show ±5 around subscribed player
- _build_table_rows: filter to ±5 boards around player
- Normalize names (strip commas) for matching FIDE vs pairings format
- Highlight subscribed player with  emoji
- Reduce name column width to compensate for emoji
- Add tournament name to pairing header
- Manual URL flow: look up subscription to highlight player
- Fix MarkdownV2 escaping for em-dash
2026-06-20 07:53:43 +00:00
vrubel
89f5861ee3 fix: auto-tournament search via local tnr_cache index
- Extract canonical FIDE ID from profile page (profile-info-id)
- Add tnr_cache table for local tournament index with players
- scan_for_player uses cache-only search (instant SQL, 0 HTTP)
- warmup_cache builds full index at step 1 (1445000→1434000)
- Save/resume warmup progress via tnr_state
- Auto-migrate missing columns (start_date/end_date)
- Add hourly rescan_new_tournaments job
- Fix discover_max_tnr (larger probe steps, lower default)
- Use asyncio.to_thread() for warmup (no crutches)
2026-06-20 07:15:16 +00:00
vrubel
7ebe1aa66e Подписка на игроков: /addplayer, /myplayers, /removeplayer, фоновая проверка результатов и жеребьёвки
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 11s
2026-06-19 18:35:12 +00:00
vrubel
cfd410d5fe Локализация таблицы (ru/en): колонка О→Оч/Pts, детект языка клиента Telegram
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 5s
2026-06-19 16:30:55 +00:00
vrubel
22a0e27763 Парсер: поддержка латиницы (международные турниры) + таблица: колонки Рейт и Доп1
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 8s
2026-06-19 14:51:15 +00:00
vrubel
7f627beeec Убрал название турнира из шапки жеребьёвки, оставил только номер тура
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 6s
2026-06-15 18:16:54 +00:00
vrubel
6259dcb3e5 Fix: убрал raw-строки — \n теперь настоящие переносы, а не литералы в MarkdownV2
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 4s
2026-06-15 18:01:51 +00:00
vrubel
14d5a13afb Заменил box-drawing юникод на ASCII (│→|, ─→-, ┼→+, …→...) — гарантированное выравнивание на всех платформах
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 8s
2026-06-15 17:44:38 +00:00
vrubel
98a8febf37 Сжат формат таблицы для телефонов: w=25 символов, имена по 17 символов с обрезкой
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 4s
2026-06-15 17:25:59 +00:00
vrubel
62e1c73cdd Fix: корректный _display_width — кириллица это 1 колонка в моноширинном шрифте, не 2
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 8s
2026-06-15 17:15:19 +00:00
vrubel
dd9d01e7e0 Fix: пересчёт очков в _apply_round_results после применения результатов сыгранного тура
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 4s
2026-06-15 16:53:57 +00:00
vrubel
e0a897fd67 Пробинг туров: если тур уже сыгран — продвигаемся дальше вместо остановки
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 4s
2026-06-15 10:47:18 +00:00
Roman Vrubel
755290e43b Починено выравнивание: обрезанные имена теперь добиваются пробелами до ширины колонки
- _pad_col: после truncate + pad до точной ширины (не оставлял хвост)
- _display_width: добавлены U+2026 (…) и U+2116 (№) в wide-символы
2026-06-14 21:16:54 +00:00
Roman Vrubel
c6d799e82f Исправлено: обрезка длинных имён + разделители между парами
- _pad_col теперь обрезает имена длиннее колонки (с многоточием)
- Разделительная линия (────┼────┼────) после каждой пары
- chunk_size кратен 3 (white + black + border)
- Очки выровнены по самой длинной фамилии
2026-06-14 21:13:48 +00:00
Roman Vrubel
bd8cb7d9fc Починен краш Message_too_long: умная разбивка на чанки с code-блоками
- format_pairings возвращает структуру (title/rows/header/footer)
- _render_chunks разбивает пары на группы по ~30 пар
- Каждый чанк — свой code-блок с заголовком
- Убраны разделители между парами (экономия ~50% размера)
- Fallback plain text при любой ошибке MarkdownV2
2026-06-14 21:10:31 +00:00
Roman Vrubel
6bb1d238aa Таблица: ширина колонки — по самой длинной фамилии +3 пробела, разделители между парами
- w_name вычисляется динамически (max + 3, до 42)
- Горизонтальная линия (───┼───┼───) между каждой парой
2026-06-14 21:08:04 +00:00
Roman Vrubel
70ff9bfc4b Таблица в code-блоке: 3 колонки, 2 строки на пару, влезает на телефон
Формат:
#  │ Игрок                  │ О
───┼────────────────────────┼────
1  │ Мармылев Александр Д.  │ 4.0
   │ Нестеров Мирон А.      │ 4.0

Внутри code-блока MarkdownV2 не нужен (literal text).
2026-06-14 21:03:59 +00:00
Roman Vrubel
a17e21c983 Починены краши MarkdownV2: экранирование точек в очках, fallback на plain text
- Очки теперь через _md_escape (4.0 → 4\.0)
- Каждая пара в две строки (белые сверху, чёрные снизу)
- Защита: при ошибке MarkdownV2 парсинга — plain text
- Экранрованы точки в статусных сообщениях
2026-06-14 21:01:10 +00:00
Roman Vrubel
566daf5bb4 Убрал таблицу, заменил на компактный список (влезает на телефон)
Каждая пара — одна строка: номер, белые (очки) — чёрные (очки).
Убрал мёртвый код: _display_width, _make_table_* и др.
2026-06-14 20:51:24 +00:00
Roman Vrubel
35fb54a887 Перевёл Telegram-ботов на MarkdownV2 с таблицами в code-блоках
- client_bot.py: вывод пар в моноширинной таблице ()
  с учётом ширины кириллицы и обрезкой длинных имён
- admin_bot.py: /stat в MarkdownV2
- Оба бота: все сообщения в ParseMode.MARKDOWN_V2
2026-06-14 20:48:02 +00:00
Roman Vrubel
5c4b2536e7 Добавлены Telegram-боты (клиентский + админский)
- Клиентский бот: принимает ссылку на chess-results.com,
  проверяет наличие результатов/жеребьёвки, считает пары
  следующего тура, выводит в HTML-формате
- Админский бот: /stat — уникальные пользователи,
  всего запросов, запросов за сегодня
- Статистика через SQLite (volume bot-data)
- Оба бота в docker-compose с автоперезапуском
- .env.example с тестовыми токенами
- .env в .gitignore
2026-06-14 20:39:19 +00:00