如何在使用discord.js的消息中提及用户?

时间:2020-05-20 10:03:12

标签: javascript discord.js

我正在实现使用户静音的命令。例如,以下命令将使用户@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);
})

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

2 个答案:

答案 0 :(得分:4)

文档建议this way提及用户:

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

上面的示例使用模板字符串,因此会自动调用toString对象的User方法。可以手动调用它:

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

文档指出:

与字符串连接时,这将自动返回用户的提及,而不是User对象。

这意味着每次通过模板,字符串连接或手动调用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)

答案 1 :(得分:-1)

您还可以通过

标记用户
`<@${id}>` // users
`<@&${id}>` // roles

当然,您需要知道用户ID或角色ID。