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
相关产品推荐
相关产品推荐

