Discord.js v13中机器人给用户添加角色的方法及报错解决方案
问题原因
message.author 返回的是全局User对象,不关联特定服务器的身份数据,本身就没有roles属性,这不是v13版本的变更,属于API基础概念混用。
你需要使用代表用户在当前服务器内身份的GuildMember对象,也就是message.member来操作角色。
前置检查
在修正代码前先确认两项配置:
- 机器人启动时已经开启
Guilds、GuildMembers两个意图(Intent),否则无法获取服务器成员数据 - 机器人在当前服务器拥有
Manage Roles权限,且机器人自身的角色层级高于你要分配的目标角色,否则会触发权限报错
修正后代码
// 获取目标角色 const role = message.guild.roles.cache.get("[替换为实际角色ID]"); if (!role) return console.log("未匹配到对应角色"); // 给消息发送者分配角色 message.member.roles.add(role) .then(() => console.log("角色分配成功")) .catch(err => console.error("分配失败:", err));
补充说明
如果是在斜杠命令等交互场景下操作,对应成员对象为interaction.member,操作逻辑完全一致。
内容的提问来源于stack exchange,提问作者TheLazySquid
相关产品推荐
相关产品推荐

