diff --git a/src/handlers/redraw_handlers.py b/src/handlers/redraw_handlers.py index 2f07fb0..89a0c02 100644 --- a/src/handlers/redraw_handlers.py +++ b/src/handlers/redraw_handlers.py @@ -304,3 +304,91 @@ async def redraw_lottery(message: Message): except Exception as e: await message.answer(f"❌ Ошибка: {str(e)}") + + +@router.callback_query(F.data.startswith("confirm_win_")) +async def confirm_winner_callback(callback_query): + """Обработка подтверждения выигрыша победителем""" + from aiogram.types import CallbackQuery + + winner_id = int(callback_query.data.split("_")[-1]) + + async with async_session_maker() as session: + # Проверяем токен верификации + verification = await WinnerNotificationService.verify_token( + session, + winner_id, + callback_query.from_user.id + ) + + if not verification: + await callback_query.answer( + "❌ Токен недействителен или истек срок действия (24 часа)", + show_alert=True + ) + return + + # Получаем информацию о победителе + winner_result = await session.execute( + select(Winner).where(Winner.id == winner_id) + ) + winner = winner_result.scalar_one_or_none() + + if not winner: + await callback_query.answer("❌ Победитель не найден", show_alert=True) + return + + if winner.is_confirmed: + await callback_query.answer( + "✅ Этот выигрыш уже подтвержден!", + show_alert=True + ) + return + + # Подтверждаем выигрыш + winner.is_confirmed = True + winner.confirmed_at = datetime.now(timezone.utc) + await session.commit() + + # Получаем данные о розыгрыше + lottery = await LotteryService.get_lottery(session, winner.lottery_id) + + # Отправляем подтверждение пользователю + confirmation_text = ( + f"✅ **Выигрыш подтвержден!**\n\n" + f"🎯 Розыгрыш: {lottery.title}\n" + f"🏆 Место: {winner.place}\n" + f"🎁 Приз: {winner.prize}\n" + f"💳 Счет: {winner.account_number}\n\n" + f"📞 С вами свяжется администратор для вручения приза.\n" + f"Спасибо за участие!" + ) + + await callback_query.message.edit_text( + confirmation_text, + parse_mode="Markdown" + ) + + # Уведомляем админов + for admin_id in ADMIN_IDS: + try: + admin_text = ( + f"✅ **Подтверждение выигрыша**\n\n" + f"👤 Пользователь: {callback_query.from_user.full_name} " + f"(@{callback_query.from_user.username or 'нет username'})\n" + f"🎯 Розыгрыш: {lottery.title}\n" + f"🏆 Место: {winner.place}\n" + f"🎁 Приз: {winner.prize}\n" + f"💳 Счет: {winner.account_number}" + ) + + from aiogram import Bot + from src.core.config import BOT_TOKEN + bot = Bot(token=BOT_TOKEN) + await bot.send_message(admin_id, admin_text, parse_mode="Markdown") + except Exception as e: + import logging + logging.getLogger(__name__).error(f"Ошибка отправки админу {admin_id}: {e}") + + await callback_query.answer("✅ Выигрыш подтвержден!", show_alert=True) +