首页 > 解决方案 > Discord.py 等待不是命令作者的用户对消息做出反应(嵌入)

问题描述

本质上,我正在尝试在作者和对嵌入做出反应的人之间创建一个 1v1 游戏。就像您要玩井字游戏一样,例如,用户将使用“!play”发起邀请,然后下一个做出反应的人将开始两者之间的比赛。

目前,我已经尝试过文档中的 wait_for ,但是只有在发出“!play”命令的用户做出反应时它才会继续,我环顾四周但有点卡住了。这是代码如下:

msg = await ctx.send(embed=invite)
await msg.add_reaction('✅')

try:
    reaction, user = await client.wait_for("reaction_add", check=lambda reaction, user: user == ctx.author and reaction.emoji in [u"\u2705"], timeout=30.0)
except asyncio.TimeoutError:
    await ctx.send("Nobody wanted to play with you :(")
else:
    if reaction.emoji == u"\u2705":
        await ctx.send("Starting game with: " + ctx.message.author.name + " & " + str(user))

命令作者做出反应时的输出:Starting game with: user & user。

其他人反应时的输出:导致超时

我已经看到了一些关于 on_reaction_add 的东西,但是我不希望超过 1 人对它做出反应

提前致谢。

标签: pythondiscord.py

解决方案


在 lambda 检查中,您当前正在检查user == ctx.author您是否只需更改为user != ctx.author


推荐阅读