Discord.js 通过昵称获取用户

Posted

技术标签:

【中文标题】Discord.js 通过昵称获取用户【英文标题】:Discord.js get user by nickname 【发布时间】:2021-07-30 04:59:48 【问题描述】:

我很难搞清楚

    可以通过 discord.js npm 包通过用户的昵称找到用户。 如何通过昵称查询用户?

我已经尝试了几件事,但没有返回昵称,我无法弄清楚他们的文档是如何工作的。

到目前为止,我还不知道该怎么做。

我已经在我的代码中这样做了。

const  Client  = require('discord.js')
const discordClient = new Client()

discordClient.on('message', message => 
  if (message.author.bot) return
  if (message.content.startsWith('!gpwarn')) 
    // The command is something like '!gpwarn thomas'.
    // If his nick name is thomas but his username is john it doesn't work.
)

【问题讨论】:

也许尝试找到 nickname 的成员缓存等于提供的参数 我试过Guild,但似乎不符合要求。你有@DarylGill 的例子吗? 那么根据您提供的内容,您对该命令的预期输入是什么?标签、昵称和用户名? 我需要它同时使用昵称和用户名。因此,thomasjohn 将返回相同的答案,因为它是同一个人。因为他的用户名是john,这很容易,但昵称thomas 更难。 【参考方案1】:

是的,而且非常简单。这样做:

const user = client.users.cache.find(user => user.username == "The user's name");

参考:

UserManager

【讨论】:

对不起,但这并不能解决我的问题。我在聊天中得到了用户提供的昵称。我必须以某种方式将其与用户名匹配。 所以你想用mention 获得user 不,不提。用户会写一些类似的东西; user1: 50, user2: 11, user3: 123 当我的代码查看它时,我必须检查名称 (user1-3) 是否与服务器上某个人的用户名或昵称匹配。【参考方案2】:

为了满足您的确切要求,您可以在公会成员缓存中搜索提供的昵称。但是,我个人建议为此使用直接标记或 UserID,因为多个人可以在服务器中拥有相同的昵称。

const U = message.guild.members.cache.find(E => E.nickname === 'NICKNAME')

按标签获取:

 const U = message.mentions.members.first()

通过 ID 获取:

 const U = message.guild.members.cache.find(U => U.id === 'IDHERE')

【讨论】:

谢谢,但问题是,我将为机器人提供大约 1 个列表。 150 人,最后有一个数字。我不想标记每一个。 const U = message.guild.members.cache.find(E => E.nickname === 'NICKNAME') 为我返回 undefined 即使我知道昵称在服务器上。 检查您传递的参数是否正确【参考方案3】:

首先您需要确定昵称参数,您可以通过拆分、切片和加入message.content 来完成此操作。


接下来我建议你使用GuildMemberManager#fetch()从公会获取所有GuildMembers,这样你就不会遇到成员被取消缓存的错误。

处理承诺使用 async/await 并使用 Collection#find() 返回成员

const  Client  = require('discord.js')
const discordClient = new Client()

discordClient.on('message', async message => 
  if (message.author.bot) return
  if (message.content.startsWith('!gpwarn')) 
    // Returns all of the text after !gpwarn
    const query = message.content.split(' ').slice(1).join(' ').toLowerCase()
    const members = await message.guild.members.fetch()
    const memberToWarn = members.find(m => m.nickname.toLowerCase() === query)
    if (!memberToWarn) // No member found error
    console.log(memberToWarn) // [GuildMember]
  
)

【讨论】:

这看起来很有希望,但我确实在运行 await messages.guild.members.fetch() 时遇到了超时。 如果您尚未在开发者门户中启用公会成员意图,请尝试

以上是关于Discord.js 通过昵称获取用户的主要内容,如果未能解决你的问题,请参考以下文章

在 discord.js 中更改关注者的昵称

更改用户昵称(discord.js)[重复]

Discord.js 将数组中的 ID 替换为与该 ID 匹配的用户的昵称?

discord.js 更改服务器所有者的昵称

无法让 Discord.js 在命令中提及用户

它不会让我更改昵称 discord.js