我正在做一个小项目,我从带有表单回复的 Google 表格中获取值,然后将它们发送给特定用户。我已经从工作表中检索了用户标签 (User#0000
) 并将其存储在 tag.value
中。
在填写表单时,用户选中了一个他们在服务器中的框,因此我试图通过我的服务器找到用户。
这是我已经编写的代码,但它输出错误 guild.members
是 undefined
:
const guild = client.guilds.fetch('705686666043457606')
const applicant = guild.members.find((member) => member.name == tag.value);
<块引用>
UnhandledPromiseRejectionWarning: TypeError: 无法读取属性 'find' 的未定义
答案 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 方法。