在公会频道上播放音频文件(不适用于Ubuntu Server)

时间:2018-10-16 14:10:38

标签: node.js ffmpeg discord.js

我想在Discord Bot上制作一个“音板”

该机器人当前在VPS主机上的Ubuntu Server 18.04上运行。

我通过 aptitude apt-get install ffmpeg安装了 ffmpeg ,并通过 npm 在项目中安装了各个节点模块:{{1} }和npm install ffmpeg-binaries --save

我有以下临时代码:

npm install node-opus --save

当我的机器人加入语音室时,它会立即离开而不会播放声音。

我通过这种方式安装 ffmpeg 编解码器来做错什么吗? VPS有问题吗?

(我尝试过使用新的漫游器,在Windows上安装 ffmpeg 并设置环境变量路径,效果很好)

编辑:

我在 StreamDispatcher (如https://discord.js.org/#/docs/main/stable/class/StreamDispatcher?scrollTo=e-error中指定的)上监听了“错误”和“调试”事件,但没有收到错误或调试信息。

当我收听“ speaking”事件时,在控制台上显示为//Command syntax: !play (sound) if (!args[0]) return message.channel.send('noCorrectSyntax'); //args is provided by module.run let sound = args[0]; let isReady = true; if (isReady) { isReady = false; let voiceChannel = message.member.voiceChannel; if (!voiceChannel) return message.channel.send('noChannel'); voiceChannel.join().then(connection =>{ const dispatcher = connection.playFile(`../resources/audios/${sound}.mp3`); if (!dispatcher) return message.channel.send('soundNotFound'); console.log(`Playing ${sound} on ${message.member.voiceChannel.name}`); dispatcher.on("end", end => { voiceChannel.leave(); console.log(`Finished`); }); }).catch(err => console.log(err)); isReady = true; } else { return message.channel.send('botNotAvailable'); }

1 个答案:

答案 0 :(得分:0)

解决方案:

问题是我没有处理该进程指定的工作目录。我认为它将从文件系统上的实际文件位置开始工作。

我使用index.js在单独的文件上运行命令,如下所示:

let commandFile = require(`./commands/${command}`);
commandFile.run(discord, fs, etc ...);

然后在每个命令文件上放置以下代码:

exports.run = async (discord, fs, etc ...) => {CODE FOR THE COMMAND};

那是问题所在。正如 Splingush#7845 在官方的 Discord.js支持服务器上向我解释的那样:“听起来像您在{{1} }“

来自../resources/audios/${sound}.mp3 “相对路径将相对于由process.cwd()指定的当前工作目录来解析”(https://nodejs.org/dist/latest-v10.x/docs/api/fs.html#fs_file_paths)。

然后,我唯一需要做的就是重写此行,使其看起来像这样:

fs