修复不和谐音乐机器人队列

时间:2020-06-04 05:35:16

标签: javascript node.js discord discord.js

我在此观看的视频大约是9个月前制作的,队列不再有效。 它所做的只是播放一首新歌而不是将其排队。stop命令也不起作用。 我对Java语言真的很陌生,无法找到任何问题,但是我确定它有问题 不会产生任何错误。

我想大多数问题都是由于过时的代码引起的,但我不确定。 如果有人可以提供帮助,那就太好了。

bot.on('message', message => {

    if (!message.content.startsWith(PREFIX)) return;
    let args = message.content.substring(PREFIX.length).split(" ");


    switch(args[0]) {



        case 'play':

                if(usedCommandRecently4.has(message.author.id)){
                    message.reply("Your using this command to fast!");
                } else{
                    function play(connection, message){
                        var server = servers[message.guild.id];

                        server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"}));

                        server.queue.shift();

                        message.channel.send("``Music Bot v1.2`` \n Adding song to queue!");

                        server.dispatcher.on("end", function(){
                            if(server.queue[0]){
                                play(connection, message);
                            }else {
                                connection.disconnect();
                            }
                        })
                    }

                    if(!args[1]){
                        message.channel.send("``Music Bot v1.2`` \n you need to provide a link!!");
                        return;
                    }

                    if(!message.member.voice.channel){
                        message.channel.send("``Music Bot v1.2`` \n You must be in a voice channel to play music!");
                        return;
                    }

                    if(!servers[message.guild.id]) servers[message.guild.id] = {
                        queue: []
                    }

                    var server = servers[message.guild.id];

                    server.queue.push(args[1]);

                    if(!message.guild.voiceConnection)message.member.voice.channel.join().then(function(connection){

                        play(connection, message);

                    })

                    usedCommandRecently4.add(message.author.id);
                    setTimeout(() => {
                        usedCommandRecently4.delete(message.author.id)
                    }, 10000);
                }

            break;

            case 'skip':

                if(usedCommandRecently3.has(message.author.id)){
                    message.reply("Your using this command to fast!");
                } else{
                    var server = servers[message.guild.id];
                    if(server.dispatcher) server.dispatcher.end();
                    message.channel.send("``Music Bot v1.2`` \n Skipping the current song!")

                    usedCommandRecently3.add(message.author.id);
                    setTimeout(() => {
                        usedCommandRecently3.delete(message.author.id)
                    }, 3000);
                }

            break;

            case 'stop':
                var server = servers[message.guild.id];
                if(message.guild.voiceConnection){
                    for(var i = server.queue.length -1; i >=0; i--){
                        server.queue.splice(i, 1);
                    }

                    server.dispatcher.end();
                    message.channel.send("``Music Bot v1.2`` \n Ending the queue and Leaving the voice channel! \n This bot is in early development! \n if you have any problems with it dm Justice#6770!")
                    console.log('stopped the queue')
                }
            }

            if(message.guild.connection) message.guild.voiceConnection.disconnect();

})

2 个答案:

答案 0 :(得分:2)

我以此顺序解决了队列问题,这段代码的问题是当您向队列中添加歌曲时,第一首歌曲又从头开始,我不知道如何解决这个小问题

案例“播放”:

        function play(connection, message){
            var server = servers[message.guild.id];

            server.dispatcher = connection.play(ytdl(server.queue[0],{filter: "audio"}));



            server.dispatcher.on("finish", function(){
               server.queue.shift();
               if(server.queue[0]){
                   play(connection, message);
               }else {
                   connection.disconnect();
               }
            })

        }         

答案 1 :(得分:0)

由于message.guild.voiceConnection不再存在,停止命令可能被破坏。

您需要改用message.guild.voice.connection

关于队列问题,无论如何,您的play函数似乎总是在转移队列并播放新歌曲。您应该尝试移动

server.queue.shift();
server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"}));

按照此确切顺序,在 server.dispatcher.on("end", function(){ //...事件以查看是否有任何改变:)