更新discord.js至14.6.0后命令失效,求原因附代码示例
Discord.js 14.6.0 升级后命令失效的原因及修复方案
discord.js从v13升级到v14存在多处破坏性变更,你的代码无法运行主要是以下几个原因:
- 消息事件名称变更:v14将原
message事件更名为messageCreate,旧事件名不再触发。 - 缺少消息内容意图:v14默认关闭
messageContent特权意图,不开启的话无法读取message.content,自然无法匹配命令前缀。 - 文件发送格式修改:v14要求发送本地文件时必须用
AttachmentBuilder包装路径,不能直接传字符串。
修复后的代码示例
// 客户端初始化必须添加对应意图 const { Client, GatewayIntentBits, AttachmentBuilder } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, // 必须开启才能读取消息内容 GatewayIntentBits.GuildMembers ] }); client.on('messageCreate', (message) => { // 使用新的事件名messageCreate if (message.content.startsWith('L!poke')) { let targetMember = message.mentions.members.first(); if (!targetMember) return message.reply('你得@一个用户才能戳TA!'); const num = (Math.floor(Math.random()* 6)+1).toString(); // 用AttachmentBuilder包装本地文件 const pokeGif = new AttachmentBuilder(`./poke/poke${num}.gif`); message.channel.send({ files: [pokeGif] }); message.channel.send(` ${targetMember.user},你被戳了!! -_-`); } });
关键变更点说明
- 必须在客户端初始化时声明
GatewayIntentBits.MessageContent意图,否则无法获取消息内容。 - 所有监听消息的逻辑要从
message事件迁移到messageCreate事件。 - 发送本地/远程文件都需要使用
AttachmentBuilder(或EmbedBuilder处理嵌入内的附件),不能直接传路径字符串。 - 若后续要使用嵌入消息,需用
EmbedBuilder替代已废弃的RichEmbed。
内容的提问来源于stack exchange,提问作者FBILOLIGIRL
相关产品推荐
相关产品推荐

