【问题标题】:How to mention a user in a message with discord.js?如何使用 discord.js 在消息中提及用户?
【发布时间】:2020-09-06 15:42:38
【问题描述】:

我正在执行使用户静音的命令。例如,以下命令会将用户 @anon 静音 5 秒:

!mute @anon 5

我的程序监听message 事件,将用户静音并发送如下确认消息:

@anon#1234 has now been muted for 5 s

很遗憾,Discord 没有将此消息中的用户名识别为提及。如何使用msg.channel.send 功能提及特定用户?此示例包含发送确认消息的代码:

bot.on("message", msg => {
    let args = msg.content.substring(PREFIX.length).split(" ")
    let time = args[2]
    let person = msg.guild.member(msg.mentions.users.first() || msg.guild.members.fetch(args[1]))

    // muting the user here and sending confirmation message
    msg.channel.send(`@${person.user.tag} has now been muted for ${time} s`)

    setTimeout(() => {
        // unmuting the user after specified time and 
        // sending confirmation message
        msg.channel.send(`@${person.user.tag} has been unmuted.`)
    }, time * 1000);
})

此示例中不包含静音,它可以工作。消息已正确发送,但未提及用户,这意味着用户名不可点击且未突出显示。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    文档推荐this way提及用户:

    const message = `${user} has been muted`;
    

    上面的例子使用了模板字符串,因此User对象的toString方法被自动调用。不过可以手动调用:

    const message = user.toString() + "has been muted";
    

    文档说明:

    当与字符串连接时,此 [用户对象] 会自动返回用户的提及而不是用户对象。

    这意味着每次调用toString,无论是通过模板、字符串连接还是手动调用toString,都会将用户对象转换为提及。 Discord 将正确解释输出,将其突出显示并使其可点击。


    在你的情况下,你会像这样使用上面的例子:

    msg.channel.send(`${person.user} has now been muted for ${time} s`)
    setTimeout(() => {
        ...
        msg.channel.send(`${person.user} has been unmuted.`)
    }, time * 1000)
    

    【讨论】:

      【解决方案2】:

      你也可以标记用户

      `<@${id}>` // users
      `<@&${id}>` // roles
      

      当然,您需要知道用户 ID 或角色 ID 才能执行此操作。

      【讨论】:

      • 这是不必要的额外工作。 role.toString()user.toString()member.toString() 都会为您处理这个问题。或者如果你在模板字面量中使用它们,你甚至可以更懒一点,只使用${role}${user}${member} 等。这也适用于频道。
      • 这很有帮助,谢谢。在我的情况下,当需要创建消息以回复用户命令时,我手头没有用户对象。因此,在我的情况下,通过从客户端获取用户来重新构建用户对象是不必要的额外工作。
      猜你喜欢
      • 2021-02-09
      • 2020-10-13
      • 2021-06-17
      • 2021-05-12
      • 2021-09-14
      • 1970-01-01
      • 2021-07-02
      • 2020-12-21
      • 2022-01-01
      相关资源
      最近更新 更多