diff --git a/app/config.py b/app/config.py index 412bda59..662c7bdd 100644 --- a/app/config.py +++ b/app/config.py @@ -65,6 +65,18 @@ class Settings(BaseSettings): ADMIN_NOTIFICATIONS_PROMO_TOPIC_ID: int | None = None # Промокоды, кампании, промогруппы ADMIN_NOTIFICATIONS_PARTNERS_TOPIC_ID: int | None = None # Партнёрки, выводы, админ-действия + # Per-category enable/disable (default True for backwards compatibility) + ADMIN_NOTIFICATIONS_PURCHASES_ENABLED: bool = True + ADMIN_NOTIFICATIONS_RENEWALS_ENABLED: bool = True + ADMIN_NOTIFICATIONS_TRIALS_ENABLED: bool = True + ADMIN_NOTIFICATIONS_BALANCE_ENABLED: bool = True + ADMIN_NOTIFICATIONS_ADDONS_ENABLED: bool = True + ADMIN_NOTIFICATIONS_INFRASTRUCTURE_ENABLED: bool = True + ADMIN_NOTIFICATIONS_ERRORS_ENABLED: bool = True + ADMIN_NOTIFICATIONS_PROMO_ENABLED: bool = True + ADMIN_NOTIFICATIONS_PARTNERS_ENABLED: bool = True + ADMIN_NOTIFICATIONS_TICKETS_ENABLED: bool = True + # Настройки очереди чеков NaloGO NALOGO_QUEUE_CHECK_INTERVAL: int = 600 # Интервал проверки очереди (секунды, 10 мин) NALOGO_QUEUE_RECEIPT_DELAY: int = 3 # Задержка между отправкой чеков (секунды) diff --git a/app/services/admin_notification_service.py b/app/services/admin_notification_service.py index de42aaa8..f156ef1c 100644 --- a/app/services/admin_notification_service.py +++ b/app/services/admin_notification_service.py @@ -67,6 +67,12 @@ class AdminNotificationService: NotificationCategory.TICKETS: self.ticket_topic_id, } + # Per-category enabled flags (default True — backwards compatible) + self.category_enabled: dict[NotificationCategory, bool] = {} + for cat in NotificationCategory: + key = f'ADMIN_NOTIFICATIONS_{cat.value.upper()}_ENABLED' + self.category_enabled[cat] = getattr(settings, key, True) + async def _get_referrer_info(self, db: AsyncSession, referred_by_id: int | None) -> str: if not referred_by_id: return 'Нет' @@ -1266,6 +1272,11 @@ class AdminNotificationService: logger.warning('ADMIN_NOTIFICATIONS_CHAT_ID не настроен') return False + # Per-category suppression + if category and not self.category_enabled.get(category, True): + logger.debug('Уведомление подавлено (категория отключена)', category=category.value) + return False + try: message_kwargs = { 'chat_id': self.chat_id, diff --git a/app/services/referral_contest_service.py b/app/services/referral_contest_service.py index 1a091289..9c437014 100644 --- a/app/services/referral_contest_service.py +++ b/app/services/referral_contest_service.py @@ -301,6 +301,10 @@ class ReferralContestService: lines.append('') lines.append(f'Приз: {html.escape(contest.prize_text)}') + # Respect per-category enable/disable + if not getattr(settings, 'ADMIN_NOTIFICATIONS_PROMO_ENABLED', True): + return + try: await self.bot.send_message( chat_id=chat_id,