Discord Bot Python Удаление сообщения автора - PullRequest
0 голосов
/ 17 мая 2018

Я сделал небольшой бот для разногласий для развлечения:

Я хочу, чтобы сообщения автора были удалены при запуске этой команды. Но это не работает.

if message.content.startswith('Delete me.'):
    async for msg in client.logs_from(message.channel, message.author):
            await client.delete_message(msg)

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Глядя на их документы , logs_from выбирает канал вместе с дополнительными аргументами, позволяющими фильтровать сообщения для извлечения.

Так что, если вы просто хотите удалить все сообщения,Вы можете сделать что-то вроде

async def on_message(message):
    NONSENSE_LIMIT = 999999999999
    if message.content.startswith('!delete'):
        async for log in client.logs_from(message.channel, limit=NONSENSE_LIMIT):            
            if log.author == message.author:
                await client.delete_message(log)

, что приведет к удалению всех сообщений для пользователя, который вводит эту команду.Ваш бот должен иметь разрешение manage messages для этого канала.

Обратите внимание, что количество возвращаемых сообщений ограничено, и здесь я просто записываю некоторые произвольные бессмысленные ограничения.Если вы хотите быть точным, вам нужно как-то выяснить, сколько сообщений в канале, а затем использовать это в качестве ограничения.

Я только что посмотрел Discord API за последние 5 минут, поэтому яне знаю, есть ли более эффективный способ сделать это.

0 голосов
/ 18 мая 2018

Ваша проблема в выражении client.logs_from(message.channel, message.author).logs_from принимает следующие аргументы: logs_from(channel, limit=100, *, before=None, after=None, around=None, reverse=False).См. справочник по API .Итак, у вас есть два аргумента канала, где logs_from принимает только 1. Возможно, вы намеревались вместо client.logs_from(message.author)?

...