首页 > 解决方案 > 机器人找不到我的一个公会成员

问题描述

我创建了一个机器人来在我的服务器中执行简单的任务。我有3个成员,只有我和我的朋友。

guild = client.guilds.cache.get("guildid")用来获取公会对象和guild.members.cache.get("userid")成员对象。这对我和我的一个朋友来说很好,但另一个没有返回。我已经三次检查了 ID 是否正确。

有谁知道为什么我的机器人无法检测到他?他已经在这里待了几个月,所以这不是新成员的问题。

标签: javascriptnode.jsdiscord.js

解决方案


正如 Elitezen 所提到的,原因可能是用户未缓存,因此您需要fetch()改为缓存。

guild.members返回具有方法的GuildMemberManagerfetch()。根据您的评论,您已经知道它返回的是承诺而不是 GuildMember,因此您需要先解决它。

您可以使用.then()

const guild = client.guilds.cache.get("guildid")
guild.members.fetch("userid")
  // the fetched member is available inside this "then"
  .then(member => {
    member.roles.add(role)
  })
  // log if there was an error
  .catch(console.error)

或者你可以使用 async/await;只需确保“父”函数是异步函数

const guild = client.guilds.cache.get("guildid")
try {
  const member = await guild.members.fetch("userid")
  member.roles.add(role)
} catch(err) {
  console.error(err)
}

推荐阅读