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

discordjs/voice无法播放音频:机器人可进频道但无声音问题咨询

排查与解决建议
  • 权限与配置检查
    首先确认Discord开发者后台已开启Privileged Gateway Intents下的Voice State Intent,若使用消息触发命令还需开启Message Content Intent。其次确认机器人在对应语音频道拥有「连接」「说话」权限,同时检查服务器内机器人角色的音量未被拉至0、客户端侧机器人的音量没有被静音。
  • 依赖完整性检查
    @discordjs/voice需要额外的音视频编解码依赖才能正常播放音频,执行以下命令安装缺失依赖:
    npm install @discordjs/opus ffmpeg-static
    
    你本地用mpg123可正常播放文件仅代表系统层面有对应解码器,不代表Node.js运行环境包含播放所需的依赖。
  • 代码逻辑问题修复
    你当前代码中player实例在play函数内部创建,函数执行完成后实例会被垃圾回收机制销毁,导致播放中断。可以将player实例挂载到全局变量、或者传入的server对象上持久化存储,避免被回收:
    // 示例:将player挂载到server对象
    function play(connection, messageCreate, server) {
        let resource = createAudioResource(__dirname + '/try.mp3', { inlineVolume : true });
        // 仅在没有player实例时创建,避免重复生成
        if (!server.player) server.player = createAudioPlayer();
        connection.subscribe(server.player);
        server.player.play(resource, {seek: 0, volume: 1.0});
    }
    
    同时可以打印路径console.log(__dirname + '/try.mp3')确认文件路径拼接正确,不存在拼写错误或者文件不存在的问题。
  • 错误日志排查
    给播放器添加事件监听,定位具体报错原因:
    player.on('error', error => {
      console.error('播放器错误:', error.message);
    });
    player.on('stateChange', (oldState, newState) => {
      console.log(`播放器状态切换:${oldState.status} => ${newState.status}`);
    });
    
    若状态一直卡在buffering或者直接抛出错误,可以根据日志内容进一步定位问题。
  • 连接参数检查
    确认joinVoiceChannel创建连接时,selfMute参数设置为false,避免机器人加入频道时自动静音,同时确认guildId、channelId、adapterCreator三个必填参数均正确传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:15:03