feat: групповые уведомления о добавлении счетов с копируемым форматом
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
2025-11-18 16:10:24 +09:00
parent 81fb60926c
commit 10e257c798

View File

@@ -87,13 +87,14 @@ async def process_single_account(message: Message, club_card: str, account_numbe
if owner: if owner:
text += f"👤 Владелец: {owner.first_name}\n\n" text += f"👤 Владелец: {owner.first_name}\n\n"
# Отправляем уведомление владельцу # Отправляем уведомление владельцу с форматированием
try: try:
await message.bot.send_message( await message.bot.send_message(
owner.telegram_id, owner.telegram_id,
f"К вашему профилю добавлен счет:\n\n" f"К вашему профилю добавлен счет:\n\n"
f"💳 {account_number}\n\n" f"💳 `{account_number}`\n\n"
f"Теперь вы можете участвовать в розыгрышах с этим счетом!" f"Теперь вы можете участвовать в розыгрышах!",
parse_mode="Markdown"
) )
text += "📨 Владельцу отправлено уведомление\n\n" text += "📨 Владельцу отправлено уведомление\n\n"
except Exception as e: except Exception as e:
@@ -156,12 +157,6 @@ async def process_accounts_data(message: Message, state: FSMContext):
errors.append(f"Строка {i}: некорректный номер карты после счета {account_number}") errors.append(f"Строка {i}: некорректный номер карты после счета {account_number}")
i += 1 i += 1
continue continue
club_card = lines[i].strip()
# Пропускаем, если следующая строка содержит мусор
if not club_card or any(x in club_card.lower() for x in ['viposnova', '0.00', ':']):
errors.append(f"Строка {i}: некорректный номер карты после счета {account_number}")
i += 1
continue
# Создаем счет # Создаем счет
try: try:
@@ -178,20 +173,9 @@ async def process_accounts_data(message: Message, state: FSMContext):
'club_card': club_card, 'club_card': club_card,
'account_number': account_number, 'account_number': account_number,
'account_id': account.id, 'account_id': account.id,
'owner': owner 'owner': owner,
'owner_id': owner.telegram_id if owner else None
}) })
# Отправляем уведомление владельцу
if owner:
try:
await message.bot.send_message(
owner.telegram_id,
f"К вашему профилю добавлен счет:\n\n"
f"💳 {account_number}\n\n"
f"Теперь вы можете участвовать в розыгрышах!"
)
except:
pass
except ValueError as e: except ValueError as e:
errors.append(f"Счет {account_number} (карта {club_card}): {str(e)}") errors.append(f"Счет {account_number} (карта {club_card}): {str(e)}")
@@ -200,6 +184,43 @@ async def process_accounts_data(message: Message, state: FSMContext):
i += 1 i += 1
# Группируем счета по владельцам и отправляем групповые уведомления
if accounts_data:
from collections import defaultdict
accounts_by_owner = defaultdict(list)
for acc in accounts_data:
if acc['owner_id']:
accounts_by_owner[acc['owner_id']].append(acc['account_number'])
# Отправляем групповые уведомления
for owner_id, account_numbers in accounts_by_owner.items():
try:
if len(account_numbers) == 1:
# Одиночное уведомление
notification_text = (
"К вашему профилю добавлен счет:\n\n"
f"💳 `{account_numbers[0]}`\n\n"
"Теперь вы можете участвовать в розыгрышах!"
)
else:
# Групповое уведомление
notification_text = (
f"К вашему профилю добавлено счетов: *{len(account_numbers)}*\n\n"
"💳 *Ваши счета:*\n"
)
for acc_num in account_numbers:
notification_text += f"• `{acc_num}`\n"
notification_text += "\nТеперь вы можете участвовать в розыгрышах!"
await message.bot.send_message(
owner_id,
notification_text,
parse_mode="Markdown"
)
except Exception as e:
pass # Игнорируем ошибки отправки уведомлений
# Формируем отчет # Формируем отчет
text = f"📊 **Результаты добавления счетов**\n\n" text = f"📊 **Результаты добавления счетов**\n\n"