如何为discord.js v13的Discord机器人从URL创建音频资源?
解决方案
问题原因
- 你使用的
ytdl-core-discord库返回的是Promise包装的Opus编码音频流,现有代码未加await读取流实例,直接将Promise对象传入音频资源创建方法,触发类型报错 - 未指定流的编码类型,
@discordjs/voice无法识别已编码的Opus流,会尝试二次转码导致无声音或报错
代码修改步骤
- 给
ytdl调用添加await关键字,正确获取流实例 - 在
createAudioResource的配置项中指定inputType为StreamType.Opus,告诉语音库不需要再对流传码
修改后的核心代码片段
if(video){ // 加await读取ytdl返回的流 const stream = await ytdl(video.url, {filter: "audioonly"}); // 指定流类型为Opus const resource = createAudioResource(stream, { inputType: StreamType.Opus }); player.play(resource); }
额外检查项
- 确保已安装语音功能依赖:执行
npm install libsodium-wrappers ffmpeg-static安装必要的编码和底层依赖,避免缺库导致的无声音问题 - 如果后续仍有播放异常,可以将
ytdl-core-discord替换为ytdl-core,搭配@discordjs/opus使用,流类型配置调整为StreamType.Arbitrary即可
内容的提问来源于stack exchange,提问作者Jason Hendry
相关产品推荐
相关产品推荐

