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

更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:25:37