From ad7365f7f866bba81d4a41718b29ba412cb0f613 Mon Sep 17 00:00:00 2001 From: "Andrew K. Choi" Date: Mon, 17 Nov 2025 16:46:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20handler=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B8?= =?UTF-8?q?=D0=B3=D1=80=D1=8B=D1=88=D0=B0=20=D0=BF=D0=BE=D0=B1=D0=B5=D0=B4?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=BC=20(confirm=5Fwin=5F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/redraw_handlers.py | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) 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) +