Воспроизведение аудио файлов на канале гильдии (не работает на Ubuntu Server) - PullRequest
0 голосов
/ 16 октября 2018

Я хочу сделать "звуковую панель" на моем Discord Bot.

В настоящее время бот работает на Ubuntu Server 18.04 в VPS Hosting.

Я установил ffmpeg через aptitude apt-get install ffmpeg и соответствующие нодовые модули в моем проекте через npm : npm install ffmpeg-binaries --save и npm install node-opus --save

Iимейте этот предварительный код:

//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');
}

Когда мой бот присоединяется к голосовой комнате, он немедленно уходит без воспроизведения звука.

Я что-то не так делаю, установив ffmpeg кодек таким образом?Проблема с VPS?

(я пытался с новым ботом, установив ffmpeg на окнах и установив путь к переменной среды, и он работал нормально)

EDIT:

Я прослушал события "error" и "debug" в StreamDispatcher (как указано в https://discord.js.org/#/docs/main/stable/class/StreamDispatcher?scrollTo=e-error),, но я не получаю ошибокили отладочная информация.

Когда я слушаю «говорящее» событие, на моей консоли отображается как false

1 Ответ

0 голосов
/ 18 октября 2018

РЕШЕНИЕ:

Проблема была в том, что я не позаботился о рабочем каталоге, указанном процессом.Я думал, что это будет работать с фактической позиции файла в файловой системе.

Я использую 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 : "Похоже, у вас возникла проблема с относительными путями, когда вы делаете ../resources/audios/${sound}.mp3"

С fs:"Относительные пути будут разрешены относительно текущего рабочего каталога, как указано в process.cwd ()" (https://nodejs.org/dist/latest-v10.x/docs/api/fs.html#fs_file_paths).

Тогдаединственное, что мне нужно было сделать - переписать эту строку, чтобы она выглядела так:

const dispatcher = connection.playFile(`./resources/audios/${sound}.mp3`);
...