JS开发的Discord音乐机器人启动报错,如何排查解决?
问题修复方案
你的报错由以下几个可复现的问题导致,按顺序修改即可解决:
1. 修正HTML转义字符错误
你代码中所有的双引号都被转义为了HTML实体",属于语法错误,直接全局替换所有"为标准双引号"即可。
2. 补全discord.js必填的网关意图配置
当前discord.js v13及以上版本要求必须显式声明机器人所需的网关权限,原无参初始化new Discord.Client()的写法已失效。
按你使用的版本替换对应初始化代码:
若使用discord.js v13
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT ] });
若使用discord.js v14
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
同时需要进入Discord开发者平台的机器人管理页,在「Bot」选项卡下开启Message Content Intent开关,否则机器人无法读取消息内容触发命令。
3. 调整事件注册位置
你当前将所有distube.on事件监听代码写在了message事件回调内部,每次收到消息都会重复注册事件,会导致内存泄漏、事件重复触发。把所有distube事件监听代码移到message事件外部,和ready事件平级即可。
4. 修正模板字符串语法
ready事件中的日志用了单引号包裹模板字符串,内部变量不会被解析,把单引号替换为反引号:
client.on("ready", () => { console.log(`${client.user.tag} va venir faire mousser tout ça!`); });
5. 版本匹配校验
确保disTube版本和discord.js版本匹配:
- disTube v3.x 对应 discord.js v13.x
- disTube v4.x 对应 discord.js v14.x
跨版本安装会出现未知接口报错。
内容的提问来源于stack exchange,提问作者user17065577
相关产品推荐
相关产品推荐

