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

Как правильно удалять и редактировать сообщения в Телеграм-Боте (telebot) на Python?

Есть многопользовательский бот написанный с помощью PyTelegramBotAPI. Нужно для поддержания "чистоты" чата с ботом удалять или редактировать сообщения самого бота и пользователя. Для удаления сообщения пользователя я использовал bot.delete_message(message.chat.id, message.message_id), а я для удаления последнего сообщения Бота я использовал bot.delete_message(message.chat.id, message.message_id - 1). То есть я просто изменял id сообщения, прибавляя или отнимая от него какое-нибудь целое число. Но при таком удалении сообщений, когда Бот используют более 2 пользователей одновременно возникает ошибка бота "Bad Request: message to delete not found" и функционирование бота для всех пользователей прекращается. Почему эта ошибка возникает, я понимаю, но пока не знаю, чем можно заменить выше написанную технологию удаления сообщений. Подскажите, пожалуйста, какие могут быть способы для этого?
  • Вопрос задан
  • 33486 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@twistfire92
Python backend developer
ну либо заносите отдельные ID сообщений в БД, либо в цикле пытайтесь удалить сообщение с помощью try except, каждый раз увеличивая смещение N в message.message_id - N
Ответ написан
jerwright
@jerwright
while True: coding()
Ошибка возникает потому, что id сообщений не меняются в зависимости от предыдущего. То есть, id следующего сообщения создаётся рандомно. Если же вы добавите bot.delete_message в одну из команд, то бот удалит сообщение с вашей командой.

Можно попробовать такой способ. Но тогда бот будет удалять каждое новое сообщение, если вы не добавите условия для удаления.
@bot.message_handler(content_types=['text'])
def chatting(message):
    bot.delete_message(message.chat.id, message.message_id)

Например, если вы хотите удалять сообщения в зависимости от их контекста, то можно сделать проверку:
@bot.message_handler(content_types=['text'])
def chatting(message):
    if message.text=='запрещённое слово':
        bot.delete_message(message.chat.id, message.message_id)
Ответ написан
Ваш ответ на вопрос

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

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