我做了一个小的不和谐机器人来找点乐子:
我希望在作者运行此命令时删除作者的消息。但这行不通。
if message.content.startswith('Delete me.'):
async for msg in client.logs_from(message.channel, message.author):
await client.delete_message(msg)
查看他们的文档,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 分钟内查找了不和谐的 API,所以我不知道是否有更有效的方法。
您的问题出在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)
?