You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:45:55