Discord.py 在用户对消息做出反应后发送消息

时间:2021-04-10 15:33:50

标签: discord.py

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

这是我的代码:

@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.

2 个答案:

答案 0 :(得分:2)

我觉得你的代码有点乱。您必须使用 create table 才能使其正常工作。

看看下面的代码:

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")
  • 定义频道和消息 ID
  • 定义了反应后发送消息的通道

答案 1 :(得分:1)

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

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

最后,Client objects 有一个方法 fetch_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")