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

Discord Bot从v12升级至v13后命令失效及message事件弃用问题求助

问题修复方案

1. 替换弃用的message事件为messageCreate

Discord.js v13 已彻底移除message事件,改用messageCreate事件。如果你的代码仍在监听message事件,不仅会弹出弃用提示,还会导致命令因未触发事件而失效。

找到代码中类似如下的监听逻辑:

client.on('message', message => {
  // 命令处理代码
});

直接替换为:

client.on('messageCreate', message => {
  // 命令处理代码
});

2. 启用messageContent意图

Discord.js v13 要求必须显式开启messageContent权限才能读取消息内容,否则无法解析命令前缀和内容。

操作步骤:

  • 登录Discord开发者平台,进入你的Bot应用页面
  • 切换到Bot选项卡,在Privileged Gateway Intents区域开启Message Content Intent
  • 在main.js初始化Client时,添加对应意图配置:
const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.MESSAGE_CONTENT // 必须添加该项
  ]
});

3. 检查命令触发逻辑适配性

如果你的avatar命令基于前缀触发,需确认在messageCreate事件中正确解析前缀与命令。以下是适配v13的avatar命令示例:

// 假设命令前缀为!
client.on('messageCreate', message => {
  if (!message.content.startsWith('!') || message.author.bot) return;

  const args = message.content.slice(1).trim().split(/ +/);
  const command = args.shift().toLowerCase();

  if (command === 'avatar') {
    const targetUser = message.mentions.users.first() || message.author;
    const avatarLink = targetUser.displayAvatarURL({ size: 512, dynamic: true });
    message.channel.send(`**${targetUser.tag}** 的头像:\n${avatarLink}`);
  }
});

4. 额外排查项

  • 执行npm list discord.js确认版本为v13.x,若版本不符则运行npm install discord.js@13更新
  • 检查代码中是否存在其他v12专属API调用(如部分GuildMember属性、fetch方法参数变化等),这类差异也可能导致命令失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36