2017-10-17 15 views
0

Je crée un bot Discord qui joue de la musique, je l'ai fonctionné mais il a seulement la capacité de jouer une chanson, et quand vous liez le bot à une chanson différente au lieu d'attendre la fin de la première chanson, va juste annuler la première chanson et aller directement à la seconde. J'utilise discord.js, et j'ai mis mon code dans GitHub. Voici mon code: `Comment faire en sorte que mon robot de musique discordant ait une file d'attente pour la musique?

if(command === '!music') { 
    var link = arg1 
    console.log(link) 
    const ytdl = require('ytdl-core'); 
    const streamOptions = { seek: 0, volume: 1 }; 
    const broadcast = bot.createVoiceBroadcast(); 

    if(link === undefined) { 
     bot.guilds.get(guildid).channels.get(generalchan).send("You need to put a link after !music to put a song in the queue") 
    } else { 
     if (message.member.voiceChannel) { 
      message.member.voiceChannel.join() 
       .then(connection => { // Connection is an instance of VoiceConnection 
       message.reply('SONG : ' + link); 
       const streamOptions = { seek: 0, volume: arg2/100, filter : "audioonly" }; 
       connection.playStream(ytdl(link), streamOptions); 
      }) 
     } else { 
      message.reply("You need to be in a voice channel for me to join") 
     } 
    } 
}' 

Je voudrais aussi que l'aide sur un vote saut fonction où les gens peuvent voter pour sauter une chanson qui est en cours de lecture et d'aller à la chanson suivante.

+0

Pouvez-vous inclure le code à la question? – guest271314

+0

Je viens de le faire, j'espère que vous pourrez m'aider – kittrz

Répondre

1

Vous devez mettre en file d'attente vos chansons.

Ce bot que je vais vous montrer fonctionne également sur plusieurs serveurs sans interrompre les canaux qui utilisent déjà cette fonction.

Vous lui dites, entre autres choses, de jouer la chanson suivante dans la file:

var servers = {}; 

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

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

    server.dispatcher.setVolume(0.2); 

    server.queue.shift(); 

    server.dispatcher.on("end", function() { 

    if (server.queue[0]) play(connection, message); 
    else connection.disconnect(); 

}); 

} 

Le .server vous aurez besoin si vous voulez faire ce travail sur plusieurs serveurs en même temps .

J'ai aussi le commutateur:

switch (args[0]) { 
case "play": 
     if (!args[1]) { 
      message.reply("Please provide a link") 
      return; 
     } 
     if (!message.member.voiceChannel) { 
      message.channel.send("You must be in a voice channel!") 
      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.voiceChannel.join().then(function (connection) { 
       play(connection, message); 
     }); 
     break; 
case "skip": 
     var server = servers[message.guild.id]; 

     if (server.dispatcher) server.dispatcher.end(); 
     break; 

case "stop": 
     var server = servers[message.guild.id]; 

     if (message.guild.voiceConnection) message.guild.voiceConnection.disconnect(); 
     break; 
} 

Et là je demande au contenu du message.

Dans la section « jouer » Je demande aussi si un lien a été donné avec le si args [1]

Dans la section « sauter » je force le répartiteur pour mettre fin à la chanson et commencer la suivante que est dans la file d'attente.

Dans la section "stop", le robot quitte le canal vocal