Commit graph

27 commits

Author SHA1 Message Date
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
c7c0067881 Добавлен счётчик уникальных пользователей за сегодня в /stat
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 7s
2026-06-15 18:12:42 +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
bc6e57b91d Дублирующий пересчёт очков в fetch_tournament для надёжности
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 5s
2026-06-15 17:43:34 +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
vrubel
4b43432ecd Fix CI test step: use docker run instead of compose
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 2s
2026-06-14 21:47:37 +00:00
vrubel
780e776294 Add CI/CD pipeline (Forgejo) and prod docker-compose
Some checks failed
CI/CD Pipeline / build-and-deploy (push) Failing after 28s
2026-06-14 21:41:07 +00:00
Roman Vrubel
d21f4d696d Переписан README под текущую реализацию
- Основной интерфейс: Telegram-боты (клиентский + админский)
- CLI оставлен для отладки
- Архитектура дополнена bots/ и docker-compose сервисами
- Точность: 4 из 5 турниров 100%, один 85% (ручные bye)
- Актуализированы ограничения и техдолг
2026-06-14 21:23:40 +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
Roman Vrubel
bbbfe61094 chessCalc: исправлена точность жеребьёвки до 100%
Основные изменения:
- swiss.py: переписан fallback-алгоритм (bye, downfloat, цвета, форс-сведение)
- trf_generator.py: генератор TRF-16 для bbpPairings
- bbp_wrapper.py: обёртка subprocess для bbpPairings.exe
- parser.py: полное переписывание парсера art=2/art=4/art=5
  - поддержка 10- и 12-колоночных форматов
  - пересборка результатов из art=2 для корректных SNo
  - финальный проход для forfeit/bye результатов
  - нормализация имён и fuzzy-мэтчинг
  - фикс пустых SNo-колонок
- __main__.py: починен JSON-вывод, поддержка bye
- display.py: отображение bye и источника расчёта

Ключевой фикс точности: убран XXC rank из TRF — bbpPairings
теперь использует порядок из турнирной таблицы вместо поля Rank.
Проверено на 5 турнирах (4 из 5 — 100%, 1 — 85% из-за ручных bye).
2026-06-14 20:29:27 +00:00
Roman Vrubel
cf7fafd2ba chessCalc: парсер chess-results.com + FIDE Swiss + Docker
Принимает URL турнира, показывает пары следующего тура в Telegram-формате.
- parser.py: парсинг chess-results.com
- swiss.py: FIDE Dutch System
- display.py: форматирование для Telegram
- Docker: docker compose run --rm chess-calc 'URL'
2026-06-14 13:57:32 +00:00