我想在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');
}
答案 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