feat: добавить handler подтверждения выигрыша победителем (confirm_win_)
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
2025-11-17 16:46:00 +09:00
parent 8b3cda373a
commit ad7365f7f8

View File

@@ -304,3 +304,91 @@ async def redraw_lottery(message: Message):
except Exception as e: except Exception as e:
await message.answer(f"❌ Ошибка: {str(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)