首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量删除消息数组

批量删除消息数组
EN

Stack Overflow用户
提问于 2021-01-21 18:08:28
回答 1查看 61关注 0票数 1

我有这个命令,可以删除机器人在最后50条消息中发送的x条消息。它的代码大致是这样的(我已经删除了它,试图自己解决这个问题,所以这只是一个很接近的问题):

代码语言:javascript
复制
@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)

但我不喜欢这些信息被一个接一个地删除。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-21 18:21:36

discord.TextChannel.purge()有一个check参数,您可以将其用于此目的。实际上,删除bot的消息是该方法文档中给出的示例:

代码语言:javascript
复制
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)))

对于批量删除,有一个可以设置为Truebulk参数

代码语言:javascript
复制
await channel.purge(limit=100, bulk=True)

为了批量删除,你的机器人需要manage_messages权限。如果它没有,它将返回到单次删除。

PS:我不确定,但您可以尝试使用lambda函数进行检查:

代码语言:javascript
复制
deleted = await channel.purge(limit=100, check=lambda m: m.author==client.user)
await channel.send('Deleted {} message(s)'.format(len(deleted)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65825136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档