【问题标题】:discord.py waiting for multiple reactionsdiscord.py 等待多个反应
【发布时间】:2019-08-22 03:10:45
【问题描述】:

我正试图让机器人对添加的每个绿色复选标记反应都说些什么。我已经让机器人等待反应,但是它只允许来自一个用户的一个反应,我希望它添加一个反应,它会做一些当前代码;

    @commands.command(pass_context=True)
    async def br(self, ctx):
        msg = await self.Nao.say('Please the reaction I have added.')
        await self.Nao.add_reaction(msg, '✅')
        res = await self.Nao.wait_for_reaction('✅')

但是我希望它允许多个反应而不是一个用户。因此,对于添加的每个反应,它都会显示 {USER.MENTION} 添加了一个反应!

【问题讨论】:

    标签: python-3.x discord.py


    【解决方案1】:

    您需要将wait_for_reaction 放在一个循环中,以便它可以重复。我还添加了check 以防止机器人承认自己的反应。

    check = lambda reaction, user: client.user != user
    while True:
        res = await self.Nao.wait_for_reaction(emoji='\N{WHITE HEAVY CHECK MARK}', message=msg, check=check)
        if res:
            await self.Nao.say(f"{res.user.mention} added a reaction!")
    

    【讨论】:

    • 现在返回“discord.ext.commands.errors.CommandInvokeError: 命令引发异常:AttributeError: 'generator' object has no attribute 'user'”
    • 糟糕,我们需要等待wait_for_reaction
    • 我现在有这个工作。一旦添加了一个反应,它需要在等待另一个反应之前发送一条消息。 code
    • 您可以尝试创建一个单独的任务来执行当有人对消息做出反应时您需要执行的任何操作,以便此任务尽快返回等待反应。 docs.python.org/3/library/asyncio-task.html#creating-tasks
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2021-06-20
    • 2019-10-01
    • 2020-06-07
    • 2021-06-22
    • 2022-08-10
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多