Discord.js V13 如何检测指定用户ID是否存在于当前guild中
问题排查与解决方案
错误原因
- 异步方法未等待执行:
client.guilds.fetch()是异步API,调用后返回的是Promise对象而非Guild实例,你当前代码没有使用await等待异步请求完成,直接调用成员判断方法无法得到正确结果。 - API版本不匹配:Discord.js v13 已经废弃了 v12 及更早版本使用的
Guild.member()方法,该API在v13版本中不存在,需要改用成员管理器的对应方法实现判断逻辑。 - 权限配置遗漏:Discord.js v13 要求你在Discord开发者门户开启对应Bot的
GUILD_MEMBERS网关意图,同时初始化Client时要在intents配置项中添加该意图,否则无法正常拉取服务器成员数据。
修复后代码示例
// 注意该代码需要放在被async修饰的函数内才能使用await关键字 const server = await client.guilds.fetch(message.guild.id); // 优先从本地缓存读取成员,缓存不存在时发起请求拉取 const targetMember = server.members.cache.get(args[0]) ?? await server.members.fetch(args[0]).catch(() => null); if (!targetMember) return commandFailed('a user with this ID does not exist');
内容的提问来源于stack exchange,提问作者Ralkey
相关产品推荐
相关产品推荐

