Add autorenew cancellation handler and logging for subscription service

- Implemented a new callback handler to allow users to cancel auto-renewal of their subscriptions via a webhook button.
- Added logging to track subscription status and auto-renew settings during webhook checks, improving monitoring and debugging capabilities.
- Enhanced user feedback with appropriate alerts for unsupported actions and confirmation of updates to subscription settings.
This commit is contained in:
machka-pasla
2025-09-05 22:10:56 +03:00
parent 2b592e8abe
commit c208541525
2 changed files with 45 additions and 0 deletions
+38
View File
@@ -300,6 +300,44 @@ async def confirm_autorenew_handler(
await my_subscription_command_handler(callback, i18n_data, settings, panel_service, subscription_service, session, bot) await my_subscription_command_handler(callback, i18n_data, settings, panel_service, subscription_service, session, bot)
@router.callback_query(F.data == "autorenew:cancel")
async def autorenew_cancel_from_webhook_button(
callback: types.CallbackQuery,
settings: Settings,
i18n_data: dict,
session: AsyncSession,
subscription_service: SubscriptionService,
panel_service: PanelApiService,
bot: Bot,
):
current_lang = i18n_data.get("current_language", settings.DEFAULT_LANGUAGE)
i18n: Optional[JsonI18n] = i18n_data.get("i18n_instance")
get_text = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs) if i18n else key
# Disable auto-renew on the active subscription (non-tribute)
from db.dal import subscription_dal
sub = await subscription_dal.get_active_subscription_by_user_id(session, callback.from_user.id)
if not sub:
try:
await callback.answer(get_text("subscription_not_active"), show_alert=True)
except Exception:
pass
return
if sub.provider == "tribute":
try:
await callback.answer(get_text("subscription_autorenew_not_supported_for_tribute"), show_alert=True)
except Exception:
pass
return
await subscription_dal.update_subscription(session, sub.subscription_id, {"auto_renew_enabled": False})
await session.commit()
try:
await callback.answer(get_text("subscription_autorenew_updated"))
except Exception:
pass
await my_subscription_command_handler(callback, i18n_data, settings, panel_service, subscription_service, session, bot)
@router.message(Command("connect")) @router.message(Command("connect"))
async def connect_command_handler( async def connect_command_handler(
message: types.Message, message: types.Message,
+7
View File
@@ -213,6 +213,13 @@ class PanelWebhookService:
async with self.async_session_factory() as session: async with self.async_session_factory() as session:
from db.dal import subscription_dal from db.dal import subscription_dal
sub = await subscription_dal.get_active_subscription_by_user_id(session, user_id) sub = await subscription_dal.get_active_subscription_by_user_id(session, user_id)
logging.info(
"48h webhook check: user_id=%s sub_found=%s auto_renew=%s provider=%s",
user_id,
bool(sub),
getattr(sub, 'auto_renew_enabled', None) if sub else None,
getattr(sub, 'provider', None) if sub else None,
)
if sub and sub.auto_renew_enabled and sub.provider != 'tribute': if sub and sub.auto_renew_enabled and sub.provider != 'tribute':
cancel_kb = get_autorenew_cancel_keyboard(lang, self.i18n) cancel_kb = get_autorenew_cancel_keyboard(lang, self.i18n)
await self._send_message( await self._send_message(