Дизейблить кнопки "старых" сообщений телеграм-бота. Как?

В боте есть некий диалог, и, например мы показываем сообщение с 2мя кнопками. Юзер жмет их, ниже появляются следующие сообщения в чате. Но если юзер нажмет на кнопку не последнего (самого нижнего) поста, а другого, которое в чате выше, то эта кнопка также отрабатывает, что крашит бот иногда..И вообще это как-то плохо же?)) Возможно ли сделать так, чтобы кнопки работали только у текущей (самой последней) сцены?


Ответы (2 шт):

Автор решения: Maxim Chyorny

Генерируйте новые callback_data кнопкам в клавиатуре и отправляйте сообщение с новой клавиатурой и другими callback_data в кнопках, также вы можете удалить ранее отправленное сообщение, так пользователь вообще не сможет воспользоваться прошлыми кнопками.

Ответ на ваш вопрос из комментариев, вы можете это запросто сделать написав новый хендлер для сгенерированных callback'ов или использовать уже существующий. Чтобы не было каких либо без порядков вы можете написать впереди нового сгенерированного callback к примеру текст GENBTN:, после двух точек результат после генерации, также этот результат необходимо сохранить в базу данных с пользователем, чтобы бот понимал в тот момент когда вы или кто-то другой нажмет на кнопку нужно ли её обработать или нет, вы можете сохранить новые каллбеки кнопок в список и сохранить его текстом, но как списком с [] и использовать list(), когда будете вытаскивать список из базы данных с пользователем, затем проверять есть ли там такой каллбек и выполнять необходимую функцию, чтобы понять какую функцию должен выполнять бот при каком-либо сгенерированном каллбеки, вы можете указать диапазон с какого числа до какого числа будет генерироваться отдельный каллбек для кнопки, затем проверять если число в списке меньше чем 10 и не меньше чем 2, выполнять определенную функцию.

→ Ссылка
Автор решения: Alex

Проще всего удалять предыдущее сообщение с кнопками перед выводом нового, тогда и нажать на них будет нельзя? Если содержимое предыдущего сообщения всё еще нужно, то можно не удалять его а редактировать так чтобы остался только текст.

bot.delete_message(call.message.chat.id, call.message.id)

bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, text='some text')
    
→ Ссылка