这是我第一次在这里问一个问题,所以我可能会在某些方面陷入困境。
所以我有一个经济机器人,我希望此命令有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,因为它会检查自己的反应...我知道这是因为我通过使它在检查功能上打印用户来进行检查。
任何帮助表示赞赏!
答案 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️⃣")
我所做的就是将“消息”更改为上面代码中的其他内容,并且一切正常。