diff --git a/handlers/tariffs/addons/key_addons_main.py b/handlers/tariffs/addons/key_addons_main.py index ed00b46c..c3b9a862 100644 --- a/handlers/tariffs/addons/key_addons_main.py +++ b/handlers/tariffs/addons/key_addons_main.py @@ -273,11 +273,11 @@ async def render_addons_screen(callback: CallbackQuery, state: FSMContext, sessi row.append(traffic_buttons[i]) builder.row(*row) elif device_buttons: - for button in device_buttons: - builder.row(button) + for i in range(0, len(device_buttons), 2): + builder.row(*device_buttons[i : i + 2]) elif traffic_buttons: - for button in traffic_buttons: - builder.row(button) + for i in range(0, len(traffic_buttons), 2): + builder.row(*traffic_buttons[i : i + 2]) if allow_downgrade and (devices_downgrade or traffic_downgrade): builder.row( diff --git a/handlers/tariffs/addons/key_addons_pack.py b/handlers/tariffs/addons/key_addons_pack.py index 67dd10a9..81da9790 100644 --- a/handlers/tariffs/addons/key_addons_pack.py +++ b/handlers/tariffs/addons/key_addons_pack.py @@ -359,11 +359,11 @@ async def render_addons_screen(callback: CallbackQuery, state: FSMContext, sessi row.append(traffic_buttons[i]) builder.row(*row) elif device_buttons: - for button in device_buttons: - builder.row(button) + for i in range(0, len(device_buttons), 2): + builder.row(*device_buttons[i : i + 2]) elif traffic_buttons: - for button in traffic_buttons: - builder.row(button) + for i in range(0, len(traffic_buttons), 2): + builder.row(*traffic_buttons[i : i + 2]) builder.row( InlineKeyboardButton( diff --git a/handlers/tariffs/buy/key_tariffs.py b/handlers/tariffs/buy/key_tariffs.py index 686349c3..b78d8419 100644 --- a/handlers/tariffs/buy/key_tariffs.py +++ b/handlers/tariffs/buy/key_tariffs.py @@ -498,11 +498,11 @@ async def render_user_config_screen( row.append(traffic_buttons[i]) builder.row(*row) elif device_buttons: - for b in device_buttons: - builder.row(b) + for i in range(0, len(device_buttons), 2): + builder.row(*device_buttons[i : i + 2]) elif traffic_buttons: - for b in traffic_buttons: - builder.row(b) + for i in range(0, len(traffic_buttons), 2): + builder.row(*traffic_buttons[i : i + 2]) is_renew_mode = data.get("renew_mode") == "renew" confirm_prefix = "cfg_renew_confirm" if is_renew_mode else "cfg_user_confirm" @@ -852,6 +852,11 @@ async def handle_user_devices_choice(callback: CallbackQuery, state: FSMContext, _, _tariff_id_str, devices_str = callback.data.split("|", 2) devices = int(devices_str) + current = (await state.get_data()).get("config_selected_device_limit") + if current is not None and int(current) == devices: + await callback.answer() + return + await state.update_data(config_selected_device_limit=devices) await render_user_config_screen(callback, state, session) @@ -865,6 +870,11 @@ async def handle_user_traffic_choice(callback: CallbackQuery, state: FSMContext, _, _tariff_id_str, traffic_str = callback.data.split("|", 2) traffic = int(traffic_str) + current = (await state.get_data()).get("config_selected_traffic_gb") + if current is not None and int(current) == traffic: + await callback.answer() + return + await state.update_data(config_selected_traffic_gb=traffic) await render_user_config_screen(callback, state, session=session)