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

如何使用djs v13在Discord舞台频道播放本地音乐文件

Discord.js v13.2.0 舞台频道播放本地音频无声音修复方案

核心问题排查

你的代码存在4处导致无声音的关键问题:

  1. path.join()参数填写错误,且未基于脚本目录定位文件,大概率无法找到目标音频
  2. 没有将音频播放器订阅到语音连接实例,播放器输出的流没有送入语音频道
  3. 未指定音频流类型,底层可能无法正确解码本地MP3文件
  4. 仅提交发言请求未确认权限生效,舞台频道发言权限未正确获取

修复后可用代码

const { createReadStream } = require('fs');
const { join } = require('path');
const { createAudioResource, StreamType, createAudioPlayer, joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice'); 

// 建立语音连接
const connection = joinVoiceChannel({
    channelId: message.member.voice.channel.id,
    guildId: message.guild.id,
    adapterCreator: message.guild.voiceAdapterCreator
}); 

// 等待连接就绪,避免状态未同步导致播放失败
try {
    await entersState(connection, VoiceConnectionStatus.Ready, 20000);
} catch (err) {
    connection.destroy();
    console.error('语音连接超时:', err);
    return;
}

// 优先直接获取舞台频道发言权限,权限不足时再提交发言申请
await message.guild.me.voice.setSuppressed(false)
    .catch(() => message.guild.me.voice.setRequestToSpeak(true));

// 正确拼接音频路径,__dirname为当前脚本所在目录,可根据实际存储位置调整
const audioPath = join(__dirname, '../music/audio.mp3');
// 包装本地文件流,指定流类型确保解码正常
const resource = createAudioResource(createReadStream(audioPath), {
    inputType: StreamType.Arbitrary
});
const player = createAudioPlayer(); 

// *核心步骤*:将播放器输出流绑定到语音连接
connection.subscribe(player);

// 播放音频并添加错误监听
player.play(resource);
player.on('error', err => console.error('播放出错:', err));

额外注意事项

  • 确认@discordjs/voice版本与discord.js v13.2.0兼容,依赖版本不匹配会导致流传输异常
  • 确认机器人在对应服务器有连接、说话权限,舞台频道额外需要请求发言或优先发言权限
  • 执行代码时可打印audioPath变量,核对路径是否指向真实存在的MP3文件
  • 若仍无声音,可安装ffmpeg-static依赖,让库自动转码不兼容的音频格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:07