通过ID为用户添加角色时触发Cannot read properties of undefined (reading 'add')报错
报错原因
client.users.fetch() 返回的是全局User对象,该对象不具备roles属性,只有归属于特定服务器的*GuildMember(服务器成员)*对象才持有roles实例,可调用add方法分配角色。你校验到的user变量是有效的全局用户对象,自然没有操作服务器角色的相关属性。
修复方案
- 替换全局用户拉取逻辑,从你获取角色的目标
Guild实例调用成员拉取接口,拿到对应服务器的成员对象后再操作角色 - 额外确认机器人持有
管理角色权限,且待分配的角色优先级低于机器人自身的角色优先级,避免后续权限类报错
修复后代码示例:
let role = Guild.roles.cache.find((r) => r.name === dataobj.Guild.name); // 从目标服务器拉取成员对象 Guild.members.fetch(useritem).then((member) => { member.roles.add(role) .catch(error => console.error(error)); // 保留错误打印方便排查异常 });
内容的提问来源于stack exchange,提问作者Chikoo Danko
相关产品推荐
相关产品推荐

