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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:11:28