Musi c проблема с ботом - PullRequest
3 голосов
/ 11 июля 2020

Я попытался написать свой собственный musi c бот, я нашел несколько видео и кодов для него ... но сейчас я использую, возможно, лучший код для него, но моя проблема в том, что он воспроизводит песню и затем, когда дело доходит до последних 10-15 сек c, музыка c просто останавливается без ошибок.

const Discord = require('discord.js');
const client = new Discord.Client();
const {prefix, token} = require("./config.json")

var queue = new Map();

const ytdl = require('ytdl-core');

client.on('ready', () => console.log("A Zongorista a helyén!"));

client.on('message', async (message) => {
    if(message.author.bot) return;
    if(message.content.indexOf(prefix) !== 0) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase();

    if(command == "play") {
        if(!args[0]) return;
        let url = args.join(" ");
        if(!url.match(/(youtube.com|youtu.be)\/(watch)?(\?v=)?(\S+)?/)) return message.channel.send("Érvényes Youtube linket használj!");

        let serverQueue = queue.get(message.guild.id);
        let vc = message.member.voice;

        if(!vc) return message.channel.send("Nem vagy voice szobában!");

        if(!vc.channel.permissionsFor(client.user).has('CONNECT') || !vc.channel.permissionsFor(client.user).has('SPEAK')) return message.channel.send("Nincs hozzá jogom!");

        let songinfo = await ytdl.getInfo(url);
        let song = {
            title: songinfo.title,
            url: songinfo.video_url
        }

        if(!serverQueue) {
            let queueConst = {
                textChannel: message.channel,
                voiceChannel: vc.channel,
                connection: null,
                songs: [],
                volume: 5,
                playing: true
            };

            queue.set(message.guild.id, queueConst);
            queueConst.songs.push(song);

            try {
                let connection = await vc.channel.join();
                queueConst.connection = connection
                playSong(message.guild, queueConst.songs[0])
            } catch (error) {
                console.log(error);
                queue.delete(message.guild.id);
                return message.channel.send("Hiba történt a lejátszáskor Hiba: " + error);
            }
        } else {
            serverQueue.songs.push(song);
            return message.channel.send(`${song.title} hozzá lett adva a lejátszási listához!`)
        }
    }
})

/**
 * 
 * @param {Discord.Guild} guild 
 * @param {Object} song 
 */
async function playSong(guild, song) {
    let serverQueue = queue.get(guild.id);

    if(!song){
        serverQueue.voiceChannel.leave();
        queue.delete(guild.id);
        return;
    }

    const dispatcher = serverQueue.connection.play(ytdl(song.url)).on('end', () => {
        serverQueue.songs.shift();
        playSong(guild, serverQueue.songs[0]);
    })
    .on('error', () => {
        console.log(error)
    })

    dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}

client.login(token)

1 Ответ

0 голосов
/ 20 августа 2020
if(command == "play") {
    if(!args[0]) return;
    let url = args.join(" ");
    if(!url.match(/(youtube.com|youtu.be)\/(watch)?(\?v=)?(\S+)?/)) return message.channel.send("Érvényes Youtube linket használj!");

    let serverQueue = queue.get(message.guild.id);
    let vc = message.member.voice;

    if(!vc) return message.channel.send("Nem vagy voice szobában!");

    if(!vc.channel.permissionsFor(client.user).has('CONNECT') || !vc.channel.permissionsFor(client.user).has('SPEAK')) return message.channel.send("Nincs hozzá jogom!");

    let songinfo = await ytdl.getInfo(url);
    let song = {
        title: songinfo.title,
        url: songinfo.video_url
    }
...