import logging from aiogram import Router, F from aiogram.filters import CommandStart, Command, CommandObject from aiogram.types import Message from keyboards.main_menu import get_main_menu from services.api_client import api_client logger = logging.getLogger(__name__) router = Router() @router.message(CommandStart()) async def cmd_start(message: Message, command: CommandObject): """Handle /start command with or without deep link.""" logger.info(f"[START] ==================== START COMMAND ====================") logger.info(f"[START] Telegram user: id={message.from_user.id}, username=@{message.from_user.username}") logger.info(f"[START] Full message text: '{message.text}'") logger.info(f"[START] Deep link args (command.args): '{command.args}'") # Check if there's a deep link token (for account linking) token = command.args if token: logger.info(f"[START] -------- TOKEN RECEIVED --------") logger.info(f"[START] Token: {token}") logger.info(f"[START] Token length: {len(token)} chars") logger.info(f"[START] -------- CALLING API --------") logger.info(f"[START] Sending to /telegram/confirm-link:") logger.info(f"[START] - token: {token}") logger.info(f"[START] - telegram_id: {message.from_user.id}") logger.info(f"[START] - telegram_username: {message.from_user.username}") result = await api_client.confirm_telegram_link( token=token, telegram_id=message.from_user.id, telegram_username=message.from_user.username ) logger.info(f"[START] -------- API RESPONSE --------") logger.info(f"[START] Response: {result}") logger.info(f"[START] Success: {result.get('success')}") if result.get("success"): user_nickname = result.get("nickname", "пользователь") logger.info(f"[START] ✅ LINK SUCCESS! User '{user_nickname}' linked to telegram_id={message.from_user.id}") await message.answer( f"Аккаунт успешно привязан!\n\n" f"Привет, {user_nickname}!\n\n" f"Теперь ты будешь получать уведомления о:\n" f"• Начале и окончании событий (Golden Hour, Jackpot и др.)\n" f"• Старте и завершении марафонов\n" f"• Спорах по твоим заданиям\n\n" f"Используй меню ниже для навигации:", reply_markup=get_main_menu() ) return else: error = result.get("error", "Неизвестная ошибка") logger.error(f"[START] ❌ LINK FAILED!") logger.error(f"[START] Error: {error}") logger.error(f"[START] Token was: {token}") await message.answer( f"Ошибка привязки аккаунта\n\n" f"{error}\n\n" f"Попробуй получить новую ссылку на сайте.", reply_markup=get_main_menu() ) return # No token - regular start logger.info(f"[START] No token, checking if user is already linked...") user = await api_client.get_user_by_telegram_id(message.from_user.id) logger.info(f"[START] API response: {user}") if user: await message.answer( f"С возвращением, {user.get('nickname', 'игрок')}!\n\n" f"Твой аккаунт привязан. Используй меню для навигации:", reply_markup=get_main_menu() ) else: await message.answer( "Добро пожаловать в Game Marathon Bot!\n\n" "Этот бот поможет тебе следить за марафонами и " "получать уведомления о важных событиях.\n\n" "Для начала работы:\n" "1. Зайди на сайт в настройки профиля\n" "2. Нажми кнопку «Привязать Telegram»\n" "3. Перейди по полученной ссылке\n\n" "После привязки ты сможешь:\n" "• Смотреть свои марафоны\n" "• Получать уведомления о событиях\n" "• Следить за статистикой", reply_markup=get_main_menu() ) @router.message(Command("help")) @router.message(F.text == "❓ Помощь") async def cmd_help(message: Message): """Handle /help command.""" await message.answer( "Справка по командам:\n\n" "/start - Начать работу с ботом\n" "/marathons - Мои марафоны\n" "/stats - Моя статистика\n" "/settings - Настройки уведомлений\n" "/help - Эта справка\n\n" "Уведомления:\n" "Бот присылает уведомления о:\n" "• 🌟 Golden Hour - очки x1.5\n" "• 🎰 Jackpot - очки x3\n" "• ⚡ Double Risk - половина очков, дропы бесплатны\n" "• 👥 Common Enemy - общий челлендж\n" "• 🚀 Старт/финиш марафонов\n" "• ⚠️ Споры по заданиям", reply_markup=get_main_menu() )