我刚刚开始编写 Discord 机器人,但在提及某人时遇到了一个小问题。当我在任何 channel 的 Discord 上提到某人时,我希望我的机器人能够提及某人并说他有多酷,例如:
Dahkris: lul howcool @Myfriend Bot: @Myfriend is 80% cool !
(随机部分是功能性的)
由于我是js新手,我不知道这些参数是如何工作的,所以我不知道是否应该使用@member或“member.displayName”等(我尝试了不同的类型)。我已经搜索过类似的代码,但通常机器人只提及消息的作者。
bot.on('message', message => {
if (message.startsWith === 'lul howcool') {
if ( message.content === @member ) {
message.channel.send ( @member + ' is ' + ( Math.floor(Math.random() * 100) + 1 ) + "% cool ! " )
}
}
})
这段代码似乎没有任何错误,但不起作用,因为该消息从不包含“@member”(我认为)。
最佳答案
一条消息有 mentions
属性是一个 MessageMentions
,它有 2 个您可能感兴趣的属性:users
和 members
。区别在于你想用它做什么。 members
是 GuildMember
的集合而users
是user
的集合。
注意:您可以使用 varGuildMember.user
从 GuildMember
访问user
。
在这里你想提及某人。两种类型都有一个 toString()
方法,该方法返回一个提及用户的字符串。例如,如果变量 oneUser
中有某人的实例,并且执行 channel.send('Hello ' + oneUser)
,则输出将为 你好@TheUser
。
如何使用它取决于你的命令如何工作(检查是否只有一个提及,有多少个参数等)。 我将采用最简单的形式,即消息是否以 lul howcool 开头并且是否包含用户的提及。如果还有其他消息,它仍然有效。
bot.on('message', message => {
if (message.startsWith('lul howcool')) { // this is how you use startsWith https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
if (message.mentions.users.length > 0) { // check if an user is mentionned
message.mentions.users.forEach((k, v) => { // do something for each mentions
message.channel.send( v + ' is ' + ( Math.floor(Math.random() * 100) + 1 ) + "% cool ! " );
})
}
}
})
它将针对消息中的每个提及(用户提及,而不是 channel 或 Angular 色)发送一条消息。
免责声明:我无法测试代码,因此可能会出现错误。其背后的逻辑仍然是可行的。如果你想在发送消息后处理可能的错误,你不应该使用 forEach
而是使用 for 循环,因为 forEach
不适用于 Promise see this .
关于javascript - 如何让我的 Discord 机器人提及我提到的某人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56954469/