Update admin_notification_service.py

This commit is contained in:
Egor
2025-09-14 03:06:23 +03:00
committed by GitHub
parent b1e39bae32
commit 352434ae35

View File

@@ -707,4 +707,71 @@ class AdminNotificationService:
logger.error(f"Ошибка отправки уведомления о статусе панели Remnawave: {e}")
return False
async def send_subscription_update_notification(
self,
db: AsyncSession,
user: User,
subscription: Subscription,
update_type: str,
old_value: Any,
new_value: Any,
price_paid: int = 0
) -> bool:
if not self._is_enabled():
return False
try:
referrer_info = await self._get_referrer_info(db, user.referred_by_id)
update_types = {
"traffic": ("📊 ИЗМЕНЕНИЕ ТРАФИКА", "трафик"),
"devices": ("📱 ИЗМЕНЕНИЕ УСТРОЙСТВ", "количество устройств"),
"servers": ("🌐 ИЗМЕНЕНИЕ СЕРВЕРОВ", "серверы")
}
title, param_name = update_types.get(update_type, ("⚙️ ИЗМЕНЕНИЕ ПОДПИСКИ", "параметры"))
message = f"""{title}
👤 <b>Пользователь:</b> {user.full_name}
🆔 <b>Telegram ID:</b> <code>{user.telegram_id}</code>
📱 <b>Username:</b> @{user.username or 'отсутствует'}
🔧 <b>Изменение:</b>
📋 Параметр: {param_name}
📉 Было: {self._format_value(old_value, update_type)}
📈 Стало: {self._format_value(new_value, update_type)}"""
if price_paid > 0:
message += f"\n💰 Доплачено: {settings.format_price(price_paid)}"
else:
message += f"\n💸 Бесплатно"
message += f"""
📅 <b>Подписка действует до:</b> {subscription.end_date.strftime('%d.%m.%Y %H:%M')}
💰 <b>Баланс после операции:</b> {settings.format_price(user.balance_kopeks)}
🔗 <b>Рефер:</b> {referrer_info}
⏰ <i>{datetime.now().strftime('%d.%m.%Y %H:%M:%S')}</i>"""
return await self._send_message(message)
except Exception as e:
logger.error(f"Ошибка отправки уведомления об изменении подписки: {e}")
return False
def _format_value(self, value: Any, update_type: str) -> str:
if update_type == "traffic":
if value == 0:
return "♾ Безлимитный"
return f"{value} ГБ"
elif update_type == "devices":
return f"{value} устройств"
elif update_type == "servers":
if isinstance(value, list):
return f"{len(value)} серверов"
return str(value)
return str(value)