【问题标题】:Fix discord music bot queue修复不和谐音乐机器人队列
【发布时间】:2020-09-23 00:24:43
【问题描述】:

我在这方面观看的视频是 9 个月前制作的,队列已不再有效。 它所做的只是播放一首新歌而不是排队停止命令也不起作用。 我对 Javascript 真的很陌生,无法找到任何问题,但我确定它的东西 这不会发出任何错误。

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

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();

})

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    我用这个顺序解决了队列问题,这个代码的问题是当你将一首歌曲添加到队列中时,第一首歌曲从头开始,我不知道如何解决这个小问题

    案例“玩”:

            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();
                   }
                })
    
            }         
    

    【讨论】:

    • 添加新音乐不会为我重新播放歌曲,但谢谢!这解决了我的队列!
    【解决方案2】:

    停止命令可能被破坏,因为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(){ //... 事件看看这是否改变了什么:)

    【讨论】:

    • 它给了我一个未定义的。停止命令现在也有效
    • @CIA 哦,很抱歉,实际上你现在需要播放这首歌 ^^' 你可以在 play(connection, message); 行之前粘贴 server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"})); :)
    • 尝试过每一场比赛(连接,消息);还没排队
    • 如果你能解释一下你想要它去哪里,那就太棒了
    • 我想到了if(!message.guild.voiceConnection)message.member.voice.channel.join().then(function(connection){里面的那个,但是既然你试过了,从现在开始我真的不知道如何帮助你......你可能想检查一个更新的教程
    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 2021-04-27
    • 2020-06-20
    • 2019-02-26
    • 1970-01-01
    • 2018-08-24
    • 2019-08-03
    • 2021-11-24
    相关资源
    最近更新 更多