如何在Discord.js中不使用缓存检查服务器内特定用户ID是否存在?
解决Discord.js不依赖缓存检查服务器用户存在的问题
你的代码失效的核心原因:bot.users.cache.has(arg)仅检查机器人本地缓存的用户,从未发过言、未被机器人缓存过的用户不会出现在这个集合里,自然无法准确判断。
要实现不依赖缓存的服务器用户存在性验证,需直接调用Discord API获取服务器成员数据,具体用Guild的members.fetch()方法,步骤如下:
- 从消息对象
msg中获取当前命令所在的服务器(Guild)对象msg.guild - 使用
members.fetch(userId)请求API,该方法返回Promise,需用async/await或.then()处理异步逻辑 - 捕获fetch失败的场景(如用户不在服务器内),以此判定用户是否存在
修改后的示例代码:
commands.add('test3', async (arg) => { if (!arg) { return msg.channel.send('请提供用户ID'); } try { // 直接从服务器API拉取成员数据,不依赖本地缓存 await msg.guild.members.fetch(arg); msg.channel.send('1'); // 用户存在 } catch (error) { msg.channel.send('2'); // 用户不存在或ID无效 } });
关键注意事项
- 确保机器人拥有
GUILD_MEMBERS权限,同时在Discord开发者门户的Bot页面开启Server Members Intent,否则无法调用members.fetch()获取未缓存的成员 - 如果是通过@提及用户触发命令,可直接从消息提及对象提取ID:
msg.mentions.users.first()?.id,比手动输入ID更准确
内容的提问来源于stack exchange,提问作者희민TV - HeeminTV
相关产品推荐
相关产品推荐

