Restrict promo offer keyboards to activation and close

This commit is contained in:
Egor
2025-10-05 06:10:49 +03:00
parent bfa5e5aab9
commit 064f64afd0
6 changed files with 31 additions and 16 deletions

View File

@@ -970,22 +970,12 @@ async def send_offer_to_segment(callback: CallbackQuery, db_user: User, db: Asyn
[InlineKeyboardButton(text=template.button_text, callback_data=f"claim_discount_{offer_record.id}")]
]
if template.offer_type == "purchase_discount":
keyboard_rows.append([
InlineKeyboardButton(
text=user_texts.t("ADMIN_PROMO_OFFER_CTA_BUY", "Купить подписку"),
callback_data="menu_buy",
)
])
elif template.offer_type == "extend_discount":
keyboard_rows.append([
InlineKeyboardButton(
text=user_texts.t("ADMIN_PROMO_OFFER_CTA_EXTEND", "Продлить подписку"),
callback_data="subscription_extend",
)
])
elif template.offer_type == "test_access":
keyboard_rows.extend(_build_connect_button_rows(user, user_texts))
keyboard_rows.append([
InlineKeyboardButton(
text=user_texts.t("PROMO_OFFER_CLOSE", "❌ Закрыть"),
callback_data="promo_offer_close",
)
])
keyboard = InlineKeyboardMarkup(inline_keyboard=keyboard_rows)

View File

@@ -5274,6 +5274,22 @@ async def claim_discount_offer(
await callback.message.answer(success_message, reply_markup=buy_keyboard)
async def handle_promo_offer_close(
callback: types.CallbackQuery,
db_user: User,
db: AsyncSession,
):
try:
await callback.message.delete()
except Exception:
try:
await callback.message.edit_reply_markup()
except Exception:
pass
await callback.answer()
async def handle_device_guide(
callback: types.CallbackQuery,
db_user: User,
@@ -6317,6 +6333,11 @@ def register_handlers(dp: Dispatcher):
F.data.startswith("claim_discount_")
)
dp.callback_query.register(
handle_promo_offer_close,
F.data == "promo_offer_close",
)
dp.callback_query.register(
handle_happ_download_request,
F.data == "subscription_happ_download"

View File

@@ -563,6 +563,7 @@
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ Extra {percent}% discount is active and will apply automatically. It stacks with your promo group.",
"DISCOUNT_CLAIM_ALREADY": " This discount has already been activated.",
"DISCOUNT_CLAIM_ERROR": "❌ Failed to activate the discount. Please try again later.",
"PROMO_OFFER_CLOSE": "❌ Close",
"DISCOUNT_CLAIM_EXPIRED": "⚠️ The offer has expired.",
"DISCOUNT_CLAIM_NOT_FOUND": "❌ Offer not found.",
"DISCOUNT_CLAIM_SUCCESS": "🎉 Discount of {percent}% activated! It will be applied automatically to your next payment.",

View File

@@ -563,6 +563,7 @@
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ Доп. скидка {percent}% активирована и будет применена автоматически. Суммируется с промогруппой.",
"DISCOUNT_CLAIM_ALREADY": " Скидка уже была активирована ранее.",
"DISCOUNT_CLAIM_ERROR": "❌ Не удалось активировать скидку. Попробуйте позже.",
"PROMO_OFFER_CLOSE": "❌ Закрыть",
"DISCOUNT_CLAIM_EXPIRED": "⚠️ Время действия предложения истекло.",
"DISCOUNT_CLAIM_NOT_FOUND": "❌ Предложение не найдено.",
"DISCOUNT_CLAIM_SUCCESS": "🎉 Скидка {percent}% активирована! Она автоматически применится при следующей оплате.",

View File

@@ -534,6 +534,7 @@
"DISCOUNT_CLAIM_EXPIRED": "⚠️ The offer has expired.",
"DISCOUNT_CLAIM_NOT_FOUND": "❌ Offer not found.",
"DISCOUNT_CLAIM_ERROR": "❌ Failed to activate the discount. Please try again later.",
"PROMO_OFFER_CLOSE": "❌ Close",
"TEST_ACCESS_NO_SUBSCRIPTION": "❌ You need an active subscription to use this offer.",
"TEST_ACCESS_NO_SQUADS": "❌ Unable to determine servers for the test access. Please contact support.",
"TEST_ACCESS_REMNAWAVE_ERROR": "❌ Failed to connect the servers. Please try again later or contact support.",

View File

@@ -534,6 +534,7 @@
"DISCOUNT_CLAIM_EXPIRED": "⚠️ Время действия предложения истекло.",
"DISCOUNT_CLAIM_NOT_FOUND": "❌ Предложение не найдено.",
"DISCOUNT_CLAIM_ERROR": "❌ Не удалось активировать скидку. Попробуйте позже.",
"PROMO_OFFER_CLOSE": "❌ Закрыть",
"TEST_ACCESS_NO_SUBSCRIPTION": "❌ Для активации предложения необходима действующая подписка.",
"TEST_ACCESS_NO_SQUADS": "❌ Не удалось определить список серверов для теста. Обратитесь к администратору.",
"TEST_ACCESS_REMNAWAVE_ERROR": "❌ Не удалось подключить серверы. Попробуйте позже или обратитесь в поддержку.",