【问题标题】:How to purge messages for specific users in Discord.py如何在 Discord.py 中清除特定用户的消息
【发布时间】:2021-01-27 09:11:12
【问题描述】:

嘿,所以我试图在 discord.py 重写版本中创建一个命令,就像 >purgemessage 5 会清除发送该消息的用户的 5 条消息,但由于某种原因,它不起作用。我在回复中使用它,所以它不会显示错误;-;但这是我迄今为止所做的努力让它发挥作用!

# purges author's messages
@commands.command(name='purgemessage', aliases=['pm'])
@commands.cooldown(1, 300)
@commands.has_any_role(OwnerRole, GuildMasterRole, AdminRole, ExclusiveMemberRole)
async def purgemessage(self, ctx, amount:int, *, arg:str=None):
    msg = []
    channel = ctx.message.channel.history(limit=None)
    async for message in channel:
        if message.author == ctx.message.author:
            msg.append(message)
    await ctx.message.channel.delete_messages(msg)
    await asyncio.sleep(.5)
    botMessage = await ctx.send(f'**{amount}** messages were successfully deleted!')
    await asyncio.sleep(.5)
    await botMessage.delete()

【问题讨论】:

    标签: python discord discord.py discord.py-rewrite purge


    【解决方案1】:

    我还没有进行彻底的测试,但是我遇到的第一个错误(在重写以在 cog 之外工作以便我可以快速测试之后)是

    discord.errors.HTTPException: 400 Bad Request(错误代码:50034):您只能批量删除 14 天以下的邮件。

    此错误可能是由于您的代码不包含任何内容导致在到达 amount 后停止添加消息,并继续向后查看用户在频道中的整个历史记录。
    这很可能不是您遇到的错误,具体取决于您正在测试的频道。我强烈建议您开始使用一个可以显示错误的环境,以便我们可以更好地为您提供帮助。
    我不太了解调试您提供的代码,但这里有一些可以用更少的代码完成您想要的事情,而且我知道有效:

    channel = ctx.channel
    await channel.purge(limit=amount, check=lambda message: message.author == ctx.author)
    

    ctx.channel 是发送命令的通道,ctx.author 是发送它的人。
    channel.purgepurge limit 满足 check 函数的消息数量,其中case 是一个 lambda(在一行中定义的函数,如下所示:lambda argument: expression。lambda 将隐式返回表达式)。

    check 关键字将message 作为参数传递,因此我已适当地使用 lambda 参数命名。该表达式检查我们正在检查的消息 (message.author) 是否由命令的调用者 (ctx.author) 编写。

    即使对于超过 14 天的消息,此代码也有效,但对于大量消息确实需要一些时间。

    【讨论】:

    • 嘿,所以我看到了你写的我也做了一些研究,因为我不知道其中的一些东西,比如 lambda 所以现在我知道那是什么,但是现在当我运行命令时>purgemessage 5 它第一次工作,然后它停止工作,除非我重新加载文件,我尝试使用不同的机器人,所以我可以在 Visual Code Studio 上检查错误,但输出中没有错误,所以我有点现在是泡菜。我尝试在清除功能之外创建检查,然后将其放在那里,但这也没有用。
    • 当你说它停止工作时,你的意思是机器人结束还是清除命令没有清除?
    • 您确定问题出在 purge 命令上吗?我无法重现您的问题。
    • 使用 purge 命令在第一次尝试时有效,但在第二次或第三次或第四次尝试时无效,依此类推。如果它对你有用,那么我可能搞砸了,所以会再看一遍。
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 2020-11-22
    • 2019-06-02
    • 2017-06-30
    • 2018-01-17
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多