我有这个命令,可以删除机器人在最后50条消息中发送的x条消息。它的代码大致是这样的(我已经删除了它,试图自己解决这个问题,所以这只是一个很接近的问题):
@client.command(aliases=['bc'])
async def BotClean(ctx, count=5):
messages = await ctx.channel.history(limit=50).flatten()
for message in messages:
if (message.author.bot):
ctx.channel.purge(message)但我不喜欢这些信息被一个接一个地删除。
为了解决这个问题而不是清除消息,我将它们添加到一个数组中,我想我记得在文档中看到了一个批量删除命令,但当我再次查找它时却找不到它,所以有没有办法批量删除一个消息数组或类似的东西,以修复被逐个删除的消息?
发布于 2021-01-21 18:21:36
discord.TextChannel.purge()有一个check参数,您可以将其用于此目的。实际上,删除bot的消息是该方法文档中给出的示例:
def is_me(m):
return m.author == client.user
deleted = await channel.purge(limit=100, check=is_me)
await channel.send('Deleted {} message(s)'.format(len(deleted)))对于批量删除,有一个可以设置为True的bulk参数
await channel.purge(limit=100, bulk=True)为了批量删除,你的机器人需要manage_messages权限。如果它没有,它将返回到单次删除。
PS:我不确定,但您可以尝试使用lambda函数进行检查:
deleted = await channel.purge(limit=100, check=lambda m: m.author==client.user)
await channel.send('Deleted {} message(s)'.format(len(deleted)))https://stackoverflow.com/questions/65825136
复制相似问题