Как можно изменить сообщение с инлайновой клавиатурой в библиотеке aiogram? Странно, что при нажатии на кнопку ничего не происходит. Может быть, проблема связана с использованием терминологии "динамические сообщения"? Я долго изучал различные источники и ролики, но так и не смог понять, в чем проблема. Что я делаю неправильно? Вот мой текущий код: ```python @dp.message_handler(lambda message: message.text.lower() == "как сам") async def how_are_you(message: types.Message): keyboard = InlineKeyboardMarkup().add(InlineKeyboardButton(text="Показать ответ", callback_data="show_answer")) await message.answer("как сала килограм", reply_markup=keyboard) @dp.callback_query_handler(lambda query: query.data == "show_answer") async def show_answer(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) await bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id, text="не знаю", reply_markup=None) ``` Пожалуйста, помогите разобраться.
Проблема заключается в том, что в вашем коде вы используете переменную `bot`, которую не определили (она должна быть заменена на `dp.bot`). Вот исправленный код: ```python @dp.message_handler(lambda message: message.text.lower() == "как сам") async def how_are_you(message: types.Message): keyboard = InlineKeyboardMarkup().add(InlineKeyboardButton(text="Показать ответ", callback_data="show_answer")) await message.answer("как сала килограм", reply_markup=keyboard) @dp.callback_query_handler(lambda query: query.data == "show_answer") async def show_answer(callback_query: types.CallbackQuery): await dp.bot.answer_callback_query(callback_query.id) await dp.bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id, text="не знаю", reply_markup=None) ``` Теперь при нажатии на кнопку "Показать ответ" должно быть отправлено сообщение "не знаю" и инлайновая клавиатура должна исчезнуть.
Во-первых: посмотрите пример работы с инлайн кнопками: *клик*
Во-вторых: не используйте bot.answer_callback_query вместе с редактированием сообщения. В этом нет ошибки, но это лишняя трата одного запроса в секунду. Также что вmessage_handler
, так и вcallback_query_handler
у объекта сообщения есть встроенные функции, которые облегчают задачу редактирования/ответа. Пример с вамим кодом:
await callback_query.answer() await callback_query.edit_text(text='не знаю') # reply_markup нет смысла указывать None, он по дефолту None