首页 > 解决方案 > 如何在命令 discord.py 中检查多个反应

问题描述

这是我第一次在这里提问,所以我可能会在某些方面搞砸。

所以我有一个经济机器人,我希望这个命令有 3 个反应,这样人们就可以告诉它该做什么。在这里,这是为了收钱、提升收入或提升他们“公司”的最大产能。

在阅读了 API 文档之后,我首先有 3 个检查函数来检查每个反应,例如这个:

(stuff)
message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

def check1(reaction, user):
    return user == ctx.message.author and str(reaction.emoji) == "1️⃣"

        try:
            reaction, user = await client.wait_for("reaction_add", timeout = 30.0, check = check1)
        except asyncio.TimeoutError:
            print("Timeout")
        else:
            (code to collect money)

但后来我意识到它会一一检查这些,所以你必须等待第一个超时,然后它才会检查第二个。所以经过一番思考,我想出了这个:

(stuff)
message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

def check(reaction, user):
    return user == ctx.message.author and user != "Robofriend#7565" and str(reaction.emoji) == "1️⃣" or "2️⃣" or "3️⃣"

try:
    reaction, user = await client.wait_for("reaction_add", timeout = 30.0, check = check)
except asyncio.TimeoutError:
    print("Timeout")
else:
    if str(reaction.emoji) == "1️⃣":
        (code to collect money)

我惊讶地发现这已经在堆栈溢出中以与我相同的方式得到了回答,但由于某种原因,我的有一个问题。当我运行命令时,检查会立即返回 True,因为它会检查自己的反应......我知道这一点是因为我通过让它在检查功能上打印用户来检查。

任何帮助表示赞赏!

标签: pythondiscorddiscord.py

解决方案


好吧,我发现了问题:

在检查功能中,为了防止机器人检查自己的反应,它检查是否 user == ctx.message.author。这里的问题是我已将机器人发送的消息设置为“消息”以添加反应:

message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

我所做的只是将“消息”更改为上面代码中的其他内容,一切正常。


推荐阅读