From 352434ae35eaffc90c167dcb2cff246311c2dccb Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 14 Sep 2025 03:06:23 +0300 Subject: [PATCH] Update admin_notification_service.py --- app/services/admin_notification_service.py | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/app/services/admin_notification_service.py b/app/services/admin_notification_service.py index 7f0bca14..04c281da 100644 --- a/app/services/admin_notification_service.py +++ b/app/services/admin_notification_service.py @@ -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} + + 👤 Пользователь: {user.full_name} + 🆔 Telegram ID: {user.telegram_id} + 📱 Username: @{user.username or 'отсутствует'} + + 🔧 Изменение: + 📋 Параметр: {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""" + + 📅 Подписка действует до: {subscription.end_date.strftime('%d.%m.%Y %H:%M')} + 💰 Баланс после операции: {settings.format_price(user.balance_kopeks)} + 🔗 Рефер: {referrer_info} + + ⏰ {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}""" + + 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) +