提问者:小点点

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


我刚开始编写一个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”(我想)。


共3个答案

匿名用户

消息有一个提及属性,它是一个消息提及属性,它有两个属性可能会引起您的兴趣:用户成员。区别在于你想用它做什么membersGuildMember的集合,usersuser的集合。

注意:您可以使用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!`)
}});