我如何在命令discord.js项目中获取name / id / @

时间:2020-06-11 16:10:56

标签: discord.js

我正在使用discord.JS机器人,并且对命令有疑问。

我想创建一个!avatar命令,但是我想执行这个!avatar name / id/@。

我需要帮助。

1 个答案:

答案 0 :(得分:1)

我假设您要获取命令参数的用户对象,以便可以使用化身。
您需要根据类型做不同的事情:

  • 如果已提及任何用户(@user),则可以假定这是参数,因为您没有其他参数。您可以使用Message.mentions.users.first()
  • 获取用户对象
  • 然后您可以尝试通过首先获取所有成员,然后使用.get来获取具有与您的参数对应的ID的用户。如果参数不是id,则结果将为undefined
  • 最后,您可以在刚获取的成员中搜索其用户名与参数相对应的用户。如果失败,您也可以尝试使用昵称

这里是一个示例,假设message是带有命令的消息,而args[0]是您的参数。

// Asynchronous method (no caching)
let user = message.mentions.users.first()

if (!user) message.guild.members.fetch(members => {
  user = members.get(args[0]) || // Gets it if it's an ID
    members.find(m => m.user.username.toLowerCase() == args[0].toLowerCase()) || // This is not case-sensitive
    members.find(m => m.nickname.toLowerCase() == args[0].toLowerCase()) // Nicknames come second, you can remove this line if you don't want them
})
// Synchronous method (with caching)
let user = message.mentions.users.first() ||
  message.guild.members.cache.get(args[0]) ||
  message.guild.members.cache.find(m => m.user.username.toLowerCase() == args[0].toLowerCase()) ||
  message.guild.members.cache.find(m => m.nickname.toLowerCase() == args[0].toLowerCase())