[RESOLVIDO] Não estou conseguindo implementar uma queue ou fila de musicas(como preferir chamar) no meu bot do discord

Aqui está o meu código, eu comentei a parte que acho ser o problema, já perdi horas tentando resolver, como dito no meu comentário no código, sempre que eu apagava o If o bot voltava a reproduzir, mas apenas uma musica pois a função de fila simplesmente não estava certa, se você puder tirar um tempinho para me ajudar eu ficaria muito agradecido, continuarei tentando até que obtenha uma solução (Caso precise de alguma informação a mais apenas me pergunte)

const Discord = require(‘discord.js’);

const Youtube = require(‘simple-youtube-api’);

const Ytdl = require(‘ytdl-core’);

const {TOKEN_DISCORD, GOOGLE_KEY } = require(’./config.js’);

const youtube = new Youtube(GOOGLE_KEY);

const app = new Discord.Client();

const prefixoComando = ‘!’;

const filaDeMusicas = [];

let estouPronto = false;

app.on(‘ready’, () => {

console.log('Estou conectado!');

});

app.on(‘message’, async (msg) => {

// !join = Bot se junta ao canal de voz

if (msg.content === `${prefixoComando}join`){

  if (msg.member.voice.channel){ 

        

        connection = await msg.member.voice.channel.join();

        estouPronto = true;

  } else {

        msg.channel.send('Você precisa entrar em um canal de voz ');

  }

}



else if (msg.content === `${prefixoComando}leave`){

  if (msg.member.voice.channel){ 

        msg.member.voice.channel.leave();

        estouPronto = false;

        msg.channel.send('Saindo :)')

  } else {

        msg.channel.send('Você precisa estar conectado a um Canal de Voz');

  }

}



else if (msg.content.startsWith(`${prefixoComando}play `)){

    if (estouPronto){ 

        let oQueTocar = msg.content.replace(`${prefixoComando}play `,'');

        if (Ytdl.validateURL(oQueTocar)){

          filaDeMusicas.push(oQueTocar);

          if (filaDeMusicas === 1){ //acredito que o erro possa estar aqui, toda vez que eu apago esse if e deixo apenas 

                                    // if (Ytdl.validateURL(oQueTocar)){ filaDeMusicas.push(oQueTocar);}

                                    //ele volta a tocar musica, porém a funções de uma fila de musicas pra vir a seguir não funciona

          tocarMusica(msg);

            }

        } else {

          msg.channel.send('Link inválido ')

        }

        

        try { // tenta encontrar música por link

            let video = await youtube.getVideo(oQueTocar);

            msg.channel.send(`O video foi encontrado!: ${video.title}`);

        }catch (error) {

              try{

                 let videosPesquisados = await youtube.searchVideos(oQueTocar, 5);

                 let videoEncontrado; 

                 for (i in videosPesquisados){

                      videoEncontrado = await youtube.getVideoByID(videosPesquisados[i].id);

                      msg.channel.send(`${videoEncontrado.title}`)

                 }

          msg.channel.send({embed: {

            color:3447003,

            description: 'Você poderia clicar na reação que representa qual musica você gostaria? Assim posso saber exatamente o que você quer ^^ '

          }}).then( async (embedMessage) => {

              await embedMessage.react('1️⃣');

              await embedMessage.react('2️⃣');

              await embedMessage.react('3️⃣');

              await embedMessage.react('4️⃣');

              await embedMessage.react('5️⃣');

              const filter = (reaction, user) =>{

                return['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣'].includes(reaction.emoji.name)

                && user.id === msg.author.id;

              }

              let collector = embedMessage.createReactionCollector(filter, {time: 20000});

              collector.on('collect', async (reaction, reactionCollector) => {

                if(reaction.emoji.name === '1️⃣'){

                  msg.channel.send('Reagiu com 1️⃣ ');

                }

                else if(reaction.emoji.name === '2️⃣'){

                  msg.channel.send('Reagiu com 2️⃣ ');

                }

                else if(reaction.emoji.name === '3️⃣'){

                  msg.channel.send('Reagiu com 3️⃣ ');

                }

                else if(reaction.emoji.name === '4️⃣'){

                  msg.channel.send('Reagiu com 4️⃣ ');

                }

                else if(reaction.emoji.name === '5️⃣'){

                  msg.channel.send('Reagiu com 5️⃣ ');

                }

              });

          });

              } catch (error) {

              }

            }

          }

        }

        });

function tocarMusica(msg){

connection.play(Ytdl(filaDeMusicas[0])).on(‘finish’, () =>{

filaDeMusicas.shift();

if(filaDeMusicas.length >=1){

    tocarMusica(msg);

}

});

}

app.login(TOKEN_DISCORD);

O seu console esta mostrando algum erro?

Aqui esta, eu nao sei nada sobre o discord mas eu avaliei o seu codigo de ponta-a-ponta e consegui encontrar varios erros graves de logica, mais alguns de para ajudar em better engineering e fiz sugestoes por todo canto, imagino que nessas sugestoes eu deva ter encontrado/nominado a solucao para o seu problema. Boa sorte!!

Como esse codigo ja havia comentarios, eu decidi separar o meu e o seu para nao ter confusao.
Reviewer: EU
Author: Você

Pastebin

Muito obrigado por revisar meu código, eu ainda não sou muito experiente, mas estou procurando melhorar, quando vi seu comentário sobre o prefixo eu percebi que tinha mandado o código de quando ainda não tinha implementado o prefixo de forma mais global, porém o código era basicamente o mesmo com mudanças só nessa parte, muito obrigado mesmo pelos seus comentários graças a eles eu consegui resolver o problema, quando eu passei a comparar dessa forma o “filaDeMusicas” if(filaDeMusicas.length === 1){

          tocarMusica(msg);
        }  

a função começou a funcionar, mas também fiquei atento aos outros pontos que você tinha comentado, como eu disse ainda não sou muito experiente, mas estou procurando melhorar, sua ajuda com toda a certeza vai contribuir para o meu desenvolvimento como programador, sucesso pra tí amigo e mais uma vez agradeço muito por se disponibilizar a me ajudar resolver meu problema

1 curtida

Isso é o que importa! Continue evoluindo! Meus parabéns! Abraços!