Отчистка чата телеграмм бот aiogram
Пожалуйста помогите сделать то что после команды /clear отчищался весь чат
Ответы (2 шт):
Автор решения: ZxNuClear
→ Ссылка
- Создаете любую БД, которая вам нравится
- Записываете в нее
idвсех отправляемых/получаемых сообщений - Пишите обычный хэндлер для команды
/clear, который будет братьidсообщений из БД и удалять их с помощьюbot.delete_message(message_id) - Очищаете БД
но имейте ввиду, что:
- Сообщение можно удалить только в том случае, если оно было отправлено менее 48 часов назад.
- Служебные сообщения о создании супергруппы, канала или темы форума не могут быть удалены.
- Сообщение с игральными костями в приватном чате может быть удалено только в том случае, если оно было отправлено более 24 часов назад.
- Боты могут удалять исходящие сообщения в приватных чатах, группах и супергруппах.
- Боты могут удалять входящие сообщения в приватных чатах.
- Боты, получившие
can_post_messagesразрешения, могут удалять исходящие сообщения в каналах. - Если бот является администратором группы, он может удалить там любое сообщение.
- Если у бота есть разрешение на
can_delete_messagesв супергруппе или канале, он может удалить там любое сообщение.
(взято из документации)
Автор решения: ByteBlunder
→ Ссылка
В 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("Все сообщения удалены")