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

discord.js报读取undefined对象cache属性错误如何解决

问题说明

运行discord.js机器人命令时抛出错误Cannot read properties of undefined (reading 'cache'),该问题属于代码编写错误导致。

错误根因

代码中错误使用了message.author获取成员对象:

  • message.author返回的是全局User对象,仅包含用户基础信息,不存在roles属性
  • 访问不存在的member.roles会得到undefined,再尝试读取undefined上的cache属性就会触发当前报错
  • 只有和服务器绑定的GuildMember对象,才会挂载roles属性存储用户在当前服务器的角色信息
修复步骤
  • 替换成员获取逻辑:将let member = message.author;修改为let member = message.member;,message.member才是消息发送者在当前服务器内的成员实例,可正常访问角色缓存
  • 补全权限判断分支:原代码仅调用了member.roles.cache.has('989342982224355409')但没有做逻辑拦截,如果是做权限校验,需要在判断不满足角色要求时直接返回,阻止后续代码执行
  • 调整参数校验位置:将参数非空判断移到权限判断之后,避免无权限用户触发命令时先收到参数错误提示
修复后参考代码
const {MessageEmbed} = require('discord.js')

module.exports = {
    name: 'cutem',
    execute(client, message, args) {
      // 获取当前服务器内的发送者成员实例
      let member = message.member;
      // 角色权限校验
      if(!member.roles.cache.has('989342982224355409')) {
        return message.reply("你没有使用该命令的权限");
      }
      // 参数合法性校验
      if(!args[0]) return message.reply("send what you want")
    
      let channel = message.mentions.channels.first() || message.channel;
      let embed = new MessageEmbed()
        .setImage(args[0])
        .setColor("GREYPLE")
      channel.send(`@here by : <@${message.author.id}>` )
      channel.send({embeds: [embed]})
    }
}

内容的提问来源于stack exchange,提问作者italuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:36:25