Музыкальный бот Discord.js: Ошибка типа: this.inputMedia.pipe не является функцией - PullRequest
0 голосов
/ 07 июня 2019

Я пишу музыкальный бот Discord, используя Discord.js.Бот использует ytdl-core, node-opus, и я установил ffmpeg в моей ОС (Ubuntu 19.04).Когда я пытаюсь заставить бота присоединиться к голосовому каналу и начать воспроизведение URL YouTube, он выдает следующую ошибку:

TypeError: this.inputMedia.pipe is not a function
    at FfmpegProcess.connectStream (/home/ivan/.../node_modules/discord.js/node_modules/prism-media/src/transcoders/ffmpeg/FfmpegProcess.js:73:21)
    at new FfmpegProcess (/home/ivan/.../node_modules/discord.js/node_modules/prism-media/src/transcoders/ffmpeg/FfmpegProcess.js:28:14)
    at FfmpegTranscoder.transcode (/home/ivan/.../node_modules/discord.js/node_modules/prism-media/src/transcoders/ffmpeg/Ffmpeg.js:34:18)
    at MediaTranscoder.transcode (/home/ivan/.../node_modules/discord.js/node_modules/prism-media/src/transcoders/MediaTranscoder.js:27:31)
    at Prism.transcode (/home/ivan/.../node_modules/discord.js/node_modules/prism-media/src/Prism.js:13:28)
    at AudioPlayer.playUnknownStream (/home/ivan/.../node_modules/discord.js/src/client/voice/player/AudioPlayer.js:97:35)
    at VoiceConnection.playStream (/home/ivan/.../node_modules/discord.js/src/client/voice/VoiceConnection.js:478:24)
    at voiceChannel.join.then.connection (/home/ivan/.../commands/play.js:32:47)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Вот мой код:

const ytdl = require("ytdl-core");

exports.run = (client, message, args, config) => {
    return new Promise((resolve, reject) => {
        if (args.length !== 1) {
            message.channel.send("Play command takes 1 YouTube link.");
            reject("Wrong number of arguments");
            return;
        }
        const voiceChannel = message.member.voiceChannel;
        if(!voiceChannel) {
            message.channel.send("You need to connect to a voice channel first");
            reject("Not connected to voice channel");
            return;
        }
        const perms = voiceChannel.permissionsFor(message.client.user);
        if (!perms.has("CONNECT")) {
            message.channel.send("You need to add the 'connect' permission for this bot");
            reject("NO CONNECT PERMISSION");
            return;
        }
        if (!perms.has("SPEAK")) {
            message.channel.send("You need to add the 'speak' permission for this bot");
            reject("NO SPEAK PERMISSION");
            return;
        }
        const streamOptions = { seek: 0, volume: 1, passes: 2 };
        voiceChannel.join()
            .then(connection => {
                const stream = ytdl(args[0], {filter: 'audioonly'});
                const dispatcher = connection.playStream(ytdl, streamOptions);
                dispatcher.on("end", reason => {
                    console.log("reason: " + reason);
                    voiceChannel.leave();
                })
                dispatcher.on("error", err => {
                    console.log(err);
                })
            })
        .catch(err => console.log(err));
    });    
}

Я пыталсяпереустановка ffmpeg, node и npm, discord.js и node-opus.У меня установлена ​​новейшая версия Discord.js и ffmpeg версии 4.1.3-0ubuntu1.У кого-нибудь есть предложения?

Спасибо.

1 Ответ

0 голосов
/ 07 июня 2019

Нашел проблему, это было в следующих строках:

const stream = ytdl(args[0], {filter: 'audioonly'});
const dispatcher = connection.playStream(ytdl, streamOptions);

Правильный код

const stream = ytdl(args[0], {filter: 'audioonly'});
const dispatcher = connection.playStream(steam, streamOptions);
...