не могу придумать способ устроить @router.callback_query при условии того что не будет F.data, а то что придумал не работает

вот нужная часть кода

@router.callback_query(F.data == "rayon")
async def vibor_tovara(callback: types.CallbackQuery, bot: Bot):
    
    items = await get_items()
    builder3 = InlineKeyboardBuilder()

    for item in items:
        builder3.row(
            types.InlineKeyboardButton(text = f"{item.name}", callback_data = f"item_{item.id}"),
            width=1
        )

    await callback.message.edit_text(
        "Выбирете товар: ",
        reply_markup=builder3.as_markup()
    )

@router.callback_query()
async def pokupka_tovara(callback: types.CallbackQuery):

    builder = InlineKeyboardBuilder()
    builder.row(
        types.InlineKeyboardButton(text = "2 ", callback_data = "zxc"),
        types.InlineKeyboardButton(text = "3 ", callback_data = "zxc"),
        width=1
    )

    await callback.message.edit_text("Сначала : ", reply_markup=builder.as_markup())

@router.callback_query(F.data == "zxc")
async def vibor_zaklada(callback: types.CallbackQuery, state: FSMContext):
    # Получаем callback_data из user_data
    user_data = await state.get_data()
    zaklad = user_data.get('zxc')

    builder2 = InlineKeyboardBuilder()
    builder2.row(
        types.InlineKeyboardButton(text = "а", callback_data = "tplink"),
        types.InlineKeyboardButton(text = "б", callback_data = "tplink"),
        types.InlineKeyboardButton(text = "в", callback_data = "tplink"),
        width=1
    )
    await callback.message.edit_text("Выбирите : ", reply_markup=builder2.as_markup())

выдает странную ошибку о том что я хочу отредактировать сообщение но ничего не меняю

aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message

Ответы (1 шт):

Автор решения: Samikague

Ошибка вам напрямую говорит что нет сообщения для изменения. Я вижу что вы используете InlineKeyboardBuilder, и как я понимаю вы не знаете как отлавливать такие динамические callback'и.

Для того чтобы их отловить можно сделать такой декоратор перед функцией pokupka_tovara:

@router.callback_query(F.data.startswith('item_'))

Он ловит все Inline-кнопки callback которых начинается на item_

→ Ссылка