From d3dc53e9d5d6d0a5b16bb99d49a9f33c96ea3113 Mon Sep 17 00:00:00 2001 From: Vladless Date: Mon, 2 Mar 2026 17:48:09 +0300 Subject: [PATCH] fix back button in stars --- handlers/payments/fast_payment_flow.py | 36 ++++++++++++++++++++++++-- handlers/payments/pay.py | 18 ++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/handlers/payments/fast_payment_flow.py b/handlers/payments/fast_payment_flow.py index 9eedacb9..f7b3b869 100644 --- a/handlers/payments/fast_payment_flow.py +++ b/handlers/payments/fast_payment_flow.py @@ -250,6 +250,38 @@ async def try_fast_payment_flow( return True +@router.callback_query(F.data == "fastflow_back") +async def fastflow_back(callback_query: CallbackQuery, state: FSMContext, session: Any): + """Возврат из экрана выбора суммы в потоке /buy к выбору способа оплаты (без перехода на экран баланса).""" + amount_not_found_text = "Сумма не найдена" + data = await state.get_data() + temp_key = data.get("temp_key") + temp_payload = data.get("temp_payload") + required_amount = data.get("required_amount") + + if not temp_key or not isinstance(temp_payload, dict) or required_amount is None: + await edit_or_send_message( + target_message=callback_query.message, + text=amount_not_found_text, + reply_markup=InlineKeyboardBuilder() + .row(InlineKeyboardButton(text=btn.MAIN_MENU, callback_data="profile")) + .as_markup(), + ) + await callback_query.answer() + return + + await try_fast_payment_flow( + callback_query, + session, + state, + tg_id=callback_query.from_user.id, + temp_key=str(temp_key), + temp_payload=dict(temp_payload), + required_amount=int(required_amount), + ) + await callback_query.answer() + + @router.callback_query(F.data == "fastflow_coupon_back") async def fastflow_coupon_back(callback_query: CallbackQuery, state: FSMContext, session: Any): amount_not_found_text = "Сумма не найдена" @@ -390,11 +422,11 @@ async def fastflow_apply_coupon(message: Message, state: FSMContext, session: An required_amount_new = int(max(0, ceil(float(new_price) - float(balance_now)))) - percent_value = int(getattr(coupon, "percent", 0) or 0) - await create_coupon_usage(session, coupon.id, message.from_user.id) await update_coupon_usage_count(session, coupon.id) + percent_value = int(getattr(coupon, "percent", 0) or 0) + temp_payload_updated = dict(temp_payload) temp_payload_updated["required_amount"] = int(required_amount_new) if "selected_price_rub" in temp_payload_updated: diff --git a/handlers/payments/pay.py b/handlers/payments/pay.py index 1c5ca171..b6abeddc 100644 --- a/handlers/payments/pay.py +++ b/handlers/payments/pay.py @@ -179,7 +179,23 @@ async def handle_pay_currency(callback_query: CallbackQuery, state: FSMContext, @router.callback_query(F.data == "balance") -async def balance_handler(callback_query: CallbackQuery, session: AsyncSession): +async def balance_handler(callback_query: CallbackQuery, state: FSMContext, session: AsyncSession): + data = await state.get_data() + if data.get("temp_key") and data.get("required_amount") is not None: + from handlers.payments.fast_payment_flow import try_fast_payment_flow + + await try_fast_payment_flow( + callback_query, + session, + state, + tg_id=callback_query.from_user.id, + temp_key=str(data["temp_key"]), + temp_payload=dict(data.get("temp_payload") or {}), + required_amount=int(data["required_amount"]), + ) + await callback_query.answer() + return + stmt = select(User.balance).where(User.tg_id == callback_query.from_user.id) result = await session.execute(stmt) balance_rub = result.scalar_one_or_none() or 0.0