Discord.js机器人播放MP3时@discordjs/opus模块安装报错问询
报错核心原因
- 当前拉取的
@discordjs/opus@0.5.0版本未提供Node.js v16.0.0对应的预编译二进制包,请求预编译资源时返回404错误,自动触发本地源码编译流程 - 本地node-gyp缓存缺失Node.js v16.0.0对应的公共配置文件
common.gypi,导致源码编译流程中断 - 管理员权限启动命令行仅能解决权限类错误,无法覆盖版本不匹配、本地文件缺失类问题
可落地的修复步骤
- 匹配对应版本的opus依赖
针对Node.js 16.x环境,不要安装默认拉取的0.5.0旧版,直接安装适配Node16的稳定版本:npm i @discordjs/opus@0.9.0 - 修复本地node-gyp编译环境
如果安装时仍触发源码编译报错,先完成本地编译环境初始化:- 全局升级node-gyp到兼容版本:
npm i -g node-gyp@latest - 为当前Node v16.0.0拉取编译所需的头文件资源到本地缓存:
node-gyp install - 重新执行上述opus依赖安装命令
- 全局升级node-gyp到兼容版本:
- 无编译需求的替代方案
如果本地编译流程持续报错,可以使用纯JS实现的opus编码器替代,完全规避本地编译环节,discord.js会自动识别已安装的编码器,无需修改原有播放逻辑:
安装opusscript:npm i opusscript - 修正原有播放代码的语法遗漏
你提供的播放代码存在Promise链未闭合的语法问题,修正后的完整可运行代码为:channel.join().then((connection) => { connection.play('audio.mp3'); });
内容的提问来源于stack exchange,提问作者Cahan uuu
相关产品推荐
相关产品推荐

