diff --git a/bot/handlers/admin/promo/create.py b/bot/handlers/admin/promo/create.py
index ead38b0..8c0517f 100644
--- a/bot/handlers/admin/promo/create.py
+++ b/bot/handlers/admin/promo/create.py
@@ -241,9 +241,9 @@ async def process_promo_discount_percentage_handler(message: types.Message,
# Step 3: Ask for max activations
data = await state.get_data()
prompt_text = _(
- "admin_promo_step3_max_activations",
+ "admin_promo_step3_max_activations_discount",
code=data.get("promo_code"),
- bonus_days=f"{discount_percentage}%" # Display as percentage in place of bonus_days
+ discount_percentage=discount_percentage
)
await message.answer(
@@ -284,15 +284,25 @@ async def process_promo_max_activations_handler(message: types.Message,
return
await state.update_data(max_activations=max_activations)
-
+
# Step 4: Ask for validity
data = await state.get_data()
- prompt_text = _(
- "admin_promo_step4_validity",
- code=data.get("promo_code"),
- bonus_days=data.get("bonus_days"),
- max_activations=max_activations
- )
+ promo_type = data.get("promo_type", "bonus_days")
+
+ if promo_type == "discount":
+ prompt_text = _(
+ "admin_promo_step4_validity_discount",
+ code=data.get("promo_code"),
+ discount_percentage=data.get("discount_percentage"),
+ max_activations=max_activations
+ )
+ else:
+ prompt_text = _(
+ "admin_promo_step4_validity",
+ code=data.get("promo_code"),
+ bonus_days=data.get("bonus_days"),
+ max_activations=max_activations
+ )
# Create keyboard for validity options
builder = InlineKeyboardBuilder()
@@ -356,12 +366,15 @@ async def process_promo_set_validity(callback: types.CallbackQuery,
_ = lambda key, **kwargs: i18n.gettext(current_lang, key, **kwargs)
data = await state.get_data()
- prompt_text = _(
- "admin_promo_enter_validity_days",
- code=data.get("promo_code"),
- bonus_days=data.get("bonus_days"),
- max_activations=data.get("max_activations")
- )
+ promo_type = data.get("promo_type", "bonus_days")
+
+ # Display the correct text based on promo type
+ if promo_type == "discount":
+ value_info = f"{data.get('discount_percentage')}%"
+ else:
+ value_info = f"{data.get('bonus_days')} дней"
+
+ prompt_text = f"⏰ Введите количество дней действия промокода (1-365):\n\nКод: {data.get('promo_code')}\n{'Скидка' if promo_type == 'discount' else 'Бонус'}: {value_info}\nМакс. активаций: {data.get('max_activations')}"
try:
await callback.message.edit_text(
@@ -461,21 +474,25 @@ async def create_promo_code_final(callback_or_message,
logging.info(f"Promo code '{data['promo_code']}' ({promo_type}) created with ID {created_promo.promo_code_id}")
# Success message
- valid_until_str = _("admin_promo_unlimited") if not data.get("validity_days") else f"{data['validity_days']} days"
+ valid_until_str = _("admin_promo_unlimited") if not data.get("validity_days") else f"{data['validity_days']} дней"
# Format success message based on type
if promo_type == "discount":
- value_display = f"{data['discount_percentage']}%"
+ success_text = _(
+ "admin_promo_created_success_discount",
+ code=data["promo_code"],
+ discount_percentage=data['discount_percentage'],
+ max_activations=data["max_activations"],
+ valid_until_str=valid_until_str
+ )
else:
- value_display = f"{data['bonus_days']} days"
-
- success_text = _(
- "admin_promo_created_success",
- code=data["promo_code"],
- bonus_days=value_display, # Reusing bonus_days placeholder for display
- max_activations=data["max_activations"],
- valid_until_str=valid_until_str
- )
+ success_text = _(
+ "admin_promo_created_success",
+ code=data["promo_code"],
+ bonus_days=data['bonus_days'],
+ max_activations=data["max_activations"],
+ valid_until_str=valid_until_str
+ )
if hasattr(callback_or_message, 'message'): # CallbackQuery
try:
diff --git a/locales/en.json b/locales/en.json
index bcf391e..04c8771 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -173,6 +173,7 @@
"admin_promo_invalid_max_activations": "Max activations must be a positive number.",
"admin_promo_invalid_validity_days": "Validity period (in days) must be a positive number.",
"admin_promo_created_success": "✅ Promo code {code} created successfully!\nBonus: {bonus_days} days\nMax uses: {max_activations}\nValid until: {valid_until_str}.",
+ "admin_promo_created_success_discount": "✅ Promo code {code} created successfully!\nDiscount: {discount_percentage}%\nMax uses: {max_activations}\nValid until: {valid_until_str}.",
"admin_promo_set_validity_days": "⏰ Set validity (days)",
"admin_back_to_panel": "⬅️ Back to panel",
"admin_promo_unlimited": "♾️ Unlimited",
@@ -346,7 +347,9 @@
"admin_promo_step2_bonus_days": "🎟 Create Promo Code\n\nStep 2 of 4: Bonus Days\n\nCode: {code}\n\nEnter the number of bonus days (1-365):",
"admin_promo_step2_discount_percentage": "🎟 Create Promo Code\n\nStep 2 of 4: Discount Percentage\n\nCode: {code}\n\nEnter the discount percentage for the promo code (1-100):",
"admin_promo_step3_max_activations": "🎟 Create Promo Code\n\nStep 3 of 4: Max Activations\n\nCode: {code}\nBonus days: {bonus_days}\n\nEnter the maximum number of activations (1-10000):",
+ "admin_promo_step3_max_activations_discount": "🎟 Create Promo Code\n\nStep 3 of 4: Max Activations\n\nCode: {code}\nDiscount: {discount_percentage}%\n\nEnter the maximum number of activations (1-10000):",
"admin_promo_step4_validity": "🎟 Create Promo Code\n\nStep 4 of 4: Validity Period\n\nCode: {code}\nBonus days: {bonus_days}\nMax activations: {max_activations}\n\nChoose the validity period for the promo code:",
+ "admin_promo_step4_validity_discount": "🎟 Create Promo Code\n\nStep 4 of 4: Validity Period\n\nCode: {code}\nDiscount: {discount_percentage}%\nMax activations: {max_activations}\n\nChoose the validity period for the promo code:",
"admin_promo_code_already_exists": "❌ A promo code with this code already exists",
"admin_promo_unlimited_validity": "♾️ Unlimited",
"admin_promo_enter_validity_days": "⏰ Enter the number of validity days for the promo code (1-365):",
diff --git a/locales/ru.json b/locales/ru.json
index eed21ec..2d826a9 100644
--- a/locales/ru.json
+++ b/locales/ru.json
@@ -174,6 +174,7 @@
"admin_promo_invalid_max_activations": "Максимальное количество активаций должно быть положительным числом.",
"admin_promo_invalid_validity_days": "Срок действия промокода (в днях) должен быть положительным числом.",
"admin_promo_created_success": "✅ Промокод {code} успешно создан!\nБонус: {bonus_days} дней\nМакс. активаций: {max_activations}\nДействителен: {valid_until_str}",
+ "admin_promo_created_success_discount": "✅ Промокод {code} успешно создан!\nСкидка: {discount_percentage}%\nМакс. активаций: {max_activations}\nДействителен: {valid_until_str}",
"subscription_72h_notification": "👋 Привет, {user_name}!\n\n⏳ Ваша подписка на VPN истекает через 3 дня — {end_date}.\n\nПродлите её по кнопке ниже.",
"subscription_48h_notification": "👋 Привет, {user_name}!\n\n⏳ Ваша подписка на VPN истекает через 2 дня — {end_date}.\n\nПродлите её по кнопке ниже.",
"subscription_24h_notification": "👋 Привет, {user_name}!\n\n⏳ Ваша подписка на VPN истекает через 1 день — {end_date}.\n\nПродлите её по кнопке ниже.",
@@ -348,7 +349,9 @@
"admin_promo_step2_discount_percentage": "🎟 Создание промокода\n\nШаг 2 из 4: Процент скидки\n\nКод: {code}\n\nВведите процент скидки для промокода {code} (от 1 до 100):",
"admin_promo_invalid_discount_percentage": "❌ Процент скидки должен быть от 1 до 100.",
"admin_promo_step3_max_activations": "🎟 Создание промокода\n\nШаг 3 из 4: Максимальные активации\n\nКод: {code}\nБонусные дни: {bonus_days}\n\nВведите максимальное количество активаций (1-10000):",
+ "admin_promo_step3_max_activations_discount": "🎟 Создание промокода\n\nШаг 3 из 4: Максимальные активации\n\nКод: {code}\nСкидка: {discount_percentage}%\n\nВведите максимальное количество активаций (1-10000):",
"admin_promo_step4_validity": "🎟 Создание промокода\n\nШаг 4 из 4: Срок действия\n\nКод: {code}\nБонусные дни: {bonus_days}\nМакс. активации: {max_activations}\n\nВыберите срок действия промокода:",
+ "admin_promo_step4_validity_discount": "🎟 Создание промокода\n\nШаг 4 из 4: Срок действия\n\nКод: {code}\nСкидка: {discount_percentage}%\nМакс. активации: {max_activations}\n\nВыберите срок действия промокода:",
"admin_promo_code_already_exists": "❌ Промокод с таким кодом уже существует",
"admin_promo_unlimited_validity": "♾️ Неограниченно",
"admin_promo_enter_validity_days": "⏰ Введите количество дней действия промокода (1-365):",