Discord.js ytdl Ошибка: входной поток: Код состояния: 416

У меня есть музыкальный бот Discord, использующий ytdl, и иногда песня случайным образом останавливается, и выдается следующая ошибка:

Error: input stream: Status code: 416

Вот мой код для моей функции playSong

static playSong(queue, message) {
    const classThis = this;
    queue[0].voiceChannel
    .join()
    .then(function(connection) {
        const dispatcher = connection.play(ytdl(queue[0].url, {quality: 'highestaudio'}))
        .on('start', function() {
            message.guild.musicData.songDispatcher = dispatcher;
            dispatcher.setVolume(message.guild.musicData.volume);
            const videoEmbed = new Discord.MessageEmbed()
                .setThumbnail(queue[0].thumbnail)
                .setColor(embedSettings.color)
                .addField('Now Playing', `${queue[0].title} (${queue[0].url})`)
                .addField('Duration', queue[0].duration)
                .setFooter(embedSettings.footer, embedSettings.footer_url);
            if (queue[1]) videoEmbed.addField('Next Song:', queue[1].title);
            message.say(videoEmbed);
            message.guild.musicData.nowPlaying = queue[0];
            return queue.shift();
        })
        .on('finish', function() {
            if (queue.length >= 1) {
                return classThis.playSong(queue, message);
            } else {
                message.guild.musicData.isPlaying = false;
                message.guild.musicData.nowPlaying = null;
                message.guild.musicData.songDispatcher = null;
                if (message.guild.me.voice.channel) {
                    return message.guild.me.voice.channel.leave();
                }
            }
        })
}

Когда я переместил бота в службу хостинга Discord Bot, ошибка возникала реже, но все же возникала. Это проблема с моим кодом или с подключением к YouTube API?


person lw_101    schedule 31.07.2020    source источник


Ответы (1)


Я исправил эту проблему, используя:

const dispatcher = connection.play(ytdl(queue[0].url, {
    quality: 'highestaudio',
    highWaterMark: 1 << 25
}))

Итак, для вас:

static playSong(queue, message) {
    const classThis = this;
    queue[0].voiceChannel
    .join()
    .then(function(connection) {
        const dispatcher = connection.play(ytdl(queue[0].url, {quality: 'highestaudio', highWaterMark: 1 << 25 }))
        .on('start', function() {
            message.guild.musicData.songDispatcher = dispatcher;
            dispatcher.setVolume(message.guild.musicData.volume);
            const videoEmbed = new Discord.MessageEmbed()
                .setThumbnail(queue[0].thumbnail)
                .setColor(embedSettings.color)
                .addField('Now Playing', `${queue[0].title} (${queue[0].url})`)
                .addField('Duration', queue[0].duration)
                .setFooter(embedSettings.footer, embedSettings.footer_url);
            if (queue[1]) videoEmbed.addField('Next Song:', queue[1].title);
            message.say(videoEmbed);
            message.guild.musicData.nowPlaying = queue[0];
            return queue.shift();
        })
        .on('finish', function() {
            if (queue.length >= 1) {
                return classThis.playSong(queue, message);
            } else {
                message.guild.musicData.isPlaying = false;
                message.guild.musicData.nowPlaying = null;
                message.guild.musicData.songDispatcher = null;
                if (message.guild.me.voice.channel) {
                    return message.guild.me.voice.channel.leave();
                }
            }
        })
}
person Androz2091    schedule 01.08.2020
comment
Казалось, это решило проблему. Спасибо! - person lw_101; 02.08.2020