Ошибка ytdl (): аргумент «url» должен иметь строковый тип. Полученный тип не определен - PullRequest
1 голос
/ 29 мая 2020

У меня проблема с функциями ytdl () и downloadFromInfo () .

Ошибка:

TypeError_ [ERR_INVALID_ARG_TYPE]: The "url" argument must be of type string. Received type undefined

at validateString (internal/validators.js:107:11)
at Url.parse (url.js:155:3)
at Object.urlParse [as parse] (url.js:150:13)
at doDownload (E:\Discord Bots\Astralis Time 2\node_modules\miniget\dist\index.js:90:28)
at processTicksAndRejections (internal/process/task_queues.js:75:11)

В случае ytdl () я проверил, был ли мой ввод неверным, но это не так. Я считаю, что может возникнуть проблема, когда ytdl-core пытается прочитать объект из функции getInfo () .

С некоторыми видео это работает, но такие случаи редки.

Это код, который я использую, я проверил все свои переменные, включая songInfo, и все они кажутся правильными, ошибка появляется только при запуске ytdl () или downloadFromInfo ( ) .

async function playSong(channela, message){
var songInfo;
var songTitle;
let connection;
let dispatcher;

if(typeof servers[message.guild.id].queue[0] === 'undefined' || !servers[message.guild.id].queue[0] || typeof servers[message.guild.id].queue[0] !== 'string'){
    servers[message.guild.id].queue.shift();
    if(!servers[message.guild.id].queue[0]){
        connection.disconnect();
        message.member.voice.channel.leave();
    }
}
try{
    songInfo = await ytdl.getInfo(servers[message.guild.id].queue[0]);
    songTitle = songInfo.title;
    connection = await channela.join();
    let stream = await ytdl.downloadFromInfo(songInfo, {filter: 'audioonly', quality: 'highestaudio', highWaterMark: 1<<25});
    dispatcher = await connection.play(stream, {highWaterMark: 1});
}catch(error){
    console.error('Could not play the video:' + error);
    message.channel.send('**Please, try again.**');
} 

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 07 июня 2020

Для меня уловка заключалась в том, чтобы глобально удалить пакет и установить его обратно.

> npm uninstall -g ytdl-core --save
> npm install ytdl-core
1 голос
/ 29 мая 2020

Мне пришлось вручную обновить ytdl-core, по какой-то причине npm install ytdl-core@latest не обновил модуль.

...