From c39bb3328261b1ac8a51f085137d222344615eb7 Mon Sep 17 00:00:00 2001 From: vrubelroman Date: Sun, 16 Nov 2025 23:10:08 +0300 Subject: [PATCH] messages when doing questions --- CHANGELOG.md | 44 +++++++++++++++++++++++++++++++++++ LichessClientTG_bot/bot.py | 38 ++++++++++++++++++++++++++++-- LichessClientTG_bot/config.py | 2 +- LichessClientTG_bot/i18n.py | 5 ++++ README.md | 36 ++++++++++++++++++++-------- about.md | 32 +++++++++++++++---------- 6 files changed, 132 insertions(+), 25 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f99d81c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,44 @@ +# Changelog + +Все значимые изменения в проекте документируются в этом файле. + +## [1.0.1] - 2025-11-16 + +### Добавлено +- **Версионность бота**: Добавлена версия бота (BOT_VERSION), отображаемая в команде `/support` +- **Команда `/support`**: Добавлена команда для связи с разработчиком, включающая контактную информацию и версию бота +- **Команда `/lastYear_or_1000games`**: Добавлена команда для получения статистики за последний год или последние 1000 рейтинговых игр +- **Множественное отслеживание**: Команды `/today`, `/yesterday`, `/week` теперь показывают статистику по всем отслеживаемым игрокам с активностью, а не только по активному игроку +- **Информативные сообщения**: Добавлены сообщения о процессе обработки запросов для всех команд статистики +- **Автоматическое удаление сообщений**: Сообщения "Requesting data for player..." автоматически удаляются после обработки запроса +- **Финальные сообщения**: Добавлено сообщение "✅ That's all" после завершения обработки всех игроков + +### Изменено +- **Команда `/delgamer`**: Улучшена логика с информативными сообщениями при удалении активного или последнего игрока +- **Команда `/setperiod`**: Улучшено форматирование интервалов времени (отображение в часах для значений >= 60 минут) +- **Логика команд статистики**: Все команды статистики теперь обрабатывают всех игроков пользователя последовательно +- **Задержки между запросами**: + - Для команд `/today`, `/yesterday`, `/week`: 1 секунда между запросами + - Для команды `/lastYear_or_1000games`: 3 секунды между запросами (из-за больших объемов данных) +- **Конфигурация токенов**: Добавлена поддержка переключения между тестовыми и продакшн токенами через флаг `IS_PROD` + +### Улучшено +- **Производительность**: Оптимизирована обработка запросов с учетом ограничений API +- **Пользовательский опыт**: Более информативные сообщения и лучшая обратная связь о процессе обработки +- **Документация**: Обновлены README.md и about.md с описанием всех новых функций + +### Технические детали +- Добавлены новые ключи в i18n.py для сообщений о процессе обработки +- Улучшена обработка ошибок в командах статистики +- Оптимизированы задержки между запросами для предотвращения rate limiting + +## [1.0.0] - Начальная версия + +### Добавлено +- Базовая функциональность Telegram бота +- Команды для управления отслеживанием игроков +- Статистика за сегодня/вчера/неделю +- Периодические уведомления +- Веб-интерфейс для просмотра пользователей +- REST API для получения статистики + diff --git a/LichessClientTG_bot/bot.py b/LichessClientTG_bot/bot.py index 51976a6..208e896 100644 --- a/LichessClientTG_bot/bot.py +++ b/LichessClientTG_bot/bot.py @@ -662,11 +662,24 @@ class LichessBot: ) return + # Send initial message about processing + try: + await update.message.reply_text(t('stats_processing', lang), parse_mode='HTML') + except Exception: + pass + # Process each gamer has_any_activity = False for i, gamer in enumerate(gamers): username = gamer['username'] + # Send message about processing this player + processing_msg = None + try: + processing_msg = await update.message.reply_text(t('stats_player_processing', lang, username=username), parse_mode='HTML') + except Exception: + pass + # Get stats based on period if period == "today": data = await self.lichess_api.get_today_stats(username) @@ -678,6 +691,13 @@ class LichessBot: await update.message.reply_text(t('unknown_period', lang)) return + # Delete processing message + if processing_msg: + try: + await processing_msg.delete() + except Exception: + pass + # Check if there's activity has_activity = False if data and data.get('data'): @@ -704,11 +724,14 @@ class LichessBot: # Add delay between requests to avoid rate limiting if i < len(gamers) - 1: - await asyncio.sleep(3.0) + await asyncio.sleep(1.0) # If no activity for any player if not has_any_activity: await update.message.reply_text(t('no_activity', lang)) + else: + # Send final message that all is done + await update.message.reply_text(t('stats_all_done', lang)) # Increment counter for the period command if period == "today": @@ -769,14 +792,22 @@ class LichessBot: try: # Send message about processing this player + processing_msg = None try: - await update.message.reply_text(t('last_year_1000_player_processing', lang, username=username), parse_mode='HTML') + processing_msg = await update.message.reply_text(t('last_year_1000_player_processing', lang, username=username), parse_mode='HTML') except Exception: pass # Get data for this player data = await self.lichess_api.get_games_period(username, since_ms, now_ms, rated_only=True) + # Delete processing message + if processing_msg: + try: + await processing_msg.delete() + except Exception: + pass + if data: # Check if there's activity (games_count > 0) games_count = data.get('games_count', 0) @@ -797,6 +828,9 @@ class LichessBot: # If no activity for any player if not has_any_activity: await update.message.reply_text(t('no_activity', lang)) + else: + # Send final message that all is done + await update.message.reply_text(t('stats_all_done', lang)) self.counters.increment('last_year_1000') diff --git a/LichessClientTG_bot/config.py b/LichessClientTG_bot/config.py index aab719e..c2a254b 100644 --- a/LichessClientTG_bot/config.py +++ b/LichessClientTG_bot/config.py @@ -49,7 +49,7 @@ DATABASE_PATH = _resolve_database_path() PERIOD_OPTIONS = [0, 15, 30, 60, 120, 180, 360, 720, 1440] # minutes (0=disable, then: 15min, 30min, 1h, 2h, 3h, 6h, 12h, 24h) # Bot Version -BOT_VERSION = "1.1.0" +BOT_VERSION = "1.1.1" # Telegram Bot Long Polling Configuration POLL_INTERVAL = 1.0 # seconds diff --git a/LichessClientTG_bot/i18n.py b/LichessClientTG_bot/i18n.py index 8915d0b..e103122 100644 --- a/LichessClientTG_bot/i18n.py +++ b/LichessClientTG_bot/i18n.py @@ -99,6 +99,11 @@ TRANSLATIONS = { 'last_year_1000_processing': "⏳ Processing request... This may take a while as requests are very slow.", 'last_year_1000_player_processing': "🔄 Requesting data for player {username}...", + # Stats commands (today/yesterday/week) + 'stats_processing': "⏳ Processing request...", + 'stats_player_processing': "🔄 Requesting data for player {username}...", + 'stats_all_done': "✅ That's all", + # Support 'support_message': ( "💬 Support & Feedback\n\n" diff --git a/README.md b/README.md index cfd24f7..202113d 100644 --- a/README.md +++ b/README.md @@ -115,22 +115,27 @@ Telegram бот для управления отслеживанием игро **Возможности:** - Добавление игроков для отслеживания (друзья, соперники, ученики) - Выбор активного игрока -- Получение статистики (сегодня/вчера/неделя) -- Статистика по режимам (Bullet, Blitz, Rapid) +- Получение статистики по всем отслеживаемым игрокам (сегодня/вчера/неделя) +- Статистика за последний год или последние 1000 рейтинговых игр +- Статистика по режимам (Bullet, Blitz, Rapid, Classical, Correspondence) - Статистика решения задач (puzzles) -- Настройка периодических уведомлений +- Настройка периодических уведомлений с гибкими интервалами (15 минут - 24 часа) +- Информативные сообщения о процессе обработки запросов - Каждый пользователь имеет свой набор игроков +- Версионность бота (отображается в команде /support) **Команды:** -- `/start` - начало работы с ботом +- `/start` - начало работы с ботом и добавление первого игрока - `/addgamer` - добавить игрока Lichess (только имя пользователя) - `/addtoken` - добавить игрока с токеном (для статистики по задачам) - `/getgamers` - выбрать активного игрока - `/delgamer` - удалить игрока из списка -- `/today` - статистика за сегодня -- `/yesterday` - статистика за вчера -- `/week` - статистика за неделю -- `/setperiod` - настроить уведомления +- `/today` - статистика за сегодня по всем отслеживаемым игрокам с активностью +- `/yesterday` - статистика за вчера по всем отслеживаемым игрокам с активностью +- `/week` - статистика за неделю по всем отслеживаемым игрокам с активностью +- `/lastYear_or_1000games` - статистика за последний год или последние 1000 рейтинговых игр (по всем игрокам с активностью) +- `/setperiod` - настроить периодические уведомления для активного игрока +- `/support` - контактная информация для обратной связи с разработчиком **Подробнее о боте:** см. [about.md](about.md) @@ -177,11 +182,21 @@ docker-compose down ### Telegram бот -Токен бота настраивается в `LichessClientTG_bot/config.py`: +Токены ботов настраиваются в `LichessClientTG_bot/config.py`: ```python -TELEGRAM_BOT_TOKEN = "YOUR_TOKEN_HERE" +IS_PROD = False # True для продакшн, False для тестовых токенов + +# Production токены (используются при IS_PROD = True) +TELEGRAM_BOT_TOKEN_PROD = "YOUR_PROD_TOKEN" +ADMINPANEL_TELEGRAM_BOT_TOKEN_PROD = "YOUR_ADMIN_PROD_TOKEN" + +# Test токены (используются при IS_PROD = False) +TELEGRAM_BOT_TOKEN_TEST = "YOUR_TEST_TOKEN" +ADMINPANEL_TELEGRAM_BOT_TOKEN_TEST = "YOUR_ADMIN_TEST_TOKEN" ``` +Система автоматически выбирает нужные токены в зависимости от значения `IS_PROD`. + ### Lichess API Для получения статистики по задачам нужен токен Lichess: @@ -241,6 +256,7 @@ Roman Vrubel ## 📖 Дополнительная информация - **[О боте](about.md)** - подробное описание функций бота, для кого он предназначен и примеры использования +- **[История изменений](CHANGELOG.md)** - список всех изменений и обновлений проекта ## 🔗 Полезные ссылки diff --git a/about.md b/about.md index 7ed1a5d..977acfb 100644 --- a/about.md +++ b/about.md @@ -7,16 +7,20 @@ ## ✨ Основные функции ### 📈 Статистика и аналитика -- **Статистика за сегодня** — мгновенный обзор активности за текущий день -- **Статистика за вчера** — анализ вчерашних результатов -- **Статистика за неделю** — недельный отчет о прогрессе -- **Рейтинги по режимам** — отслеживание рейтинга в Bullet, Blitz и Rapid +- **Статистика за сегодня** — мгновенный обзор активности за текущий день по всем отслеживаемым игрокам +- **Статистика за вчера** — анализ вчерашних результатов по всем отслеживаемым игрокам +- **Статистика за неделю** — недельный отчет о прогрессе по всем отслеживаемым игрокам +- **Статистика за год/1000 игр** — детальная статистика за последний год или последние 1000 рейтинговых игр +- **Рейтинги по режимам** — отслеживание рейтинга в Bullet, Blitz, Rapid, Classical и Correspondence - **Статистика задач** — количество решенных задач (puzzles) с детализацией правильных и неправильных ответов +- **Множественное отслеживание** — команды статистики автоматически показывают данные по всем игрокам с активностью +- **Информативные сообщения** — бот показывает процесс обработки запросов и уведомляет о завершении ### 🔔 Автоматические уведомления - **Периодические отчеты** — настройка автоматических уведомлений с заданным интервалом - **Умные уведомления** — бот отправляет сообщения только при наличии активности -- **Гибкие настройки** — выбор интервала от 15 минут до 24 часов +- **Гибкие настройки** — выбор интервала: 15 минут, 30 минут, 1 час, 2 часа, 3 часа, 6 часов, 12 часов, 24 часа +- **Удобный формат** — интервалы отображаются в понятном формате (например, "1 hour" вместо "60 minutes") ### 👥 Управление отслеживанием - **Множественное отслеживание** — добавление неограниченного количества игроков @@ -54,9 +58,11 @@ 1. **Найдите бота в Telegram**: [@LichessStat_bot](https://t.me/LichessStat_bot) 2. **Отправьте команду** `/start` для начала работы 3. **Добавьте игроков** с помощью команды `/addgamer` или `/addtoken` -4. **Выберите активного игрока** через `/getgamers` -5. **Получайте статистику** командами `/today`, `/yesterday`, `/week` -6. **Настройте уведомления** через `/setperiod` для автоматических отчетов +4. **Выберите активного игрока** через `/getgamers` (для команды `/setperiod`) +5. **Получайте статистику** командами `/today`, `/yesterday`, `/week` — они автоматически покажут данные по всем игрокам с активностью +6. **Получите расширенную статистику** через `/lastYear_or_1000games` для детального анализа +7. **Настройте уведомления** через `/setperiod` для автоматических отчетов по активному игроку +8. **Свяжитесь с разработчиком** через `/support` для обратной связи ## 📋 Доступные команды @@ -65,10 +71,12 @@ - `/addtoken` — добавить игрока с токеном для получения статистики по задачам - `/getgamers` — выбрать активного игрока из вашего списка - `/delgamer` — удалить игрока из списка отслеживания -- `/today` — статистика активного игрока за сегодня -- `/yesterday` — статистика активного игрока за вчера -- `/week` — статистика активного игрока за неделю -- `/setperiod` — настроить периодические уведомления для активного игрока +- `/today` — статистика за сегодня по всем отслеживаемым игрокам с активностью +- `/yesterday` — статистика за вчера по всем отслеживаемым игрокам с активностью +- `/week` — статистика за неделю по всем отслеживаемым игрокам с активностью +- `/lastYear_or_1000games` — статистика за последний год или последние 1000 рейтинговых игр (по всем игрокам с активностью) +- `/setperiod` — настроить периодические уведомления для активного игрока (интервалы: 15 минут, 30 минут, 1 час, 2 часа, 3 часа, 6 часов, 12 часов, 24 часа) +- `/support` — контактная информация для обратной связи с разработчиком ## 💡 Примеры использования