discord.js bot播放音频无声音,Discord显示发声绿圈无报错如何解决?
问题排查及修复方案
- 确认依赖完整性
discord.js的语音功能需要额外依赖组件支持,必须安装以下依赖:npm install @discordjs/opus ffmpeg-static
也可以全局安装ffmpeg,但使用ffmpeg-static可避免环境变量配置问题。 - 检查Intents配置
必须在Discord开发者平台的Bot设置页开启Guild Voice States权限,否则bot即使成功加入频道也无法正常传输音频流。 - 补充异步错误监听
你当前使用的try/catch只能捕获同步代码错误,vc.join()和connection.play()均为异步操作,内部抛出的错误无法被外层捕获,因此控制台无报错输出,需要给异步操作添加错误监听,修正后的代码参考如下:
if (command == "soundtest") { mongo().then(async (mongoose) => { const { voice } = msg.member if (voice.channelID) { const vc = voice.channel try { const connection = await vc.join() const dispatcher = connection.play(path.join(__dirname, 'Bastille_Pompeii.mp3')) // 监听播放错误 dispatcher.on('error', err => { console.log('播放出错:', err) }) dispatcher.on('finish', () => { console.log('音频播放完成') }) } catch(e) { console.log("加入频道出错:", e) } } else { msg.channel.send(`You must join a voice channel to use this command`) } }) }
- 验证音频路径与文件有效性
打印path.join(__dirname, 'Bastille_Pompeii.mp3')的输出,确认路径和你实际存放音频文件的路径完全一致,同时使用本地播放器打开音频文件,确认文件本身没有损坏。 - 检查频道权限
确认bot在当前语音频道拥有Speak权限,没有被服务器管理员、频道权限设置静音。
内容的提问来源于stack exchange,提问作者MadMisty
相关产品推荐
相关产品推荐

