【问题标题】:wait_for 'reaction_add' check doesn't workwait_for 'reaction_add' 检查不起作用
【发布时间】:2021-04-24 23:57:33
【问题描述】:

我正在执行一个命令,您需要使用表情符号确认某些内容。 我有一个 wait_for("reaction_add") 带有一个检查作为 lambda 函数。

我的以下代码是:

try:
    reaction, user = await self.client.wait_for("reaction_add",
    check=lambda react, usr: str(reaction.emoji) == "✅" and usr.id == ctx.author.id, timeout=60)
    print(reaction.emoji)
except asyncio.TimeoutError:
    await confirm_msg.edit(content="This message has timed out!", embed=None)

但它不会打印出反应表情符号。 没有检查代码可以正常工作,所以它与检查有关。我该如何解决?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    你可以试试这个,不用 lambda 函数:

    @client.event
    async def on_raw_reaction_add(payload):
      reaction = str(payload.emoji)
      if reaction == "✅" and usr.id == ctx.author.id:
         print('do something')
      else:
         print('something else')
    

    【讨论】:

    • 不幸的是,这对我来说不是解决方案,因为我需要根据我发布的代码 sn-p 上方的变量检查一些东西
    • 而且 ctx 变量也不存在了
    【解决方案2】:
    try:
        reaction, user = await self.client.wait_for("reaction_add",
        check=lambda reaction, user: str(reaction.emoji) == "✅" and user.id == ctx.author.id, timeout=60)
        print(reaction.emoji)
    except asyncio.TimeoutError:
        await confirm_msg.edit(content="This message has timed out!", embed=None)
    

    【讨论】:

    • lambda reaction, user**
    • 谢谢@ŁukaszKwieciński
    【解决方案3】:

    lambda 函数本质上与普通函数相同。

    你的 lambda:

    lambda react, usr: str(reaction.emoji) == "✅" and usr.id == ctx.author.id
    

    将等于定义以下函数:

    # Here we are within the wait_for(reaction_add)
    def f(react, usr):
        return str(reaction.emoji) == "✅" and user.id == ctx.author.id
    # Rest of the code
    

    问题是reaction_add 没有定义reactusr。解决您的代码的方法是这样的:

    reaction, user = await self.client.wait_for("reaction_add", check=lambda reaction,
    user: str(reaction.emoji) == "✅" and user.id == ctx.author.id, timeout=60)
    

    【讨论】:

    • “问题是reaction_add 没有定义reactusr”。它与reaction_add 的关系不大,而与 在 lambda 表达式中 中使用的错误名称有关。修改条件以使用 str(react.emoji) 也可以。
    • 嘿,这仍然不适合我。我应该把完整的命令发给你们吗,也许其他地方有问题?我对此表示怀疑,但值得一试
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2021-06-20
    • 2021-09-10
    • 1970-01-01
    • 2020-10-10
    • 2016-04-17
    相关资源
    最近更新 更多