fix: исправлен парсинг счетов и добавлены уведомления победителям
Исправления: 1. Парсинг счетов (parse_accounts_from_message): - Исправлено дублирование счетов при формате 'КАРТА СЧЕТ' - Добавлены негативные lookbehind для корректного разбора - Теперь '2521 11-22-33-44-55-66-77' парсится только 1 раз 2. Уведомления победителям: - Создан новый модуль src/utils/notifications.py - Добавлена функция notify_winners_async() - Уведомления отправляются автоматически после розыгрыша - Поддержка счетов и обычных пользователей - Включает кнопки подтверждения для победителей по счетам
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""
|
||||
Расширенная админ-панель для управления розыгрышами
|
||||
"""
|
||||
import logging
|
||||
from aiogram import Router, F
|
||||
from aiogram.types import (
|
||||
CallbackQuery, Message, InlineKeyboardButton, InlineKeyboardMarkup
|
||||
@@ -17,6 +18,8 @@ from ..core.services import UserService, LotteryService, ParticipationService
|
||||
from ..core.config import ADMIN_IDS
|
||||
from ..core.models import User, Lottery, Participation, Account
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# Состояния для админки
|
||||
class AdminStates(StatesGroup):
|
||||
@@ -2620,6 +2623,14 @@ async def conduct_lottery_draw(callback: CallbackQuery):
|
||||
winners_dict = await LotteryService.conduct_draw(session, lottery_id)
|
||||
|
||||
if winners_dict:
|
||||
# Отправляем уведомления победителям
|
||||
from ..utils.notifications import notify_winners_async
|
||||
try:
|
||||
await notify_winners_async(callback.bot, session, lottery_id)
|
||||
logger.info(f"Уведомления отправлены для розыгрыша {lottery_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при отправке уведомлений: {e}")
|
||||
|
||||
# Получаем победителей из базы
|
||||
winners = await LotteryService.get_winners(session, lottery_id)
|
||||
text = f"🎉 Розыгрыш '{lottery.title}' завершён!\n\n"
|
||||
@@ -2633,6 +2644,8 @@ async def conduct_lottery_draw(callback: CallbackQuery):
|
||||
else:
|
||||
text += f"{winner.place} место: ID {winner.user_id}\n"
|
||||
|
||||
text += "\n✅ Уведомления отправлены победителям"
|
||||
|
||||
await callback.message.edit_text(
|
||||
text,
|
||||
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
|
||||
|
||||
Reference in New Issue
Block a user