批量删除消息数组

Posted

技术标签:

【中文标题】批量删除消息数组【英文标题】:Bulk deleting an array of messages 【发布时间】:2021-04-25 17:43:21 【问题描述】:

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

但我不喜欢消息被一一删除。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于批量删除消息数组的主要内容,如果未能解决你的问题,请参考以下文章

批量删除导致 NSMergeConflict 核心数据

vue axios 批量删除 数组参数

怎么用java同时实现批量删除,批量修改

如果用户在 discord.js 中提供了 20 条消息(超过 14 天)进行批量删除,我如何仅删除 10 条消息

Mybatis 批量删除 或者批量查询等等

mybatis 怎么根据数组参数 来进行批量删除?