diff --git a/.env.example b/.env.example index b78355c5..74982854 100644 --- a/.env.example +++ b/.env.example @@ -37,6 +37,7 @@ SUBSCRIPTION_RENEWAL_BALANCE_THRESHOLD_KOPEKS=20000 # Порог баланс CHANNEL_SUB_ID= # Опционально ID твоего канала (-100) CHANNEL_IS_REQUIRED_SUB=false # Обязательна ли подписка на канал CHANNEL_LINK= # Опционально ссылка на канал +CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE=true # Отключать триальные подписки при отписке от канала # ===== DATABASE CONFIGURATION ===== # Режим базы данных: "auto", "postgresql", "sqlite" diff --git a/app/config.py b/app/config.py index a87c8dd0..a7b4fdb0 100644 --- a/app/config.py +++ b/app/config.py @@ -54,6 +54,7 @@ class Settings(BaseSettings): CHANNEL_SUB_ID: Optional[str] = None CHANNEL_LINK: Optional[str] = None CHANNEL_IS_REQUIRED_SUB: bool = False + CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE: bool = True DATABASE_URL: Optional[str] = None diff --git a/app/middlewares/channel_checker.py b/app/middlewares/channel_checker.py index 9ec22d56..74d6dc02 100644 --- a/app/middlewares/channel_checker.py +++ b/app/middlewares/channel_checker.py @@ -108,7 +108,7 @@ class ChannelCheckerMiddleware(BaseMiddleware): elif member.status in self.BAD_MEMBER_STATUS: logger.info(f"❌ Пользователь {telegram_id} не подписан на канал (статус: {member.status})") - if telegram_id: + if telegram_id and settings.CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE: await self._deactivate_trial_subscription(telegram_id) await self._capture_start_payload(state, event, bot) @@ -254,6 +254,13 @@ class ChannelCheckerMiddleware(BaseMiddleware): break async def _deactivate_trial_subscription(self, telegram_id: int) -> None: + if not settings.CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE: + logger.debug( + "ℹ️ Пропускаем деактивацию подписки пользователя %s: отключение при отписке выключено", + telegram_id, + ) + return + async for db in get_db(): try: user = await get_user_by_telegram_id(db, telegram_id) diff --git a/app/services/monitoring_service.py b/app/services/monitoring_service.py index 9a0f6f95..83717ff1 100644 --- a/app/services/monitoring_service.py +++ b/app/services/monitoring_service.py @@ -507,6 +507,12 @@ class MonitoringService: if not settings.CHANNEL_IS_REQUIRED_SUB: return + if not settings.CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE: + logger.debug( + "ℹ️ Проверка отписок от канала отключена — деактивация триальных подписок не требуется" + ) + return + channel_id = settings.CHANNEL_SUB_ID if not channel_id: return