Discord.js验证系统报错:message.author.roles为undefined求助
问题排查与解决
核心原因
message.author是Discord.js中的User对象,仅存储用户的全局平台信息(比如用户名、头像),不包含任何服务器(Guild)相关的角色数据,因此user.roles会返回undefined。
要获取用户在当前服务器的角色,你需要使用GuildMember对象,也就是message.member——它包含了用户在该服务器内的角色、权限、加入时间等专属数据。
修改后的代码
const roleId = config.verify.roleId // 997167483473629324 const channelId = config.verify.channelId // 997167450024067194 // 替换为message.member获取服务器成员对象 const member = message.member if (message.channel.id === channelId) { // 先判断member是否存在(防止非服务器内的消息触发错误) if (!member) return message.reply('无法获取你的服务器成员信息,请重试。') if (!member.roles.cache.has(roleId)) { message.reply({ embeds: [new Discord.MessageEmbed() .setColor('RED') .setTitle('Verification') .setDescription('Please wait.') ] }) setTimeout(() => { member.roles.add(roleId) }, 1500) } }
额外注意事项
- 确保你的机器人拥有管理角色的权限,否则
roles.add()会执行失败 - 如果你的机器人是在
DM频道收到消息,message.member会是null,所以代码里加了!member的判断来避免报错
内容的提问来源于stack exchange,提问作者Whoman
相关产品推荐
相关产品推荐

