R
R
rodiongoshev2020-08-19 14:38:27
Node.js
rodiongoshev, 2020-08-19 14:38:27

yt.getInfo failed. How to fix?

The error itself:

Calling `ytdl.getInfo` with a callback will be removed in a near future release. Use async/await.


The code:
'add': (msg) => {
    let url = msg.content.split(' ')[1];
    if (url == '' || url === undefined) return msg.channel.send(`Необходимо добавить ссылку на YouTube видео или ID после ${config.prefix}add`);
    yt.getInfo(url, (err, info) => {
            if (err) {
                // Сообщение после команды !add
                var args = msg.content.slice(config.prefix.length).trim().split(" ");
                args.splice(0, 2);
                var mesg = args.join(" ");
                // Помещаем запрос в параметр для поиска
                var options = {
                    q: mesg,
                    part: 'snippet',
                    type: 'video'
                };
                // Сам поиск
                searchYoutube(config.youtube_api_key, options, function (err, result) {
                    if (err) {
                        console.log(err + " |-------|-------| " + JSON.stringify(info));
                    } else {
                        url = result.items[0].id.videoId;
                        yt.getInfo(url, (err, info) => {
                            if (!err) {
                                if (!queue.hasOwnProperty(msg.guild.id)) queue[msg.guild.id] = {}, queue[msg.guild.id].playing = false, queue[msg.guild.id].songs = [];
                                queue[msg.guild.id].songs.push({url: url, title: info.videoDetails.title, requester: msg.author.username});
                                msg.channel.send("Добавлено в очередь: ```"+info.videoDetails.title+"```");
                            }
                        });
                    }
                });
            } else {
                if (!queue.hasOwnProperty(msg.guild.id)) queue[msg.guild.id] = {}, queue[msg.guild.id].playing = false, queue[msg.guild.id].songs = [];
                queue[msg.guild.id].songs.push({url: url, title: info.videoDetails.title, requester: msg.author.username});
                msg.channel.send("Добавлено в очередь: ```"+info.videoDetails.title+"```");
            }
        });
    },

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
rodiongoshev, 2020-08-21
@rodiongoshev

Full code

const Discord = require('discord.js');
const client = new Discord.Client();
let config = require('./botconfig.json');
let token = config.token;
let prefix = config.prefix;
let youtube_api_key = config.youtube_api_key;
/*
В config.json не забудь разместить переменные для получения из кода далее:
config.token
config.prefix
config.youtube_api_key
*/
client.login(config.token);


const yt = require('ytdl-core'); // Либы для плеера
const searchYoutube = require('youtube-api-v3-search');

var queue = {};


client.on('ready', () => {
  console.log('ready!');
});

client.on('message', msg => {
  if (!msg.content.startsWith(config.prefix)) return;
  if (commands.hasOwnProperty(msg.content.toLowerCase().slice(config.prefix.length).split(' ')[0])) commands[msg.content.toLowerCase().slice(config.prefix.length).split(' ')[0]](msg);
});

const commands = {
  'join': (msg) => {
    return new Promise((resolve, reject) => {
            const voiceChannel = msg.member.voiceChannel;
      if (!voiceChannel || voiceChannel.type !== 'voice') return msg.reply('Не могу присоединиться к твоему голосовому каналу.');
      voiceChannel.join().then(connection => resolve(connection)).catch(err => reject(err));
        });
    },
  'add': (msg) => {
    let url = msg.content.split(' ')[1];
    if (url == '' || url === undefined) return msg.channel.send(`Необходимо добавить ссылку на YouTube видео или ID после ${config.prefix}add`);
    yt.getInfo(url, (err, info) => {
            if (err) {
                // Сообщение после команды !add
                var args = msg.content.slice(config.prefix.length).trim().split(" ");
                args.splice(0, 2);
                var mesg = args.join(" ");
                // Помещаем запрос в параметр для поиска
                var options = {
                    q: mesg,
                    part: 'snippet',
                    type: 'video'
                };
                // Сам поиск
                searchYoutube(config.youtube_api_key, options, function (err, result) {
                    if (err) {
                        console.log(err + " |-------|-------| " + JSON.stringify(info));
                    } else {
                        url = result.items[0].id.videoId;
                        yt.getInfo(url, (err, info) => {
                            if (!err) {
                                if (!queue.hasOwnProperty(msg.guild.id)) queue[msg.guild.id] = {}, queue[msg.guild.id].playing = false, queue[msg.guild.id].songs = [];
                                queue[msg.guild.id].songs.push({url: url, title: info.videoDetails.title, requester: msg.author.username});
                                msg.channel.send("Добавлено в очередь: ```"+info.videoDetails.title+"```");
                            }
                        });
                    }
                });
            } else {
                if (!queue.hasOwnProperty(msg.guild.id)) queue[msg.guild.id] = {}, queue[msg.guild.id].playing = false, queue[msg.guild.id].songs = [];
                queue[msg.guild.id].songs.push({url: url, title: info.videoDetails.title, requester: msg.author.username});
                msg.channel.send("Добавлено в очередь: ```"+info.videoDetails.title+"```");
            }
        });
    },
    'queue': (msg) => {
        if (queue[msg.guild.id] === undefined) return msg.channel.send(`Очередь пуста. Для добавления трека воспользуйся командой !add`);
        let tosend = [];
        queue[msg.guild.id].songs.forEach((song, i) => {
            tosend.push(`${i+1}. ${song.title} - Заказал: ${song.requester}`);
        });
        msg.channel.send(`__**${msg.guild.name} Муз. Очередь:**__ В данный момент **${tosend.length}** треков в очереди. ${(tosend.length > 10 ? '*[Показаны первые 10]*' : '')}\n\`\`\`${tosend.slice(0,10).join('\n')}\`\`\``);
    },
    'play': (msg) => {
        if (queue[msg.guild.id] === undefined) return msg.channel.send(`Очередь пуста. Для добавления трека воспользуйся командой !add`);
        if (msg.guild.voice == undefined || msg.guild.voice.channel == undefined || msg.guild.voice.connection == null) return commands.join(msg).then(() => commands.play(msg));
        if (queue[msg.guild.id].playing) return msg.channel.send('Уже играет');
        
    let dispatcher;
        queue[msg.guild.id].playing = true;
        
    (function play(song) {
            console.log(song.title);
      if (song === undefined) return msg.channel.send('Очередь пуста').then(() => {
        queue[msg.guild.id].playing = false;
        msg.member.voice.channel.leave();
            });
            msg.channel.send(`Играет: **${song.title}** по запросу от **${song.requester}**`);
            dispatcher = msg.guild.voice.connection.play(yt(song.url, {audioonly: true}), {passes : 4});

      let collector = msg.channel.createMessageCollector(m => m);
      collector.on('message', m => {
                if (m.content.startsWith(config.prefix + 'pause')) {
          m.channel.send('На паузе').then(() => {
                        dispatcher.pause();
                    });
        } else if (m.content.startsWith(config.prefix + 'resume')){
          m.channel.send('Проигрывание продолжается').then(() => {
            dispatcher.resume();
                    });
        } else if (m.content.startsWith(config.prefix + 'skip')){
          m.channel.send('Трек пропущен').then(() => {
                        dispatcher.end();
                    });
        } else if (m.content.startsWith('volume+')){
          if (Math.round(dispatcher.volume*50) >= 100) return m.channel.send(`Громкость: ${Math.round(dispatcher.volume*50)}%`);
          dispatcher.setVolume(Math.min((dispatcher.volume*50 + (2*(m.content.split('+').length-1)))/50,2));
          m.channel.send(`Громкость: ${Math.round(dispatcher.volume*50)}%`);
        } else if (m.content.startsWith('volume-')){
          if (Math.round(dispatcher.volume*50) <= 0) return m.channel.send(`Громкость: ${Math.round(dispatcher.volume*50)}%`);
          dispatcher.setVolume(Math.max((dispatcher.volume*50 - (2*(m.content.split('-').length-1)))/50,0));
          m.channel.send(`Громкость: ${Math.round(dispatcher.volume*50)}%`);
        } else if (m.content.startsWith(config.prefix + 'time')){
          m.channel.send(`Время: ${Math.floor(dispatcher.time / 60000)}:${Math.floor((dispatcher.time % 60000)/1000) <10 ? '0'+Math.floor((dispatcher.time % 60000)/1000) : Math.floor((dispatcher.time % 60000)/1000)}`);
        }
            });
            
      dispatcher.on('end', () => {
                play(queue[msg.guild.id].songs.shift());
                collector.stop();
      });
      dispatcher.on('error', (err) => {
        return msg.channel.send('Ошибка: ' + err).then(() => {
          play(queue[msg.guild.id].songs.shift());
          collector.stop();
        });
      });
        }) (queue[msg.guild.id].songs.shift());
    }
};

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question