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

discord.js v12触发Unknown Role报错 跨服务器身份组同步功能异常

报错原因
  • 核心逻辑错误:message.member是用户在当前消息所在服务器的成员实例,只能操作该服务器内的角色。你直接用该实例添加另一个服务器的角色,接口无法识别其他服务器的角色ID,直接触发Unknown Role报错。
  • 其他可能诱因:目标服务器IDGUILDID、目标角色IDROLE-ID填写错误,机器人未加入目标服务器,或目标角色已被删除,也会触发该报错。
修复方案
  1. 先校验目标服务器、目标角色是否有效,避免空对象调用
  2. 从目标服务器中拉取对应用户的成员实例,再操作该实例授予角色
  3. 增加错误捕获逻辑,方便定位其他潜在权限/数据问题
修复后代码
client.on("message", async (message) => {
  if (message.content === "$sync") {
    // 校验当前服务器用户是否持有指定角色
    if(!message.member.roles.cache.has(`ROLEID`)){
      return message.reply(`You do not have the role`) 
    }
    // 获取目标服务器实例
    const otherguild = message.client.guilds.cache.get('GUILDID');
    if (!otherguild) return console.log('目标服务器不存在或机器人未加入');
    // 获取目标角色实例
    const role = otherguild.roles.cache.get('ROLE-ID');
    if (!role) return console.log('目标服务器中未找到对应角色');
    try {
      // 获取用户在目标服务器的成员实例
      const targetMember = await otherguild.members.fetch(message.author.id);
      // 给目标服务器的成员添加角色
      await targetMember.roles.add(role);
      console.log(`${role.name} has been added to ${message.author.username}.`);
      message.reply('角色同步成功');
    } catch (err) {
      console.error('角色添加失败:', err);
      message.reply('角色同步失败,请稍后重试');
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:04