【问题标题】:Discord.py Send a message after user reacts to a messageDiscord.py 在用户对消息做出反应后发送消息
【发布时间】:2021-04-10 15:33:50
【问题描述】:

我正在尝试让我的不和谐机器人在对特定消息添加反应后立即发送消息。

这是我的代码:

@client.event
async def on_raw_reaction_add(message, reaction):
    message_id = message.message_id
    channel_id = 830438815595364372
    if message_id == 830439131083046952:
        if reaction.emoji == '????':
            await channel.send('OK')

我不确定自己做错了什么,当我对消息做出反应时,什么也没有发生。 提前致谢。

L.

【问题讨论】:

    标签: discord.py


    【解决方案1】:

    您的代码对我来说似乎有点混乱。您必须使用 payload 才能使其正常工作。

    看看下面的代码:

    @client.event
    async def on_raw_reaction_add(payload):
        # channel and message IDs should be integer:
        if payload.channel_id == ChannelID and payload.message_id == MessageID:
            if str(payload.emoji) == "YourReaction": # Use a string
                channel1 = client.get_channel(MessageChannel)
                await channel1.send("Test")
    

    我们做了什么?

    • 使用payload
    • 定义了频道和消息 ID
    • 定义了响应后发送消息的通道

    【讨论】:

    • 你可以用payload.emoji.name代替str(payload.emoji)
    • 使用str 只是一个较短的版本。我猜两者都很好。
    • 我认为在大多数情况下是这样,但是对于自定义表情符号,我认为使用 str() 会给出表情符号的雪花而不是表情符号的名称。
    【解决方案2】:

    注意on_raw_reaction_add() event reference 只接受一个参数payloadpayload 参数是一个RawReactionActionEvent object,它具有解决此问题的几个关键属性:message_idemoji

    RawReactionActionEvent 对象的message_id 属性可以与目标消息 ID 进行比较。 RawReactionActionEvent.emoji 是一个PartialEmoji 对象,它有一个属性name,它返回自定义表情符号的名称或默认表情符号的Unicode 表示。这可以与目标 emoji 进行比较,无论是复制粘贴的 emoji 还是 emoji 的 unicode 表示。

    最后,Client objects 有一个方法 fetch_channel,它以目标 Channel ID 作为其唯一参数并返回一个 GuildChannel 对象,该对象具有我们都知道和喜爱的 send() 方法。

    @client.event
    async def on_raw_reaction_add(payload):
        message_id = 830439131083046952
        channel_id = 830438815595364372
        if payload.message_id == message_id and payload.emoji.name == "?": # OR paylod.emoji.name == u"\U0001F44D"
            channel = await client.fetch_channel(channel_id)
            await channel.send("OK")
    

    【讨论】:

    • 非常感谢您的回复。我曾尝试过有效载荷(因为我将其用于角色选择),但谷歌搜索不断让我回到用户和反应。我已经尝试了您的解决方案,但由于某种原因,我仍然没有收到发送到频道的回复。知道可能是什么问题吗?
    • @Jacbob Lee(忘记了标签)
    • 那么,如果我没看错的话,不会有消息发送到channel_id 指定的频道,但不会引发错误?您确定机器人可以看到消息发送到的频道吗?
    • 嘿@Jacob Lee,似乎什么都没有发生(我发布了一个打印声明来检查我的终端)。我也尝试过不同的渠道。
    • 我发现了问题。我有另一个 on_raw_reaction_add (用于角色选择)功能,显然当在它下面添加表情时,我必须输入我的另一个代码块来回复。感谢您的帮助和回复!
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 2021-05-08
    • 2020-07-16
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2021-10-31
    • 2021-08-30
    相关资源
    最近更新 更多