如何让我的 Discord Bot 提及我提及的人?

Posted

技术标签:

【中文标题】如何让我的 Discord Bot 提及我提及的人?【英文标题】:How can I make my Discord Bot mention someone I mentionned? 【发布时间】:2019-11-19 02:56:40 【问题描述】:

我刚开始编写 Discord 机器人,但在提及某人时遇到了一个小问题。当我在任何频道的 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”(我认为)。

【问题讨论】:

【参考方案1】:
const user = message.mentions.users.first();
message.channel.send(`$user //code`

其中 //code 是消息文本的其余部分和代码的其余部分

【讨论】:

【参考方案2】:

您可以在字符串中使用@USER ID,例如@766369570550186036,您也可以格式化。我使用python,所以我的字符串格式是.format(),但你应该能够使用格式。 (@USER ID 也适用于所有类型的代码,因为它是一个不和谐的功能。因此,如果您要键入包含 @USER ID 的消息(将“用户 ID”替换为用户 ID,它将提及该用户))

这是一个python示例:

await ctx.send("hello <@>".format(ctx.author.id)

【讨论】:

【参考方案3】:

这是一个简单的代码 sn-p,用于评估提及踢:

文档在:https://discordjs.guide/creating-your-bot/commands-with-user-input.html#mentions

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

【讨论】:

【参考方案4】:

所以我修复了代码并对其进行了测试,它可以正常工作。我选择了不同的方法,但结果是一样的。

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

【讨论】:

【参考方案5】:

一条消息有一个mentions 属性,它是一个MessageMentions,它有两个您可能感兴趣的属性:usersmembers。不同之处在于你想用它做什么。 membersGuildMember 的集合,而 usersuser 的集合。

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

在这里你想提一个人。这两种类型都有一个toString() 方法,它返回一个提到用户的字符串。例如,如果您在变量oneUser 中有某人的实例,并且您执行channel.send('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 see this。

【讨论】:

以上是关于如何让我的 Discord Bot 提及我提及的人?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 discord.py 机器人提及我的消息中提到的某人?

discord bot 仅在提及消息时才检测消息

如何提及使用 Chat Discord.JS 发送消息的用户?

Discord.js 在欢迎时提及玩家

Discord.js 如何使用机器人提及和设置前缀作为前缀

Discord.py 如何提及/显示使用该命令的人的用户名?