Discord.js开发报错:Cannot read property 'startsWith' of undefined如何解决
报错原因与修复方案
报错原因
核心原因是代码尝试访问message.content的startsWith方法时,message.content的值为undefined,触发类型错误,常见触发场景如下:
- 使用discord.js v13及以上版本时,未开启Message Content Intent权限,Discord API不会返回消息内容字段,导致
content为undefined - 客户端初始化时未配置消息内容相关的intents,无法拉取消息内容数据
- 事件回调参数传递错误,
message对象本身不是正确的消息实例,缺少content字段
修复方案
步骤1:添加防御性判断(优先解决程序崩溃问题)
修改代码中的判断行,先校验message.content是否存在,再调用对应方法:
// 原代码 // if (!message.content.startsWith(prefix) || message.author.bot) return; // 修改后 if (!message.content || !message.content.startsWith(prefix) || message.author.bot) return;
步骤2:开启Discord开发者后台权限
- 打开Discord Developer Portal,进入对应Bot应用的「Bot」设置页
- 找到「Privileged Gateway Intents」板块,开启
Message Content Intent开关并保存
步骤3:校验客户端初始化的intents配置
确保初始化Discord客户端时已经添加了必要的intent:
discord.js v14版本示例:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 必要:服务器权限 GatewayIntentBits.GuildMessages, // 必要:服务器消息权限 GatewayIntentBits.MessageContent, // 必要:消息内容权限 GatewayIntentBits.DirectMessages // 可选:如需接收私信消息可添加 ] });
discord.js v13版本示例:
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT, Intents.FLAGS.DIRECT_MESSAGES ] });
步骤4:校验事件绑定逻辑
确保绑定messageCreate事件时参数传递正确,调用你导出的处理函数时参数顺序不要错位:
// 正确示例 client.on('messageCreate', (message) => { // 参数顺序为 client, message, Discord,不要传错 require('./你的处理文件路径')(client, message, Discord); });
内容的提问来源于stack exchange,提问作者TbF
相关产品推荐
相关产品推荐

