discord.js报错:Cannot read property 'roles' of undefined 跨服赋角色问题
问题原因与修复方法
直接报错的核心原因
你写的let memberRole = server.guild.roles.get("role ID")存在两个语法错误:
client.guilds.cache.get('guild ID')返回的server本身就是Guild对象,不需要额外拼接.guild,访问不存在的server.guild属性后再调用.roles自然会报未定义- discord.js v12及以上版本,所有资源查询都需要走
.cache集合,roles.get要改为roles.cache.get
其他隐藏问题
- 成员对象定义错误
你当前的rMember定义逻辑错误,赋值的第一行是guild.roles.cache,后续的或运算不会生效,拿到的不是成员对象,后续加角色操作也会报错。 - 跨服加角色逻辑错误
你不能直接给当前服务器的成员添加另一个服务器的角色,必须先在目标服务器查询到该用户的成员实例,再调用对应方法加角色。 - Intent配置错误
Intents.GUILD_ROLES写法错误,需要补全.FLAGS,同时你需要额外开启GUILD_MEMBERSintent,且要在Discord开发者后台的机器人设置页开启「服务器成员权限」开关,否则跨服无法获取成员数据。
修正后的代码
// 首先修正顶部client初始化的intent配置 const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_ROLES] }); module.exports = { name: 'accept', description: 'Adds A Player To The Whitelist', permissions: `ADMINISTRATOR`, execute(message, args) { // 你之前的参数很多是多余的,不需要定义 message.delete() // 修正rMember的获取逻辑 let rMember = message.mentions.members.first() || message.guild.members.cache.find((m) => m.user.tag === args[0]) || null; if(!rMember) return message.channel.send('未找到对应用户') // 替换成你实际的roleID let role1 = message.guild.roles.cache.find((r) => r.id == '你的第一个角色ID') let role2 = message.guild.roles.cache.find((r) => r.id == '你的第二个角色ID') // 替换成你要同步的目标服务器ID let targetServer = client.guilds.cache.get('目标服务器ID') if(!targetServer) return console.log('未找到目标服务器') // 替换成目标服务器的对应角色ID let memberRole = targetServer.roles.cache.get("872432775330955264"); if(!memberRole) return console.log('未找到目标角色') // 先给当前服务器的用户加角色 rMember.roles.add([role1, role2]).catch((e) => console.log(e)); // 到目标服务器查询该用户的成员实例,再加角色 targetServer.members.fetch(rMember.user.id).then(targetMember => { targetMember.roles.add(memberRole).catch((e) => console.log(e)); }).catch(e => { console.log('该用户不在目标服务器内',e) }) rMember.send(`消息内容`); message.channel.send('操作完成') }};
额外注意事项
- 你的机器人需要同时在两个服务器内,且拥有「管理角色」权限,角色的位置要高于你要分配的角色
- 所有ID都要替换成你自己的实际ID,不要保留示例占位内容
内容的提问来源于stack exchange,提问作者Erik Hallowell
相关产品推荐
相关产品推荐

