messages when doing questions

This commit is contained in:
vrubelroman 2025-11-16 23:10:08 +03:00
parent 033a0db12f
commit c39bb33282
6 changed files with 132 additions and 25 deletions

44
CHANGELOG.md Normal file
View file

@ -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 для получения статистики

View file

@ -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')

View file

@ -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

View file

@ -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 <b>{username}</b>...",
# Stats commands (today/yesterday/week)
'stats_processing': "⏳ Processing request...",
'stats_player_processing': "🔄 Requesting data for player <b>{username}</b>...",
'stats_all_done': "✅ That's all",
# Support
'support_message': (
"💬 <b>Support & Feedback</b>\n\n"

View file

@ -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)** - список всех изменений и обновлений проекта
## 🔗 Полезные ссылки

View file

@ -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` — контактная информация для обратной связи с разработчиком
## 💡 Примеры использования