не могу придумать способ устроить @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_