From f6f330db4a2e6aa5d14a616b9fd2365577f928a1 Mon Sep 17 00:00:00 2001 From: Fringg Date: Sat, 28 Mar 2026 19:33:18 +0300 Subject: [PATCH] fix: improve UX for legacy users migrating to tariff mode - instant_switch handler: redirect legacy users (tariff_id=NULL) to tariff_switch migration flow instead of dead-end popup - autopay skip: notify user once (7-day cooldown) when autopay is skipped for legacy subscription, explaining they need to choose a tariff for autopay to work --- app/handlers/subscription/tariff_purchase.py | 3 ++- app/services/monitoring_service.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/handlers/subscription/tariff_purchase.py b/app/handlers/subscription/tariff_purchase.py index 6a5f5a52..fbcc3f7d 100644 --- a/app/handlers/subscription/tariff_purchase.py +++ b/app/handlers/subscription/tariff_purchase.py @@ -3382,7 +3382,8 @@ async def show_instant_switch_list( return if not subscription.tariff_id: - await callback.answer('У вашей подписки нет тарифа', show_alert=True) + # Legacy subscription without tariff — redirect to tariff_switch migration flow + await show_tariff_switch_list(callback, db_user, db, state) return # Получаем текущий тариф diff --git a/app/services/monitoring_service.py b/app/services/monitoring_service.py index b73f3929..067bfcd4 100644 --- a/app/services/monitoring_service.py +++ b/app/services/monitoring_service.py @@ -1082,6 +1082,25 @@ class MonitoringService: sub_id=sub.id, user_id=sub.user_id, ) + # Notify user once that autopay won't work without a tariff + autopay_legacy_key = f'autopay_legacy_notified:{sub.user_id}' + try: + if not await cache.exists(autopay_legacy_key): + user = sub.user + if user and user.telegram_id and self.bot: + await self.bot.send_message( + chat_id=user.telegram_id, + text=( + '⚠️ Автоплатёж приостановлен\n\n' + 'Ваша подписка была создана до введения тарифов. ' + 'Для работы автоплатежа необходимо выбрать тариф.\n\n' + 'Перейдите в раздел «Моя подписка» → «Продлить», чтобы выбрать тариф.' + ), + parse_mode='HTML', + ) + await cache.set(autopay_legacy_key, 1, expire=86400 * 7) + except Exception as notify_err: + logger.debug('Не удалось уведомить о пропуске autopay для legacy подписки', error=notify_err) continue days_before_expiry = (sub.end_date - current_time).days