add command /profile
This commit is contained in:
parent
56c1048bcc
commit
965b8775b7
3 changed files with 81 additions and 85 deletions
|
|
@ -1179,6 +1179,70 @@ class LichessBot:
|
||||||
error_msg = "❌ Не удалось установить язык" if lang == 'ru' else "❌ Failed to set language"
|
error_msg = "❌ Не удалось установить язык" if lang == 'ru' else "❌ Failed to set language"
|
||||||
await query.edit_message_text(error_msg)
|
await query.edit_message_text(error_msg)
|
||||||
|
|
||||||
|
async def profile(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
"""Show list of players to view their profiles"""
|
||||||
|
user_id = update.effective_user.id
|
||||||
|
gamers = self.db.get_user_gamers(user_id)
|
||||||
|
|
||||||
|
lang = self.get_user_language_from_update(update)
|
||||||
|
|
||||||
|
if not gamers:
|
||||||
|
await update.message.reply_text(t('no_gamers', lang))
|
||||||
|
return
|
||||||
|
|
||||||
|
# Create keyboard with player buttons
|
||||||
|
keyboard = []
|
||||||
|
for gamer in gamers:
|
||||||
|
username = gamer['username']
|
||||||
|
keyboard.append([
|
||||||
|
InlineKeyboardButton(
|
||||||
|
username,
|
||||||
|
callback_data=f"profile_{gamer['id']}"
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||||
|
|
||||||
|
await update.message.reply_text(
|
||||||
|
t('select_player_profile', lang),
|
||||||
|
reply_markup=reply_markup,
|
||||||
|
parse_mode='HTML'
|
||||||
|
)
|
||||||
|
|
||||||
|
async def handle_profile_selection(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
"""Handle profile selection callback - send profile link"""
|
||||||
|
query = update.callback_query
|
||||||
|
await query.answer()
|
||||||
|
|
||||||
|
user_id = query.from_user.id
|
||||||
|
gamer_id = int(query.data.split('_')[1])
|
||||||
|
|
||||||
|
# Get gamer info
|
||||||
|
gamers = self.db.get_user_gamers(user_id)
|
||||||
|
selected_gamer = next((g for g in gamers if g['id'] == gamer_id), None)
|
||||||
|
|
||||||
|
if not selected_gamer:
|
||||||
|
lang = self.db.get_user_language(user_id)
|
||||||
|
await query.edit_message_text(t('gamer_not_found', lang))
|
||||||
|
return
|
||||||
|
|
||||||
|
username = selected_gamer['username']
|
||||||
|
profile_url = f"https://lichess.org/@/{username}"
|
||||||
|
|
||||||
|
lang = self.db.get_user_language(user_id)
|
||||||
|
|
||||||
|
# Send profile link
|
||||||
|
await query.message.reply_text(
|
||||||
|
f"🔗 <a href=\"{profile_url}\">{profile_url}</a>",
|
||||||
|
parse_mode='HTML'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Edit original message to show confirmation
|
||||||
|
await query.edit_message_text(
|
||||||
|
t('profile_link_sent', lang),
|
||||||
|
parse_mode='HTML'
|
||||||
|
)
|
||||||
|
|
||||||
async def start_periodic_task(self, gamer: Dict[str, Any], user_id: int, period_minutes: int):
|
async def start_periodic_task(self, gamer: Dict[str, Any], user_id: int, period_minutes: int):
|
||||||
"""Start periodic task for a gamer"""
|
"""Start periodic task for a gamer"""
|
||||||
task_key = f"{gamer['id']}_{user_id}"
|
task_key = f"{gamer['id']}_{user_id}"
|
||||||
|
|
@ -1414,10 +1478,12 @@ class LichessBot:
|
||||||
application.add_handler(CommandHandler("support", self.support))
|
application.add_handler(CommandHandler("support", self.support))
|
||||||
application.add_handler(CommandHandler("setperiod", self.setperiod))
|
application.add_handler(CommandHandler("setperiod", self.setperiod))
|
||||||
application.add_handler(CommandHandler("set_lang", self.set_lang))
|
application.add_handler(CommandHandler("set_lang", self.set_lang))
|
||||||
|
application.add_handler(CommandHandler("profile", self.profile))
|
||||||
application.add_handler(CommandHandler("test_admin_notify", self.test_admin_notify))
|
application.add_handler(CommandHandler("test_admin_notify", self.test_admin_notify))
|
||||||
|
|
||||||
# Callback handlers (order matters - more specific patterns first)
|
# Callback handlers (order matters - more specific patterns first)
|
||||||
application.add_handler(CallbackQueryHandler(self.handle_language_selection, pattern="^lang_"))
|
application.add_handler(CallbackQueryHandler(self.handle_language_selection, pattern="^lang_"))
|
||||||
|
application.add_handler(CallbackQueryHandler(self.handle_profile_selection, pattern="^profile_"))
|
||||||
application.add_handler(CallbackQueryHandler(self.select_gamer_for_period, pattern="^select_gamer_period_"))
|
application.add_handler(CallbackQueryHandler(self.select_gamer_for_period, pattern="^select_gamer_period_"))
|
||||||
application.add_handler(CallbackQueryHandler(self.select_gamer, pattern="^select_"))
|
application.add_handler(CallbackQueryHandler(self.select_gamer, pattern="^select_"))
|
||||||
application.add_handler(CallbackQueryHandler(self.handle_delete_gamer, pattern="^delete_"))
|
application.add_handler(CallbackQueryHandler(self.handle_delete_gamer, pattern="^delete_"))
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ TRANSLATIONS = {
|
||||||
"/lastYear_or_1000games - Statistics for the last year or last 1000 rated games (whichever comes first)\n"
|
"/lastYear_or_1000games - Statistics for the last year or last 1000 rated games (whichever comes first)\n"
|
||||||
"/setperiod - Set up periodic notifications for the active player\n"
|
"/setperiod - Set up periodic notifications for the active player\n"
|
||||||
"(active player changes in the /getgamers menu)\n"
|
"(active player changes in the /getgamers menu)\n"
|
||||||
|
"/profile - View Lichess profile links for tracked players\n"
|
||||||
"/set_lang - Select bot language (English / Russian)\n"
|
"/set_lang - Select bot language (English / Russian)\n"
|
||||||
"/support - Contact the developer for support and feedback"
|
"/support - Contact the developer for support and feedback"
|
||||||
),
|
),
|
||||||
|
|
@ -123,6 +124,10 @@ TRANSLATIONS = {
|
||||||
'select_language': "🌐 <b>Select language / Выберите язык:</b>",
|
'select_language': "🌐 <b>Select language / Выберите язык:</b>",
|
||||||
'language_set_en': "✅ Language set to English",
|
'language_set_en': "✅ Language set to English",
|
||||||
'language_set_ru': "✅ Язык установлен: Русский",
|
'language_set_ru': "✅ Язык установлен: Русский",
|
||||||
|
|
||||||
|
# Profile command
|
||||||
|
'select_player_profile': "👤 <b>Select player:</b>",
|
||||||
|
'profile_link_sent': "✅ Profile link sent",
|
||||||
},
|
},
|
||||||
'ru': {
|
'ru': {
|
||||||
# Start command
|
# Start command
|
||||||
|
|
@ -154,6 +159,7 @@ TRANSLATIONS = {
|
||||||
"/lastYear_or_1000games - Статистика за последний год или последние 1000 рейтинговых игр (что наступит раньше)\n"
|
"/lastYear_or_1000games - Статистика за последний год или последние 1000 рейтинговых игр (что наступит раньше)\n"
|
||||||
"/setperiod - Настроить периодические уведомления для активного игрока\n"
|
"/setperiod - Настроить периодические уведомления для активного игрока\n"
|
||||||
"(активный игрок меняется в меню /getgamers)\n"
|
"(активный игрок меняется в меню /getgamers)\n"
|
||||||
|
"/profile - Просмотр ссылок на профили Lichess отслеживаемых игроков\n"
|
||||||
"/set_lang - Выбрать язык бота\n"
|
"/set_lang - Выбрать язык бота\n"
|
||||||
"/support - Связаться с разработчиком для поддержки и обратной связи"
|
"/support - Связаться с разработчиком для поддержки и обратной связи"
|
||||||
),
|
),
|
||||||
|
|
@ -240,6 +246,10 @@ TRANSLATIONS = {
|
||||||
'select_language': "🌐 <b>Выберите язык / Select language:</b>",
|
'select_language': "🌐 <b>Выберите язык / Select language:</b>",
|
||||||
'language_set_en': "✅ Language set to English",
|
'language_set_en': "✅ Language set to English",
|
||||||
'language_set_ru': "✅ Язык установлен: Русский",
|
'language_set_ru': "✅ Язык установлен: Русский",
|
||||||
|
|
||||||
|
# Profile command
|
||||||
|
'select_player_profile': "👤 <b>Выберите игрока:</b>",
|
||||||
|
'profile_link_sent': "✅ Ссылка на профиль отправлена",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Скрипт для тестирования запросов к Lichess API для пользователя kostik2811
|
|
||||||
"""
|
|
||||||
import asyncio
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# Добавляем пути к модулям
|
|
||||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'LichessWebServices'))
|
|
||||||
|
|
||||||
from lichess_client import LichessClient
|
|
||||||
from stats_service import StatsService
|
|
||||||
import logging
|
|
||||||
|
|
||||||
# Настройка логирования
|
|
||||||
logging.basicConfig(
|
|
||||||
level=logging.INFO,
|
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
||||||
)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
async def test_kostik2811():
|
|
||||||
"""Тестирование запросов для kostik2811"""
|
|
||||||
username = "kostik2811"
|
|
||||||
|
|
||||||
logger.info(f"🔍 Тестирование запросов для пользователя: {username}")
|
|
||||||
|
|
||||||
# Тест 1: Прямой запрос к Lichess API
|
|
||||||
logger.info("\n" + "="*50)
|
|
||||||
logger.info("ТЕСТ 1: Прямой запрос к Lichess API")
|
|
||||||
logger.info("="*50)
|
|
||||||
|
|
||||||
lichess_client = LichessClient()
|
|
||||||
try:
|
|
||||||
activity_data = await lichess_client.get_user_activity(username)
|
|
||||||
if activity_data:
|
|
||||||
logger.info(f"✅ Получены данные активности: {len(activity_data)} записей")
|
|
||||||
for i, activity in enumerate(activity_data[:3]): # Показываем первые 3
|
|
||||||
logger.info(f" Активность {i+1}: {activity.get('interval', 'N/A')}")
|
|
||||||
else:
|
|
||||||
logger.warning(f"⚠️ Данные активности не получены (None или пусто)")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"❌ Ошибка при запросе к Lichess API: {e}")
|
|
||||||
import traceback
|
|
||||||
logger.error(traceback.format_exc())
|
|
||||||
finally:
|
|
||||||
await lichess_client.close()
|
|
||||||
|
|
||||||
# Тест 2: Запрос через StatsService
|
|
||||||
logger.info("\n" + "="*50)
|
|
||||||
logger.info("ТЕСТ 2: Запрос через StatsService.get_today_stats")
|
|
||||||
logger.info("="*50)
|
|
||||||
|
|
||||||
lichess_client2 = LichessClient()
|
|
||||||
stats_service = StatsService(lichess_client2)
|
|
||||||
try:
|
|
||||||
result = await stats_service.get_today_stats(username)
|
|
||||||
logger.info(f"✅ Результат StatsService: message={result.message}")
|
|
||||||
if result.data:
|
|
||||||
logger.info(f" Данные: username={result.data.username}")
|
|
||||||
logger.info(f" Задачи: {result.data.tasks}")
|
|
||||||
logger.info(f" Игры: {result.data.games}")
|
|
||||||
else:
|
|
||||||
logger.warning(f"⚠️ Нет данных в результате")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"❌ Ошибка в StatsService: {e}")
|
|
||||||
import traceback
|
|
||||||
logger.error(traceback.format_exc())
|
|
||||||
finally:
|
|
||||||
await lichess_client2.close()
|
|
||||||
|
|
||||||
logger.info("\n" + "="*50)
|
|
||||||
logger.info("Тестирование завершено")
|
|
||||||
logger.info("="*50)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
asyncio.run(test_kostik2811())
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue