Как можно изменить сообщение с инлайновой клавиатурой в библиотеке 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