← Все вопросы

Как удалять сообщения Discord-ботом (команда очистки чата)?

Задан 14 месяцев назад1.1к просмотров2 ответа
6

Хочу команду !clear 10, чтобы бот удалял последние N сообщений в канале для модерации. Как это сделать в discord.py и почему бот не может удалить старые сообщения?

2 ответа

10
✓ Принятый ответ — помог автору

Для массового удаления есть channel.purge:

@bot.command()
@commands.has_permissions(manage_messages=True)
async def clear(ctx, количество: int):
    deleted = await ctx.channel.purge(limit=количество + 1)  # +1 — само сообщение-команда
    await ctx.send(f'Удалено {len(deleted) - 1} сообщений.', delete_after=5)

У бота должно быть право Manage Messages, а у вызвавшего — тоже (через декоратор). delete_after=5 уберёт само уведомление через 5 секунд.

Про старые сообщения: Discord не даёт массово удалять сообщения старше 14 дней — это ограничение самого API, не бага. Такие придётся удалять по одному (await message.delete()), что медленно и упирается в лимиты.

3

Осторожнее с limit без верхней границы — если кто-то напишет !clear 100000, бот будет долго чистить и может упереться в rate limit. Имеет смысл ограничить, например min(количество, 100).

Ваш ответ

, чтобы ответить на вопрос.