You need to enable JavaScript to run this app. Discord.js开发时出现TypeError: 无法读取undefined的startsWith属性
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js开发时出现TypeError: 无法读取undefined的startsWith属性

Discord机器人命令模块TypeError: Cannot read property 'startsWith' of undefined问题排查

报错产生原因

  • 对象属性名不匹配:Discord.js 传入的message实例中,存储消息文本的属性为全小写的content,代码解构时误写为大写的CONTENT,最终得到的解构值为undefined,对undefined调用startsWith方法时会直接触发该类型错误。
  • 模板字符串语法缺失:代码中两处使用${}变量占位符的位置,未按JS模板字符串规则在外层包裹反引号,属于语法层面的遗漏,即使修正了属性取值问题,这段代码也无法正常解析运行。
  • 边界场景未过滤:当前逻辑没有提前过滤机器人自身发送的消息、加载状态下的不完整消息实例,偶发场景下也会拿到空的消息内容,触发同类报错。

修复操作

按以下几点调整代码即可解决问题:

  • 将解构得到的大写CONTENT改为小写content,匹配Discord.js的对象属性命名规则
  • 为需要拼接变量的模板字符串补充对应反引号,保证语法合法
  • 增加前置判断逻辑,遇到空消息内容、机器人发送的消息直接跳过后续处理,减少无效执行

调整后的可正常运行代码参考:

const { PREFIX } = require("../config.json");

module.exports = (client, aliases, callBack) => {
    if (typeof aliases === "string") {
        aliases = [aliases];
    }

    client.on("message", message => {
        // 跳过机器人消息、空内容消息
        if (message.author.bot || !message.content) return;
        const { content } = message;

        aliases.forEach(alias => {
            const COMMAND = `${PREFIX}${alias}`;
            if (content.startsWith(`${COMMAND}`) || content === COMMAND) {
                console.log(`Asuna is running the command "${COMMAND}"...`);
                callBack(message);
            }
        });
    });
}

版本兼容提示:如果使用Discord.js v14及以上版本,需将原message事件替换为messageCreate事件,旧版message事件在新版本中已被弃用,会导致命令逻辑完全无法触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 01:15:04