feat: добавить handler подтверждения выигрыша победителем (confirm_win_)
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user