我做了一个小的不和谐机器人以获得一些乐趣:
我想在作者运行此命令时删除作者的消息。但这不起作用。
if message.content.startswith('Delete me.'):
async for msg in client.logs_from(message.channel, message.author):
await client.delete_message(msg)
答案 0 :(得分:2)
查看他们的docs,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
权限。
请注意,返回的消息数量是有限的,在这里我只写下一些任意的无意义限制。如果你想要准确,你必须弄清楚频道中有多少消息,然后用它作为限制。
我在最近5分钟内查找了discord API,所以我不知道是否有更有效的方法来实现它。
答案 1 :(得分:1)
您的问题出在client.logs_from(message.channel, message.author)
声明中。 logs_from
接受以下参数:logs_from(channel, limit=100, *, before=None, after=None, around=None, reverse=False)
。见the API reference。所以你有两个频道参数logs_from
只接受1.也许你打算client.logs_from(message.author)
代替?