新版Node端Discord Bot API更新后音频播放无声音无报错如何解决
修复方案
前置依赖补全
先安装音频播放必需的底层依赖包:
npm install @discordjs/opus ffmpeg-static opusscript
代码修正点
- 补全
createReadStream的导入,你当前代码使用了该方法但未从fs模块引入 - 新增语音连接就绪状态监听,需等连接完全建立后再执行订阅、播放逻辑,避免连接未初始化完成导致的播放失败
- 创建音频资源时明确指定流类型,MP3格式需要配置转码参数才能被正常识别解码
修正后可用代码
const Discord = require('discord.js'); const {token} = require("./config.json"); const { join } = require("path"); const { createReadStream } = require('fs'); const {joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus, VoiceConnectionStatus, SubscriptionStatus, StreamType } = require("@discordjs/voice"); const client = new Discord.Client({ intents: [ Discord.GatewayIntentBits.Guilds, Discord.GatewayIntentBits.GuildVoiceStates ] }); client.on("ready", async () => { // 此处请替换为你自己获取到的目标语音频道对象 const channel = client.channels.cache.get('你的语音频道ID'); const connection = joinVoiceChannel({ channelId: channel.id, guildId: channel.guild.id, adapterCreator: channel.guild.voiceAdapterCreator, }); // 监听连接就绪状态后再执行播放逻辑 connection.on(VoiceConnectionStatus.Ready, () => { const audioPlayer = createAudioPlayer(); // 创建音频资源时指定流类型 const resource = createAudioResource(createReadStream(join(__dirname, "plswork.mp3")), { inputType: StreamType.Arbitrary }); const subscription = connection.subscribe(audioPlayer); audioPlayer.play(resource); audioPlayer.on(AudioPlayerStatus.Playing, () => { console.log("currently playing"); console.log("resource started:", resource.started); }); audioPlayer.on('error', error => { console.error(`Error: ${error.message} with resource`); }); audioPlayer.on(AudioPlayerStatus.AutoPaused, () => { console.log("playback finished"); }); }); // 新增连接错误监听方便排查问题 connection.on('error', console.error); }); client.login(token);
额外排查点
如果修改后仍然无法播放,可以检查以下配置:
- 机器人拥有目标语音频道的连接、说话权限
- 你使用的discord.js和@discordjs/voice版本为最新正式版,避免版本兼容问题
- 本地的plswork.mp3文件路径正确,文件本身可正常播放
内容的提问来源于stack exchange,提问作者Taggagii
相关产品推荐
相关产品推荐

