Javascript 我怎样才能让我的不和不提我提到的人?

Javascript 我怎样才能让我的不和不提我提到的人?,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,我刚开始编写一个Discord机器人,我在提到某人时遇到了一个小问题。我想让我的机器人在任何频道中提到某人,并说他有多酷,例如: (随机部分是功能性的) 因为我是js新手,我不知道这些参数是如何工作的,所以我不知道我应该使用@member还是“member.displayName”等等(我尝试了不同的类型)。我已经搜索过类似的代码,但是机器人通常只提到消息的作者 bot.on('message', message => { if (message.startsWith === 'l

我刚开始编写一个Discord机器人,我在提到某人时遇到了一个小问题。我想让我的机器人在任何频道中提到某人,并说他有多酷,例如:

(随机部分是功能性的)

因为我是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”(我想)。

消息有一个属性,它是
消息提及的
,它有两个属性,您可能会感兴趣:和。区别在于你想用它做什么<代码>成员
是的集合,而
用户
是的集合

注意:您可以使用
varGuildMember.user
GuildMember
访问
user

这里你想提一个人。这两种类型都有一个
toString()
方法,该方法返回一个提及用户的字符串。例如,如果变量
oneUser
中有某人的实例,并且您执行
channel.send('Hello'+oneUser)
,则输出将是
Hello@TheUser

如何使用它将取决于您的命令的工作方式(检查是否只有一个选项,有多少个参数,等等)。 我将使用最简单的形式,即如果消息以
lul howcool
开头,并且包含用户的提及。如果还有其他消息,它仍然有效

bot.on('message',message=>{
if(message.startsWith('lul howcool'){//这就是使用startsWith的方式https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
如果(message.references.users.length>0){//检查是否提及了用户
message.indications.users.forEach((k,v)=>{//为每次提及做点什么
message.channel.send(v++是'+(Math.floor(Math.random()*100)+1)+%cool!');
})
}
}
})
它将为消息中的每个提及(用户提及,而不是频道或角色)发送消息


免责声明:我无法测试代码,因此可能存在错误。其背后的逻辑仍然可行。如果您想在发送消息后处理可能出现的错误,您不应该使用forEach,而应该使用for循环,因为forEach不符合承诺。

所以我修复了代码并测试了它,它就工作了。我选择了不同的方法,但结果是一样的

 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!`)
}});

下面是一个简单的代码段,用于计算提踢:

文件载于:


您可以在字符串中使用
@USER ID
,例如
@766369570550186036
您还可以格式化。我使用python,所以字符串的格式是
{}.format()
,但您应该能够使用一种格式来创建字符串。(另外,
@USER-ID
这一功能适用于所有类型的代码,因为它是一个不协调的功能。因此,如果要键入包含
@USER-ID
的消息(将“USER-ID”替换为users-ID,它将提到该用户))

下面是一个python示例:

等待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!`)
}});
else if (command === 'kick') {
    // grab the "first" mentioned user from the message
    // this will return a `User` object, just like `message.author`
    const taggedUser = message.mentions.users.first();
    message.channel.send(`You wanted to kick: ${taggedUser.username}`);
}
const user = message.mentions.users.first();
message.channel.send(`${user} //code`