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
|
||||
|
||||
# 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')
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
36
README.md
36
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)** - список всех изменений и обновлений проекта
|
||||
|
||||
## 🔗 Полезные ссылки
|
||||
|
||||
|
|
|
|||
32
about.md
32
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` — контактная информация для обратной связи с разработчиком
|
||||
|
||||
## 💡 Примеры использования
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue