Задать вопрос
@pavelermolenko

Как сделать так, чтобы inline-кнопка не исчезала?

Написал простенького бота для тг, решил поменять команды на кнопки. Кнопка появляется под сообщением и функцию вызывает, но после нажатия сразу исчезает. Как сделать так, чтобы кнопка оставалась под сообщением, которое она редактирует и продолжала нажиматься?
mykb = InlineKeyboardMarkup(row_width=1)
mybt = InlineKeyboardButton(text="Обновить курс", callback_data="refresh")
mykb.add(mybt)

@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
    await message.reply(get_value(), reply_markup=mykb)


@dp.callback_query_handler(text="refresh")
async def send_welcome(query: types.CallbackQuery):
    await query.message.edit_text(get_value())
  • Вопрос задан
  • 433 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@teenager_python
Чтобы кнопка оставалась под сообщением, можно использовать параметр reply_markup в методе edit_text и передавать в него тот же объект InlineKeyboardMarkup, который был создан при инициализации кнопки. Также можно использовать параметр disable_notification=True, чтобы убрать уведомление о сообщении с кнопкой.

mykb = InlineKeyboardMarkup(row_width=1)
mybt = InlineKeyboardButton(text="Обновить курс", callback_data="refresh")
mykb.add(mybt)

@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
    await message.reply(get_value(), reply_markup=mykb)

@dp.callback_query_handler(text="refresh")
async def send_welcome(query: types.CallbackQuery):
    await query.message.edit_text(get_value(), reply_markup=mykb, disable_notification=True)


Также не забудьте добавить обработку ошибок в случае, если сообщение, которое нужно отредактировать, было удалено или изменено другим пользователем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы