Отчистка чата телеграмм бот aiogram

Рейтинг: -1Ответов: 2Опубликовано: 01.07.2023

Пожалуйста помогите сделать то что после команды /clear отчищался весь чат

Ответы

▲ 1

В Telegram есть ограничение, которое не позволяет ботам напрямую удалять историю чата. Можно через сохранения id сообщений, которые необходимо удалить, в базу данных. Затем бот может удалить сообщения через цикл запросов.


Пример удаления всех сообщений, через цикл (aiogram 3.x):

from aiogram.exceptions import TelegramBadRequest

@router.message(Command("clear"))
async def cmd_clear(message: Message, bot: Bot) -> None:
    try:
        # Все сообщения, начиная с текущего и до первого (message_id = 0)
        for i in range(message.message_id, 0, -1):
            await bot.delete_message(message.from_user.id, i)
    except TelegramBadRequest as ex:
        # Если сообщение не найдено (уже удалено или не существует), 
        # код ошибки будет "Bad Request: message to delete not found"
        if ex.message == "Bad Request: message to delete not found":
            print("Все сообщения удалены")

▲ 0
  1. Создаете любую БД, которая вам нравится
  2. Записываете в нее id всех отправляемых/получаемых сообщений
  3. Пишите обычный хэндлер для команды /clear, который будет брать id сообщений из БД и удалять их с помощью bot.delete_message(message_id)
  4. Очищаете БД

но имейте ввиду, что:

  • Сообщение можно удалить только в том случае, если оно было отправлено менее 48 часов назад.
  • Служебные сообщения о создании супергруппы, канала или темы форума не могут быть удалены.
  • Сообщение с игральными костями в приватном чате может быть удалено только в том случае, если оно было отправлено более 24 часов назад.
  • Боты могут удалять исходящие сообщения в приватных чатах, группах и супергруппах.
  • Боты могут удалять входящие сообщения в приватных чатах.
  • Боты, получившие can_post_messages разрешения, могут удалять исходящие сообщения в каналах.
  • Если бот является администратором группы, он может удалить там любое сообщение.
  • Если у бота есть разрешение на can_delete_messages в супергруппе или канале, он может удалить там любое сообщение.

(взято из документации)