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

Discord JS v13:如何通过用户标签获取用户内部ID

解决思路
  • 从服务器成员集合中查找,而非全局用户缓存
    原来的代码依赖client.users.cache全局缓存,但这个缓存不一定包含目标服务器的成员。直接从目标服务器的成员列表里查找更可靠,毕竟用户已经加入服务器:

    await guild.members.fetch();
    const targetMember = guild.members.cache.find(member => member.user.tag === userTag);
    if (targetMember) {
      const userID = targetMember.user.id;
      // 执行赋予频道权限的逻辑
    }
    
  • 处理缓存未命中的情况
    如果缓存里找不到,直接调用服务器成员搜索接口,不用依赖缓存:

    try {
      const searchResult = await guild.members.search({ query: userTag, limit: 1 });
      const targetMember = searchResult.first();
      if (targetMember) {
        const userID = targetMember.user.id;
        // 后续操作
      }
    } catch (err) {
      console.error("查找成员出错:", err);
    }
    
  • 检查特权网关意图和权限
    Discord.js v13开始,获取服务器成员列表需要开启Server Members Intent:

    1. 登录Discord开发者门户,进入你的Bot页面
    2. 在"Privileged Gateway Intents"下开启"Server Members Intent"
      同时确保你的Bot在服务器内拥有GUILD_MEMBERS权限,否则无法获取成员数据。
  • 尽量避免仅依赖用户标签
    虽然旧标签系统里#后缀是唯一的,但用户改名后可能出现标签重复的极端情况。如果可以,建议让用户提供用户ID,或者找到成员后结合其他信息验证,避免出错。

内容的提问来源于stack exchange,提问作者MDoom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:24:29