messages when doing questions
This commit is contained in:
parent
033a0db12f
commit
c39bb33282
6 changed files with 132 additions and 25 deletions
44
CHANGELOG.md
Normal file
44
CHANGELOG.md
Normal 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 для получения статистики
|
||||||
|
|
||||||
|
|
@ -662,11 +662,24 @@ class LichessBot:
|
||||||
)
|
)
|
||||||
return
|
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
|
# Process each gamer
|
||||||
has_any_activity = False
|
has_any_activity = False
|
||||||
for i, gamer in enumerate(gamers):
|
for i, gamer in enumerate(gamers):
|
||||||
username = gamer['username']
|
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
|
# Get stats based on period
|
||||||
if period == "today":
|
if period == "today":
|
||||||
data = await self.lichess_api.get_today_stats(username)
|
data = await self.lichess_api.get_today_stats(username)
|
||||||
|
|
@ -678,6 +691,13 @@ class LichessBot:
|
||||||
await update.message.reply_text(t('unknown_period', lang))
|
await update.message.reply_text(t('unknown_period', lang))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Delete processing message
|
||||||
|
if processing_msg:
|
||||||
|
try:
|
||||||
|
await processing_msg.delete()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
# Check if there's activity
|
# Check if there's activity
|
||||||
has_activity = False
|
has_activity = False
|
||||||
if data and data.get('data'):
|
if data and data.get('data'):
|
||||||
|
|
@ -704,11 +724,14 @@ class LichessBot:
|
||||||
|
|
||||||
# Add delay between requests to avoid rate limiting
|
# Add delay between requests to avoid rate limiting
|
||||||
if i < len(gamers) - 1:
|
if i < len(gamers) - 1:
|
||||||
await asyncio.sleep(3.0)
|
await asyncio.sleep(1.0)
|
||||||
|
|
||||||
# If no activity for any player
|
# If no activity for any player
|
||||||
if not has_any_activity:
|
if not has_any_activity:
|
||||||
await update.message.reply_text(t('no_activity', lang))
|
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
|
# Increment counter for the period command
|
||||||
if period == "today":
|
if period == "today":
|
||||||
|
|
@ -769,14 +792,22 @@ class LichessBot:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Send message about processing this player
|
# Send message about processing this player
|
||||||
|
processing_msg = None
|
||||||
try:
|
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:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Get data for this player
|
# Get data for this player
|
||||||
data = await self.lichess_api.get_games_period(username, since_ms, now_ms, rated_only=True)
|
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:
|
if data:
|
||||||
# Check if there's activity (games_count > 0)
|
# Check if there's activity (games_count > 0)
|
||||||
games_count = data.get('games_count', 0)
|
games_count = data.get('games_count', 0)
|
||||||
|
|
@ -797,6 +828,9 @@ class LichessBot:
|
||||||
# If no activity for any player
|
# If no activity for any player
|
||||||
if not has_any_activity:
|
if not has_any_activity:
|
||||||
await update.message.reply_text(t('no_activity', lang))
|
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')
|
self.counters.increment('last_year_1000')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
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
|
||||||
BOT_VERSION = "1.1.0"
|
BOT_VERSION = "1.1.1"
|
||||||
|
|
||||||
# Telegram Bot Long Polling Configuration
|
# Telegram Bot Long Polling Configuration
|
||||||
POLL_INTERVAL = 1.0 # seconds
|
POLL_INTERVAL = 1.0 # seconds
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,11 @@ TRANSLATIONS = {
|
||||||
'last_year_1000_processing': "⏳ Processing request... This may take a while as requests are very slow.",
|
'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>...",
|
'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
|
||||||
'support_message': (
|
'support_message': (
|
||||||
"💬 <b>Support & Feedback</b>\n\n"
|
"💬 <b>Support & Feedback</b>\n\n"
|
||||||
|
|
|
||||||
36
README.md
36
README.md
|
|
@ -115,22 +115,27 @@ Telegram бот для управления отслеживанием игро
|
||||||
**Возможности:**
|
**Возможности:**
|
||||||
- Добавление игроков для отслеживания (друзья, соперники, ученики)
|
- Добавление игроков для отслеживания (друзья, соперники, ученики)
|
||||||
- Выбор активного игрока
|
- Выбор активного игрока
|
||||||
- Получение статистики (сегодня/вчера/неделя)
|
- Получение статистики по всем отслеживаемым игрокам (сегодня/вчера/неделя)
|
||||||
- Статистика по режимам (Bullet, Blitz, Rapid)
|
- Статистика за последний год или последние 1000 рейтинговых игр
|
||||||
|
- Статистика по режимам (Bullet, Blitz, Rapid, Classical, Correspondence)
|
||||||
- Статистика решения задач (puzzles)
|
- Статистика решения задач (puzzles)
|
||||||
- Настройка периодических уведомлений
|
- Настройка периодических уведомлений с гибкими интервалами (15 минут - 24 часа)
|
||||||
|
- Информативные сообщения о процессе обработки запросов
|
||||||
- Каждый пользователь имеет свой набор игроков
|
- Каждый пользователь имеет свой набор игроков
|
||||||
|
- Версионность бота (отображается в команде /support)
|
||||||
|
|
||||||
**Команды:**
|
**Команды:**
|
||||||
- `/start` - начало работы с ботом
|
- `/start` - начало работы с ботом и добавление первого игрока
|
||||||
- `/addgamer` - добавить игрока Lichess (только имя пользователя)
|
- `/addgamer` - добавить игрока Lichess (только имя пользователя)
|
||||||
- `/addtoken` - добавить игрока с токеном (для статистики по задачам)
|
- `/addtoken` - добавить игрока с токеном (для статистики по задачам)
|
||||||
- `/getgamers` - выбрать активного игрока
|
- `/getgamers` - выбрать активного игрока
|
||||||
- `/delgamer` - удалить игрока из списка
|
- `/delgamer` - удалить игрока из списка
|
||||||
- `/today` - статистика за сегодня
|
- `/today` - статистика за сегодня по всем отслеживаемым игрокам с активностью
|
||||||
- `/yesterday` - статистика за вчера
|
- `/yesterday` - статистика за вчера по всем отслеживаемым игрокам с активностью
|
||||||
- `/week` - статистика за неделю
|
- `/week` - статистика за неделю по всем отслеживаемым игрокам с активностью
|
||||||
- `/setperiod` - настроить уведомления
|
- `/lastYear_or_1000games` - статистика за последний год или последние 1000 рейтинговых игр (по всем игрокам с активностью)
|
||||||
|
- `/setperiod` - настроить периодические уведомления для активного игрока
|
||||||
|
- `/support` - контактная информация для обратной связи с разработчиком
|
||||||
|
|
||||||
**Подробнее о боте:** см. [about.md](about.md)
|
**Подробнее о боте:** см. [about.md](about.md)
|
||||||
|
|
||||||
|
|
@ -177,11 +182,21 @@ docker-compose down
|
||||||
|
|
||||||
### Telegram бот
|
### Telegram бот
|
||||||
|
|
||||||
Токен бота настраивается в `LichessClientTG_bot/config.py`:
|
Токены ботов настраиваются в `LichessClientTG_bot/config.py`:
|
||||||
```python
|
```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 API
|
||||||
|
|
||||||
Для получения статистики по задачам нужен токен Lichess:
|
Для получения статистики по задачам нужен токен Lichess:
|
||||||
|
|
@ -241,6 +256,7 @@ Roman Vrubel
|
||||||
## 📖 Дополнительная информация
|
## 📖 Дополнительная информация
|
||||||
|
|
||||||
- **[О боте](about.md)** - подробное описание функций бота, для кого он предназначен и примеры использования
|
- **[О боте](about.md)** - подробное описание функций бота, для кого он предназначен и примеры использования
|
||||||
|
- **[История изменений](CHANGELOG.md)** - список всех изменений и обновлений проекта
|
||||||
|
|
||||||
## 🔗 Полезные ссылки
|
## 🔗 Полезные ссылки
|
||||||
|
|
||||||
|
|
|
||||||
32
about.md
32
about.md
|
|
@ -7,16 +7,20 @@
|
||||||
## ✨ Основные функции
|
## ✨ Основные функции
|
||||||
|
|
||||||
### 📈 Статистика и аналитика
|
### 📈 Статистика и аналитика
|
||||||
- **Статистика за сегодня** — мгновенный обзор активности за текущий день
|
- **Статистика за сегодня** — мгновенный обзор активности за текущий день по всем отслеживаемым игрокам
|
||||||
- **Статистика за вчера** — анализ вчерашних результатов
|
- **Статистика за вчера** — анализ вчерашних результатов по всем отслеживаемым игрокам
|
||||||
- **Статистика за неделю** — недельный отчет о прогрессе
|
- **Статистика за неделю** — недельный отчет о прогрессе по всем отслеживаемым игрокам
|
||||||
- **Рейтинги по режимам** — отслеживание рейтинга в Bullet, Blitz и Rapid
|
- **Статистика за год/1000 игр** — детальная статистика за последний год или последние 1000 рейтинговых игр
|
||||||
|
- **Рейтинги по режимам** — отслеживание рейтинга в Bullet, Blitz, Rapid, Classical и Correspondence
|
||||||
- **Статистика задач** — количество решенных задач (puzzles) с детализацией правильных и неправильных ответов
|
- **Статистика задач** — количество решенных задач (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)
|
1. **Найдите бота в Telegram**: [@LichessStat_bot](https://t.me/LichessStat_bot)
|
||||||
2. **Отправьте команду** `/start` для начала работы
|
2. **Отправьте команду** `/start` для начала работы
|
||||||
3. **Добавьте игроков** с помощью команды `/addgamer` или `/addtoken`
|
3. **Добавьте игроков** с помощью команды `/addgamer` или `/addtoken`
|
||||||
4. **Выберите активного игрока** через `/getgamers`
|
4. **Выберите активного игрока** через `/getgamers` (для команды `/setperiod`)
|
||||||
5. **Получайте статистику** командами `/today`, `/yesterday`, `/week`
|
5. **Получайте статистику** командами `/today`, `/yesterday`, `/week` — они автоматически покажут данные по всем игрокам с активностью
|
||||||
6. **Настройте уведомления** через `/setperiod` для автоматических отчетов
|
6. **Получите расширенную статистику** через `/lastYear_or_1000games` для детального анализа
|
||||||
|
7. **Настройте уведомления** через `/setperiod` для автоматических отчетов по активному игроку
|
||||||
|
8. **Свяжитесь с разработчиком** через `/support` для обратной связи
|
||||||
|
|
||||||
## 📋 Доступные команды
|
## 📋 Доступные команды
|
||||||
|
|
||||||
|
|
@ -65,10 +71,12 @@
|
||||||
- `/addtoken` — добавить игрока с токеном для получения статистики по задачам
|
- `/addtoken` — добавить игрока с токеном для получения статистики по задачам
|
||||||
- `/getgamers` — выбрать активного игрока из вашего списка
|
- `/getgamers` — выбрать активного игрока из вашего списка
|
||||||
- `/delgamer` — удалить игрока из списка отслеживания
|
- `/delgamer` — удалить игрока из списка отслеживания
|
||||||
- `/today` — статистика активного игрока за сегодня
|
- `/today` — статистика за сегодня по всем отслеживаемым игрокам с активностью
|
||||||
- `/yesterday` — статистика активного игрока за вчера
|
- `/yesterday` — статистика за вчера по всем отслеживаемым игрокам с активностью
|
||||||
- `/week` — статистика активного игрока за неделю
|
- `/week` — статистика за неделю по всем отслеживаемым игрокам с активностью
|
||||||
- `/setperiod` — настроить периодические уведомления для активного игрока
|
- `/lastYear_or_1000games` — статистика за последний год или последние 1000 рейтинговых игр (по всем игрокам с активностью)
|
||||||
|
- `/setperiod` — настроить периодические уведомления для активного игрока (интервалы: 15 минут, 30 минут, 1 час, 2 часа, 3 часа, 6 часов, 12 часов, 24 часа)
|
||||||
|
- `/support` — контактная информация для обратной связи с разработчиком
|
||||||
|
|
||||||
## 💡 Примеры использования
|
## 💡 Примеры использования
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue