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

Как отловить удалённое сообщение в телеграм?

В дискорде есть боты которые при написании !clear 10 удаляют последние 10 сообщений, хочу сделать так же в телеграм, но телеграм сохраняет удалённые id сообщений
id 100 это сообщение команды(сразу удаляется)
id 90-99 Нужно удалить, но 93,94, 95 уже удаленны, как боту отловить удалённые сообщения и удалить существующие сообщения 87, 88, 89

@bot.message_handler(commands=["clear"])
def clear(m):
        num_clear = int(m.text.split(maxsplit=1)[1])
        try:
            if num_clear <= 15:
                for i in range(0, num_clear):
                    m_id = m.message_id - i
                    bot.delete_message(m.chat.id, m_id)
                    print(m_id)
        except:
#Не приятно видеть огромные ошибки(телеграма, просто выводит 1)
            print(1)
  • Вопрос задан
  • 504 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
Winsik
@Winsik
сис.админ, недопрограммист :)
deleteMessage

Use this method to delete a message, including service messages, with the following limitations:
- A message can only be deleted if it was sent less than 48 hours ago.
- A dice message in a private chat can only be deleted if it was sent more than 24 hours ago.
- Bots can delete outgoing messages in private chats, groups, and supergroups.
- Bots can delete incoming messages in private chats.
- Bots granted can_post_messages permissions can delete outgoing messages in channels.
- If the bot is an administrator of a group, it can delete any message there.
- If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there.

Returns True on success.
Ответ написан
Комментировать
@Redeve
Веб-макаке не хватит и 640гБ
В цикле отлавливайте исключения и делайте отсчет только при успешном удалении
i = 0
while i < num_clear:
  try:
    bot.delete_message(m.chat.id, m.message_id - i)
  except ExceptionName as e:
    print(e)
  else:
    i += 1

Но только аккуратно, так можно легко в бесконечный цикл уйти,если метод delete_message постоянно будет выкидывать ошибку
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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