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