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 的例子吗?
那么根据您提供的内容,您对该命令的预期输入是什么?标签、昵称和用户名?
我需要它同时使用昵称和用户名。因此,thomas
或 john
将返回相同的答案,因为它是同一个人。因为他的用户名是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 通过昵称获取用户的主要内容,如果未能解决你的问题,请参考以下文章