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

discord.js命令执行报错TypeError: 无法读取undefined的length属性

报错信息
if(command.permissions.length){
                       ^
TypeError: Cannot read properties of undefined (reading 'length')
故障原因

报错核心是代码执行到权限校验环节时,尝试读取command.permissions.length属性,但此时command本身为undefined,无法读取下属属性。
常见触发场景:

  • 用户输入的指令名、别名没有匹配到注册在client.commands里的任何指令,获取到的command为空
  • 部分自定义指令文件没有配置permissions字段,即使匹配到指令,也会因为permissions属性不存在触发同类报错
  • 异常捕获逻辑位置错误:原本用来拦截「指令不存在」场景的try/catch放在了权限校验代码之后,根本拦不住前面的报错。
修复步骤

直接替换对应位置的代码即可:

  1. 获取指令后立刻做存在性校验,匹配不到指令直接返回,不执行后续逻辑:
const command = client.commands.get(cmd) || client.commands.find(a => a.aliases && a.aliases.includes(cmd));
// 新增:指令不存在直接返回提示
if (!command) return message.reply("❌| 未找到对应指令");
  1. 给权限判断加兜底逻辑,兼容未配置permissions字段的指令:
    将原来的权限判断行if(command.permissions.length){替换为:
// 仅当指令配置了permissions且为非空数组时,才执行权限校验
if(Array.isArray(command.permissions) && command.permissions.length){
  1. 给冷却时间加默认值兜底,避免未配置cooldown字段的指令触发计算异常:
    将原来的冷却时间计算行const cooldown_amount = (command.cooldown) * 1000;替换为:
// 未配置冷却时间时默认3秒,可根据需求自行调整默认值
const cooldown_amount = (command.cooldown || 3) * 1000;

改完重启机器人即可解决该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:27