Discord音乐机器人无法连接语音频道且无报错问题求助
问题根因排查&修复方案
1. 核心错误点
- 事件监听名称不兼容:discord.js v13+ 已废弃
message事件,替换为messageCreate,原写法下指令根本无法触发,自然无反应无报错 - 语音连接参数错误:
- 你错误使用了不存在的属性
message.channelid、message.guildid,正确属性名是驼峰格式 - 你传入的是文字频道ID,实际需要传入触发指令的用户所在的语音频道ID
- 你错误使用了不存在的属性
- 缺失错误捕获逻辑:没有对语音连接、音频流、播放器添加错误监听,导致运行出错也没有日志输出
- 潜在依赖缺失:语音播放需要配套安装opus编码库,如
@discordjs/opus或libsodium-wrappers,未安装也会导致连接失败无报错
2. 代码修正
修正Main.js事件监听部分
找到原代码的client.on ('message', message=>{行,替换为:
client.on ('messageCreate', message=>{
其余Main.js内容保持不变即可。
修正aimesus.js指令代码
完整修正后的代码如下:
const ytdl = require('ytdl-core'); module.exports ={ name:'aimesus', description:'aaaaaaaaaaaam', async execute(message, args){ // 先判断用户是否在语音频道 if(!message.member.voice.channel) return message.reply('你需要先加入一个语音频道'); try { const { joinVoiceChannel, createAudioPlayer, createAudioResource, generateDependencyReport, VoiceConnectionStatus, entersState } = require('@discordjs/voice'); const url = 'https://www.youtube.com/watch?v=NevKVKbCNy4&ab_channel=NTDM' const stream = ytdl(url, {filter: 'audioonly', highWaterMark: 1<<25}); const player = createAudioPlayer(); const resource = createAudioResource(stream); const connection = joinVoiceChannel({ // 修正为用户所在的语音频道ID channelId: message.member.voice.channel.id, // 修正为正确的服务器ID取值 guildId: message.guild.id, adapterCreator: message.guild.voiceAdapterCreator, selfDeaf: false }) // 等待语音连接成功后再操作 await entersState(connection, VoiceConnectionStatus.Ready, 30e3); connection.subscribe(player); player.play(resource); console.log(generateDependencyReport()); // 添加错误监听 connection.on('error', err => console.error('语音连接错误:', err)); player.on('error', err => console.error('播放器错误:', err)); stream.on('error', err => console.error('音频流加载错误:', err)); } catch (err) { console.error('指令运行错误:', err); message.reply('播放失败,请查看控制台日志'); } } }
3. 额外检查项
- 确保已安装语音编码依赖:运行
npm install @discordjs/opus libsodium-wrappers安装必要依赖 - 检查Discord开发者后台已给机器人开启了
Voice相关权限,服务器内邀请机器人时也勾选了语音连接、语音说话权限
内容的提问来源于stack exchange,提问作者Gio23
相关产品推荐
相关产品推荐

