Python discord.py删除带有特定ID /消息的聊天

时间:2020-05-12 18:30:47

标签: python python-3.x discord.py

我正在建立一个用于不和谐游戏的机器人,而我正在制作的第一款游戏是石头,纸,剪刀,因为我是discord.py的新手,这似乎是一种开始制作不和谐游戏的好方法。

我遇到的麻烦显然是用户可以在不同时间输入答案,因此我希望漫游器在发送后立即删除用户给出的答案。

我会使用ctx.channel.purge(limit=1),但是我不知道这是否适用于繁忙的服务器,在这些服务器中可以立即发送一条消息,而用户的响应将不会被删除。

当我右键单击聊天时,我可以看到选项copy id,并且想知道机器人是否可以访问此选项,还可以使用特定ID删除聊天。

此外,如果用户可以通过PM发送响应并能够以这种方式处理数据,那将更好,因此,如果有人可以解释如何做到这一点,那就更好了!

1 个答案:

答案 0 :(得分:3)

您可以使用wait_for()获得特定的答复。

示例:

@bot.command()
async def hello(ctx):
    await ctx.send(f"Hey {ctx.author.mention}! Send a message for me to delete!")
    
    def check(m):
        return m.author == ctx.author # you can also check m.content for specific keywords
        # if the check returns true, the message is plopped into the reply variable \/
    try:
        reply = await bot.wait_for("message", check=check, timeout=30)
                # times out after 30 seconds if no response matching the check is received
                # reply is just a message object, meaning you can get .content, .id etc.
                # this means you can also perform functions if the bot has the permissions

        await reply.delete() # this won't be necessary if you're using the bot in DMs
        await ctx.send("Message deleted!")

    except asyncio.TimeoutError: # this is the error thrown when it times out
        await ctx.send("You didn't reply in time :(")


如上面的代码中所述,您还可以获取答复的内容,因此,根据您的情况,您可以检查reply.content.lower()是否等于rock,{{1 }}等。

文档还显示了等待反应的情况,因此您可以使游戏与用户一起使用R / P / S表情符号对消息做出反应。

从给定ID中删除邮件

paper