我刚开始编写一个Discord机器人,我在提到某人时遇到了一个小问题。我想让我的机器人在任何频道中提到某人,并说他有多酷,例如:
Dahkris: lul howcool @Myfriend
Bot: @Myfriend is 80% cool !
(随机部分是功能性的)
因为我是js的新手,我不知道这些参数是如何工作的,所以我不知道我应该使用@成员还是“member.display名称”等等(我尝试了不同的类型)。我已经搜索过类似的代码,但机器人通常只提到消息的作者。
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”(我想)。
消息有一个提及
属性,它是一个消息提及
属性,它有两个属性可能会引起您的兴趣:用户
和成员
。区别在于你想用它做什么members
是GuildMember
的集合,users
是user
的集合。
注意:您可以使用varGuildMember从
。GuildMember
访问user
。用户
这里你想提一个人。这两种类型都有一个toString()
方法,该方法返回一个提及用户的字符串。例如,如果您在变量oneUser
中有某人的实例,并且确实有频道。发送('Hello'oneUser)
,输出将是Hello@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 ! " );
})
}
}
})
它将为消息中的每个提及(用户提及,而不是频道或角色)发送消息。
免责声明:我无法测试代码,因此可能存在错误。其背后的逻辑仍然可行。如果要处理发送消息后可能出现的错误,不应使用forEach
,而应使用for循环,因为forEach
不适用于promise。请参见此。
您可以在字符串中使用@USER ID
,例如@766369570550186036
您还可以格式化。我使用python,所以字符串的格式是{}。format()
,但您应该能够使用一种格式来编辑。(另外,@USER-ID
这一功能适用于所有类型的代码,因为它是一个不协调的功能。因此,如果要键入包含@USER-ID
的消息(将“USER-ID”替换为users-ID,它将提到该用户))
下面是一个python的例子:
await ctx.send("hello <@{}>".format(ctx.author.id)
所以我修复了代码并测试了它,它工作了。我选择了不同的方法,但结果是一样的。
client.on('message', async message => {
if (message.author.bot) return;
let mention = message.mentions.users.first()
if (msg.startsWith(".pfx howcool") && mention) {
message.channel.send(`${mention} is ${Math.floor(Math.random() * 100) + 1}% cool!`)
} else if (message.content === ".pfx howcool"){
message.channel.send(`You are ${Math.floor(Math.random() * 100) + 1}% cool!`)
}});