Python 3.x Discord.py重写命令中的反应处理

Python 3.x Discord.py重写命令中的反应处理,python-3.x,discord.py-rewrite,Python 3.x,Discord.py Rewrite,是否有一种方法可以捕获命令的反应。我已经发出了一个删除频道的命令,但我想问用户是否确定使用该命令。我想防止其他人对此消息做出反应(只有上下文作者应该做出反应) 到目前为止,我发现只需使用\u reaction\u add()上的,但这无法检测发送命令的用户。我只想在消息作者是对消息做出反应的人时更新命令,其他人请忽略它 更新:我发现wait_for()正是我想要的,但现在的问题是如何检查是否设置了错误的反应?(即,如果我按下第二个反应,则删除该消息) 这里有一个函数,我用来为等待生成检查函数:

是否有一种方法可以捕获命令的反应。我已经发出了一个删除频道的命令,但我想问用户是否确定使用该命令。我想防止其他人对此消息做出反应(只有上下文作者应该做出反应)

到目前为止,我发现只需使用\u reaction\u add()上的
,但这无法检测发送命令的用户。我只想在消息作者是对消息做出反应的人时更新命令,其他人请忽略它

更新:我发现
wait_for()
正是我想要的,但现在的问题是如何检查是否设置了错误的反应?(即,如果我按下第二个反应,则删除该消息)


这里有一个函数,我用来为
等待
生成
检查
函数:

from collections.abc import Sequence

def make_sequence(seq):
    if seq is None:
        return ()
    if isinstance(seq, Sequence) and not isinstance(seq, str):
        return seq
    else:
        return (seq,)

def reaction_check(message=None, emoji=None, author=None, ignore_bot=True):
    message = make_sequence(message)
    message = tuple(m.id for m in message)
    emoji = make_sequence(emoji)
    author = make_sequence(author)
    def check(reaction, user):
        if ignore_bot and user.bot:
            return False
        if message and reaction.message.id not in message:
            return False
        if emoji and reaction.emoji not in emoji:
            return False
        if author and user not in author:
            return False
        return True
    return check
我们可以传递我们想要等待的消息、用户和表情符号,它将自动忽略所有其他内容

check = reaction_check(message=msg, author=ctx.author, emoji=(emoji1, emoji2))
try: 
    reaction, user = await self.client.wait_for('reaction_add', timeout=10.0, check=check)
    if reaction.emoji == emoji1:
        # emoji1 logic
    elif reaction.emoji == emoji2:
        # emoji2 logic
except TimeoutError:
    # timeout logic

回答得很好,非常感谢。但是有一个问题,我应该为
make_sequence()
包含什么,因为它在我的bot中似乎是“未定义”的哈哈。这是我的错,我在复制主函数时没有复制helper函数。
check = reaction_check(message=msg, author=ctx.author, emoji=(emoji1, emoji2))
try: 
    reaction, user = await self.client.wait_for('reaction_add', timeout=10.0, check=check)
    if reaction.emoji == emoji1:
        # emoji1 logic
    elif reaction.emoji == emoji2:
        # emoji2 logic
except TimeoutError:
    # timeout logic