From bdfe6ae1cf4378ba67f7e1ab574b3391e9a0f095 Mon Sep 17 00:00:00 2001 From: yazhog Date: Mon, 8 Sep 2025 14:02:57 +0300 Subject: [PATCH] feat: add trial prompt after registration --- app/handlers/start.py | 109 +++++++++------------------------------- app/keyboards/inline.py | 13 ++++- 2 files changed, 35 insertions(+), 87 deletions(-) diff --git a/app/handlers/start.py b/app/handlers/start.py index 87b49bd2..e19bc50d 100644 --- a/app/handlers/start.py +++ b/app/handlers/start.py @@ -12,7 +12,7 @@ from app.database.crud.user import ( ) from app.database.models import UserStatus from app.keyboards.inline import ( - get_rules_keyboard, get_main_menu_keyboard + get_rules_keyboard, get_main_menu_keyboard, get_post_registration_keyboard ) from app.localization.texts import get_texts from app.services.referral_service import process_referral_registration @@ -498,52 +498,21 @@ async def complete_registration_from_callback( logger.error(f"Ошибка при обработке реферальной регистрации: {e}") await state.clear() - - has_active_subscription = False - subscription_is_active = False - - menu_text = await get_main_menu_text_simple(user.full_name, texts, db) - + + offer_text = ( + f"Подключите VPN бесплатно! Дарим вам {settings.TRIAL_DURATION_DAYS} дней!\n\n" + "Стоимость 100₽/мес за 1 устройство\n\n" + "👇Жмите на кнопку👇 чтобы подключить в 1 клик" + ) + try: await callback.message.answer( - menu_text, - reply_markup=get_main_menu_keyboard( - language=user.language, - is_admin=settings.is_admin(user.telegram_id), - has_had_paid_subscription=user.has_had_paid_subscription, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - balance_kopeks=user.balance_kopeks - ), - parse_mode="HTML" + offer_text, + reply_markup=get_post_registration_keyboard(), ) - logger.info(f"✅ Главное меню отправлено для пользователя {user.telegram_id}") except Exception as e: - logger.error(f"Ошибка при отправке главного меню: {e}") - try: - balance_rubles = user.balance_kopeks // 100 - await callback.message.answer( - f"Добро пожаловать, {user.full_name}!\n" - f"Баланс: {balance_rubles} ₽\n" - f"Подписка: Нет активной подписки", - reply_markup=get_main_menu_keyboard( - language=user.language, - is_admin=settings.is_admin(user.telegram_id), - has_had_paid_subscription=user.has_had_paid_subscription, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - balance_kopeks=user.balance_kopeks - ) - ) - logger.info(f"✅ Fallback главное меню отправлено для пользователя {user.telegram_id}") - except Exception as fallback_error: - logger.error(f"⛔ Критическая ошибка при отправке fallback меню: {fallback_error}") - try: - await callback.message.answer(f"Добро пожаловать, {user.full_name}! Регистрация завершена.") - logger.info(f"✅ Простое приветствие отправлено для пользователя {user.telegram_id}") - except Exception as final_error: - logger.error(f"⛔ Критическая ошибка при отправке простого сообщения: {final_error}") - + logger.error(f"Ошибка при отправке предложения триала: {e}") + logger.info(f"✅ Регистрация завершена для пользователя: {user.telegram_id}") async def complete_registration( @@ -661,53 +630,21 @@ async def complete_registration( logger.error(f"Ошибка при обработке реферальной регистрации: {e}") await state.clear() - - has_active_subscription = False - subscription_is_active = False - - menu_text = await get_main_menu_text_simple(user.full_name, texts, db) - + + offer_text = ( + f"Подключите VPN бесплатно! Дарим вам {settings.TRIAL_DURATION_DAYS} дней!\n\n" + "Стоимость 100₽/мес за 1 устройство\n\n" + "👇Жмите на кнопку👇 чтобы подключить в 1 клик" + ) + try: await message.answer( - menu_text, - reply_markup=get_main_menu_keyboard( - language=user.language, - is_admin=settings.is_admin(user.telegram_id), - has_had_paid_subscription=user.has_had_paid_subscription, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - balance_kopeks=user.balance_kopeks - ), - parse_mode="HTML" + offer_text, + reply_markup=get_post_registration_keyboard(), ) - logger.info(f"✅ Главное меню отправлено для пользователя {user.telegram_id}") except Exception as e: - logger.error(f"Ошибка при отправке главного меню: {e}") - try: - balance_rubles = user.balance_kopeks // 100 - await message.answer( - f"Добро пожаловать, {user.full_name}!\n" - f"Баланс: {balance_rubles} ₽\n" - f"Подписка: Нет активной подписки", - reply_markup=get_main_menu_keyboard( - language=user.language, - is_admin=settings.is_admin(user.telegram_id), - has_had_paid_subscription=user.has_had_paid_subscription, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - balance_kopeks=user.balance_kopeks - ), - parse_mode="HTML" - ) - logger.info(f"✅ Fallback главное меню отправлено для пользователя {user.telegram_id}") - except Exception as fallback_error: - logger.error(f"⛔ Критическая ошибка при отправке fallback меню: {fallback_error}") - try: - await message.answer(f"Добро пожаловать, {user.full_name}! Регистрация завершена.") - logger.info(f"✅ Простое приветствие отправлено для пользователя {user.telegram_id}") - except: - pass - + logger.error(f"Ошибка при отправке предложения триала: {e}") + logger.info(f"✅ Регистрация завершена для пользователя: {user.telegram_id}") diff --git a/app/keyboards/inline.py b/app/keyboards/inline.py index a8e0191c..70f34589 100644 --- a/app/keyboards/inline.py +++ b/app/keyboards/inline.py @@ -19,8 +19,19 @@ def get_rules_keyboard(language: str = "ru") -> InlineKeyboardMarkup: ]) +def get_post_registration_keyboard() -> InlineKeyboardMarkup: + return InlineKeyboardMarkup(inline_keyboard=[ + [ + InlineKeyboardButton( + text="🚀 Подключиться бесплатно 🚀", callback_data="menu_trial" + ) + ], + [InlineKeyboardButton(text="Пропустить ➡️", callback_data="back_to_menu")], + ]) + + def get_main_menu_keyboard( - language: str = "ru", + language: str = "ru", is_admin: bool = False, has_had_paid_subscription: bool = False, has_active_subscription: bool = False,