Как написать код для создания сообщений с динамическим содержанием в библиотеке aiogram?

Как можно изменить сообщение с инлайновой клавиатурой в библиотеке 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)
```
Пожалуйста, помогите разобраться.
  • 19 февраля 2024 г. 10:08
Ответы на вопрос 2
Проблема заключается в том, что в вашем коде вы используете переменную `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
Похожие вопросы