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:
|
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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user