【问题标题】:How do I DM a user when a reaction is added to a message?当对消息添加反应时,我如何向用户发送消息?
【发布时间】:2021-10-10 01:34:44
【问题描述】:

将用户的反应与向他们发送 DM 相结合让我很难过。

我的项目通过在底部添加一个反应的嵌入来工作,当用户点击表情符号时,它会向用户发送一组说明(现在我只是使用“测试”这个词)。

这是我目前所拥有的:

@client.event
async def on_message(message):
    if message.content.startswith('.add'):
        embed = discord.Embed(title="Embed Title", color=0x6610f2)
        embed.add_field(name="__**Steps to get DM'd:**__", value=""" 
        • Step 1
        • Step 2
        • Step 3
        • Step 4
        • Step 5
        """)
        
        msg = await message.channel.send(embed=embed)
        await msg.add_reaction('\U0001F91D')

@client.event
async def on_raw_reaction_add(payload):
    if payload.user_id == client.user.id:
        return

    if str(payload.emoji) == '\U0001F91D':
        channel = await client.fetch_channel(payload.channel_id)
        message = await channel.fetch_message(payload.message_id)

        await message.author.send('Test')

我只是不确定如何在 on_message() 函数之外获取用户 ID,因为我知道如何使 on_reaction_add 工作的唯一方法是在它自己的客户端事件中。我什至不确定我是否正确处理了 DM 用户方面。

使用 Discord.py 的异步版本

【问题讨论】:

  • 用你自己的话说,你有if payload.user_id == client.user.id,那是为了什么?它是如何工作的?你能想出一种方法来利用这些信息来解决你的问题吗?
  • 如果对消息做出反应的用户是机器人,则返回。我想我可以在payload.user_id 控制DM 功能的地方做一些事情,因为它应该有做出反应的人的用户ID。你对这个想法有什么看法? @KarlKnechtel
  • 别问我;询问代码 - 尝试一下。

标签: python discord.py


【解决方案1】:

在您的payload 中,您应该已经获得了一个可以使用的discord.Member 对象。尝试类似

@client.event
async def on_raw_reaction_add(payload):
    if str(payload.emoji) == "\U0001F91D":
        member = payload.member
        await member.send('This is a DM to you!')

由于您的代码不检查消息 ID,因此对任何消息(不仅仅是您发送的消息)的反应都会导致响应。为防止这种情况,您可以检查 payload.message_id 是否与您的机器人消息的 id 匹配(您可以在发送消息时将其存储在某处)。

您还试图阻止对机器人的初始反应做出响应。我建议不要检查payload.user_id,而是

if member.bot:
    return

这会阻止对任何对您的消息做出反应的机器人做出响应,包括您自己的。

【讨论】:

  • 非常感谢!完美地工作。我添加了一个and 语句以确保它只适用于一条消息。 if str(payload.emoji) == '\U0001F91D' and payload.message_id == insert message id here:,效果也很好。
猜你喜欢
  • 2020-02-27
  • 2021-05-08
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2021-01-18
  • 1970-01-01
相关资源
最近更新 更多