From b720680af077b72139e190110fd8eeaf46dba829 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Sat, 21 Jun 2025 21:52:25 +0300 Subject: [PATCH] fix: renew key flow with subgroups --- handlers/keys/key_renew.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/handlers/keys/key_renew.py b/handlers/keys/key_renew.py index f0fb97db..a632b61d 100644 --- a/handlers/keys/key_renew.py +++ b/handlers/keys/key_renew.py @@ -46,7 +46,7 @@ moscow_tz = pytz.timezone("Europe/Moscow") @router.callback_query(F.data.startswith("renew_key|")) -async def process_callback_renew_key(callback_query: CallbackQuery, session: AsyncSession): +async def process_callback_renew_key(callback_query: CallbackQuery, state: FSMContext, session: AsyncSession): tg_id = callback_query.message.chat.id key_name = callback_query.data.split("|")[1] @@ -61,6 +61,11 @@ async def process_callback_renew_key(callback_query: CallbackQuery, session: Asy server_id = record["server_id"] tariff_id = record.get("tariff_id") + await state.update_data( + renew_key_name=key_name, + renew_client_id=client_id + ) + logger.info(f"[RENEW] Получение тарифов для server_id={server_id}") try: @@ -110,7 +115,7 @@ async def process_callback_renew_key(callback_query: CallbackQuery, session: Asy builder.row( InlineKeyboardButton( text=f"{t['name']} — {t['price_rub']}₽", - callback_data=f"renew_plan|{t['id']}|{client_id}|{key_name}", + callback_data=f"renew_plan|{t['id']}", ) ) @@ -119,7 +124,7 @@ async def process_callback_renew_key(callback_query: CallbackQuery, session: Asy builder.row( InlineKeyboardButton( text=subgroup, - callback_data=f"renew_subgroup|{safe}|{client_id}|{key_name}", + callback_data=f"renew_subgroup|{safe}", ) ) @@ -145,12 +150,14 @@ async def process_callback_renew_key(callback_query: CallbackQuery, session: Asy @router.callback_query(F.data.startswith("renew_subgroup|")) -async def show_tariffs_in_renew_subgroup(callback: CallbackQuery, session: AsyncSession): +async def show_tariffs_in_renew_subgroup(callback: CallbackQuery, state: FSMContext, session: AsyncSession): try: parts = callback.data.split("|") subgroup = parts[1].replace("_", " ") - client_id = parts[2] - key_name = parts[3] + + data = await state.get_data() + client_id = data.get("renew_client_id") + key_name = data.get("renew_key_name") if not client_id or not key_name: await callback.message.answer("❌ Данные для подгруппы не найдены.") @@ -201,7 +208,7 @@ async def show_tariffs_in_renew_subgroup(callback: CallbackQuery, session: Async builder.row( InlineKeyboardButton( text=f"{t['name']} — {t['price_rub']}₽", - callback_data=f"renew_plan|{t['id']}|{client_id}|{key_name}", + callback_data=f"renew_plan|{t['id']}", ) ) @@ -225,11 +232,19 @@ async def show_tariffs_in_renew_subgroup(callback: CallbackQuery, session: Async @router.callback_query(F.data.startswith("renew_plan|")) -async def process_callback_renew_plan(callback_query: CallbackQuery, session: Any): +async def process_callback_renew_plan(callback_query: CallbackQuery, state: FSMContext, session: Any): tg_id = callback_query.from_user.id - tariff_id, client_id, key_name = callback_query.data.split("|")[1:] + tariff_id = callback_query.data.split("|")[1] tariff_id = int(tariff_id) + data = await state.get_data() + client_id = data.get("renew_client_id") + key_name = data.get("renew_key_name") + + if not client_id or not key_name: + await callback_query.message.answer("❌ Данные для продления не найдены.") + return + try: tariff = await get_tariff_by_id(session, tariff_id) if not tariff or not tariff["is_active"]: @@ -435,4 +450,4 @@ async def complete_key_renewal( ) except Exception as e: - logger.error(f"[Error] Ошибка в complete_key_renewal: {e}") + logger.error(f"[Error] Ошибка в complete_key_renewal: {e}") \ No newline at end of file