如何在命令discord.py

时间:2020-03-27 21:59:44

标签: python discord 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,因为它会检查自己的反应...我知道这是因为我通过使它在检查功能上打印用户来进行检查。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

好了,我发现了问题:

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

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

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