首页 > 解决方案 > 批量删除消息数组

问题描述

我有这个命令可以删除机器人在最后 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)

但我不喜欢消息是如何被一一删除的。

为了尝试解决这个问题而不是清除消息,我将它们添加到一个数组中,我想我记得在文档中看到了一个批量删除命令,但是当我再次查找它时找不到它,所以有没有我可以批量删除一组消息或类似的东西来修复被删除的消息吗?

标签: pythonpython-3.xdiscorddiscord.py

解决方案


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)))

至于批量删除,bulk您可以设置一个参数True

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)))

推荐阅读