在 on_reaction_add 事件中使用 CTX -- Discord.py

时间:2021-02-20 03:44:45

标签: discord.py

async def on_reaction_add(reaction, user):
    emoji = reaction.emoji
    if emoji == "?":
    await user.channel.send("HI")

我在使用 user 时遇到了问题。 我想在这里与 ctx 一起使用,例如 ctx.channel.send。 但是这里也出现了如何使用ctx的错误?

2 个答案:

答案 0 :(得分:1)

在这种情况下,最好使用 on_reaction_add 命令事件而不是使用 wait_for 事件。这意味着该事件只能触发一次,并且只能在调用命令时触发。但是,对于您当前的事件,这允许任何人对带有该表情符号的消息做出反应,机器人会做出响应。

通过使用 client.wait_for("reaction_add"),您可以控制用户何时可以对表情符号做出反应。您还可以添加检查,这意味着只有用户才能使用对机器人发送的消息的反应。可以传递其他参数,但这取决于您想要如何设置它的样式。

在下面的示例中,用户可以调用命令,然后要求做出反应。机器人已经添加了这些反应,所以用户只需要做出反应。 wait_for 属性将等待用户对指定的表情符号做出反应,您的命令将发送一条消息。

@client.command()
async def react(ctx):
    message = await ctx.send('React to this message!')

    mail = '?'
    post = '?'

    await message.add_reaction(mail)
    await message.add_reaction(post)

    def check(reaction, user):
        return user == ctx.author and str(
            reaction.emoji) in [mail, post]

    member = ctx.author

    while True:
        try:
            reaction, user = await client.wait_for("reaction_add", timeout=10.0, check=check)

            if str(reaction.emoji) == mail:
                await ctx.send('Hi you just received')


            if str(reaction.emoji) == post:
                await ctx.send('Hi you just posted...')

答案 1 :(得分:0)

您需要使用 reaction.message.channel.send

async def on_reaction_add(reaction, user):
    emoji = reaction.emoji
    if str(emoji) == "?": await reaction.message.channel.send("HI")