Поиск видео на YouTube не работает (общее постоянное несоответствие) - PullRequest
0 голосов
/ 04 октября 2019

во-первых, я все еще не знаком со всем этим, но я все же решил попробовать, поэтому будьте терпеливы со мной здесь.

пакет, который я использую здесь, - это discord.js Commando и discord-youtube-апи. Перед тем, как добавить функцию воспроизведения, я решил посмотреть, смогу ли я правильно настроить функцию поиска. Но каждый раз, когда я пытался что-то искать, результат - полная чепуха (даже не единственное отношение к видео, которое я пытался найти), и он дает мне только один результат (смотрите? V = -yDd2D5OHyc) и ничего больше.

class SearchCommand extends Commando.Command {
    constructor(client){
        super(client,{
            name: 'search',
            group:'music',
            memberName:'search',
            description: 'Search a Youtube video',
            args: [
                {
                    key: 'text',
                    prompt: 'Input the video name?',
                    type: 'string'
                }
            ]
        });
    }

    async run (message, args, {text})
    {
        message.channel.send(args)
        message.channel.send(text)
        var video = await youtube.searchVideos(args.toString().replace(/,/g,' '));
        message.channel.send(video.url);
        message.channel.send(video.thumbnail);
        message.channel.send(video.length);

    }
}

module.exports = SearchCommand;

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

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

(node:14492) UnhandledPromiseRejectionWarning: TypeError: Parameter "url" must be a string, not object

Но представленное решение не является неправильным. Это просто неполное. К счастью, я нашел решение для новой ошибки, и в сочетании с вашим решением я могу заставить его работать так:

async run(message, {text})
    {
        const args = text.split(/ +/g);
        const video = await youtube.searchVideos(args);
        console.log(args.toString());
        console.log(args.join(' '));
        console.log(video.url)
        const streamOptions = { seek: 0, volume: 1 };
        if (message.member.voiceChannel){
        message.member.voiceChannel.join()
        .then(
            connection => { 
            const stream = yt(video.url, { filter : 'audioandvideo', quality : 'highestaudio', lang : 'en'});
            const dispatcher = connection.playStream(stream, streamOptions);
            })
        }
        else {
            message.channel.send("Please join a voice channel before I can play it for you !")
        }
0 голосов
/ 05 октября 2019

... это ['] дает мне только один результат ...

Это ожидаемое поведение метода searchVideos() в соответствии со страницей пакета .


[T] результат - полная ерунда ...

Array.toString() присоединится к элементаммассива с запятой. Это может привести к неожиданному результату.

Вы можете объединить массив args вместе с Array.join() и использовать пробел в качестве разделителя, а не запятой. Рассмотрим этот пример ...

const text = 'baby shark 10 hours';
const args = text.split(/ +/g);

console.log(args.toString());  // Your current search query
console.log(args.join(' '));   // The expected search query
...