Discord.py удаление всех сообщений в текстовом канале

Давно пытаюсь сделать очистку сообщений (все) в своем Discord боте по команде: /clear , но никак не получается. Помогите пожалуйста, слейте код очистки пожалуйста. Одна из моих попыток:

@client.event
async def on_message(message):
    if message.content.startswith('/clear'):
        tmp = await client.send_message(message.channel, 'Clearing messages...')
        async for msg in client.logs_from(message.channel):
            await client.delete_message(msg)

Что я делаю не правильно? У меня просто закрывается файл (при открытии). Помогите пожалуйста!


Ответы (2 шт):

Автор решения: Iterator

Думаю, стоит начать с пересмотра кода. Что конкретно не так с кодом вы не указали, так что скажу основные вещи исходя из самого кода.

Учитывая рейт лимиты дискорда, удалять даже 100 сообщений из канала вашим способом займет вечность. Вместо этого можно использовать метод Client.purge_from Пример:

client.purge_from(message.channel)

Документация: https://discordpy.readthedocs.io/en/async/api.html#discord.Client.purge_from

По сути, это в 100 раз увеличит скорость удаления. Но есть ли в нем вообще смысл? Почему бы просто, например, не пересоздать канал с идентичными параметрами?

P.S. рекомендую использовать последнюю версию библиотеки, а не старую из async ветки.

→ Ссылка
Автор решения: AbRa_KaDaBrIcH

channel объект имеет метод history. Только что копался в библиотеке и в discord/abc.py есть функция _purge_helper с примером использования

→ Ссылка