如何从 Discord 用户名中获取用户 ID?

时间:2021-01-13 14:13:27

标签: javascript node.js discord.js

我正在做一个小项目,我从带有表单回复的 Google 表格中获取值,然后将它们发送给特定用户。我已经从工作表中检索了用户标签 (User#0000) 并将其存储在 tag.value 中。

在填写表单时,用户选中了一个他们在服务器中的框,因此我试图通过我的服务器找到用户。

这是我已经编写的代码,但它输出错误 guild.membersundefined

const guild = client.guilds.fetch('705686666043457606')
const applicant = guild.members.find((member) => member.name == tag.value);
<块引用>

UnhandledPromiseRejectionWarning: TypeError: 无法读取属性 'find' 的未定义

2 个答案:

答案 0 :(得分:1)

在您的示例中,guild.members 未定义,因为 .fetch() returns a promise 和返回的 guild 没有 member 属性。

您要么需要使用 .then 方法来访问获取的 guild

client.guilds.fetch('705686666043457606')
  .then(guild => {
    const applicant = guild.members.cache
      .find((member) => member.user.tag === tag.value)
  })
  .catch(console.error)

...或使用异步/等待:

async yourFunction() {
  try {
    const guild = await client.guilds.fetch('705686666043457606')
    const applicant = guild.members.cache
      .find((member) => member.user.tag === tag.value)
  } catch(err) {
    console.error(err)
  }
}

请注意,您只能在 await 函数中使用 async,因此请务必通过添加 async 关键字来转换代码所在的函数。

另外,请确保您使用的是用户标签而不是用户名。通过比较 member.user.tag 方法中的 .find() 而不是 member.name 来查找成员。

答案 1 :(得分:0)

在 discord.js v12 中,members 是一个 GuildMemberManager,这意味着您必须先使用缓存。

例如:

const guild = client.guilds.fetch('705686666043457606');
const applicant = guild.members.cache.find((member) => member.name == tag.value);

.find() 可以在集合上调用,这就是 GuildMemberManager 中的 cache(即 guild)。您可以找到集合 here 的更多方法。您还可以使用 v12 中提供的 GuildManagerMember#fetch 方法。