Discord JS Musi c Bot подключается, а затем немедленно отключается от голосового канала - PullRequest
0 голосов
/ 23 января 2020

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

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

Bot Ready For Use
joined channel
left channel

Спасибо!

Мой код

var voiceChannel = message.member.voiceChannel;

if (!message.member.voiceChannel) return message.channel.send(`You do realize you have to be in a voice channel to do that, right ${message.author.username}?`)

if (!message.member.voiceConnection) voiceChannel.join().then(async connection => {

    let streamURL = args.slice(1).join(" ")
    let streamTitle = "";
    let streamThumb = "";
    let streamAuth = "";
    let streamAuthThumb = "";

    if (streamURL.includes("https://www.youtube.com") || streamURL.includes("https://youtu.be/") && !streamURL.includes(' ')) {
        let results = await youtube.getVideo(streamURL)

        let {
            body
        } = await snekfetch.get(`https://www.googleapis.com/youtube/v3/channels?part=snippet&id=${results.channel.id}&fields=items%2Fsnippet%2Fthumbnails&key=${ytapikey}`).query({
            limit: 800
        })

        streamTitle = results.title
        streamThumb = results.thumbnails.medium.url
        streamAuth = results.channel.title
        streamAuthThumb = body.items[0].snippet.thumbnails.medium.url

    } else if (!streamURL.includes("https://www.youtube.com") || !streamURL.includes("https://youtu.be/")) {

        let results = await youtube.searchVideos(streamURL)

        let {
            body
        } = await snekfetch.get(`https://www.googleapis.com/youtube/v3/channels?part=snippet&id=${results[0].channel.id}&fields=items%2Fsnippet%2Fthumbnails&key=${ytapikey}`).query({
            limit: 800
        })

        streamURL = results[0].url
        streamTitle = results[0].title
        streamThumb = results[0].thumbnails.medium.url
        streamAuth = results[0].channel.title
        streamAuthThumb = body.items[0].snippet.thumbnails.medium.url

    } else {
        return message.reply("I can only play videos from YouTube (#NotSponsored).")
    }

    console.log("joined channel");
    const stream = ytdl('https://www.youtube.com/watch?v=gOMhN-hfMtY', {
        filter: 'audioonly'
    });
    const dispatcher = connection.playStream(stream, {
        seek: 0,
        volume: 1
    });
    dispatcher.on("end", end => {
        console.log("left channel");
        voiceChannel.leave();
    });

    let musicEmbed = new Discord.RichEmbed()
        .setAuthor(streamAuth, streamAuthThumb)
        .setTitle(`Now Playing:`)
        .addField(`${streamAuth}`, `${streamTitle}`)
        .setImage(streamThumb)
        .setColor(embedRed)
        .setFooter(`${streamAuth} - ${streamTitle} (${streamURL}`)

    message.channel.send(musicEmbed)

}).catch(console.error);
break

Список модулей

discord.js
simple-youtube-api
node-opus
ffmpeg
ffbinaries
ffmpeg-binaries
opusscript
snekfetch
node-fetch
ytdl-core

Нажмите здесь , чтобы использовать мой образец бота через repl.it .

Еще раз спасибо!

...