← Все вопросы
Как удалять сообщения Discord-ботом (команда очистки чата)?
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).
Ваш ответ
, чтобы ответить на вопрос.