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):",