如何在检查 returns false 时停止减少 channel.purge 的限制?

How to stop limit of channel.purge decreasing when check returns false?

我有一个命令,用于遍历并删除机器人在频道中发送的最后 x 条消息。但是,该命令会删除最后 x 条消息中来自机器人的所有消息,而不是删除来自机器人的最后 x 条消息。有没有一种方法可以检查是否有 x 条消息(来自机器人)没有被删除,然后增加 x 的值,或者有没有办法让它一开始就不减少?

    @client.command(aliases=['bc'])
    async def BotClean(ctx, count=5):
        botCheck = (lambda message : message.author.bot)
        await ctx.channel.purge(limit = count+1, check=botCheck)

你想要完成的事情很难做到。您将无法使用 purge() 命令实现此目的,因为它会限制将要检查的消息。

您应该在 BotClean 函数中检查消息历史记录并遍历检索到的消息以查看作者是否是 bot,如果是 bot,则将其删除。

此设计出现的问题是您要检索的历史消息的数量限制,因为每次检索所有这些消息在内存方面是非常愚蠢的。

代码示例应该是这样的:

@client.command(aliases=['bc'])
async def BotClean(self, ctx, number: int):
    messages = await channel.history(limit=200).flatten()
    count = 0
    for message in messages:
        if message.author == client.user and count < number
            count += 1
            await message.delete()