Advertisement
jensie1996

play met queue

Feb 2nd, 2019
1,992
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 KB | None | 0 0
  1. INDEX:
  2. const active = new Map();
  3.  
  4. var options = {
  5. active: active
  6. }
  7.  
  8. if (commands) commands.run(bot, message, args, options);
  9.  
  10.  
  11.  
  12.  
  13. const ytdl = require('ytdl-core');
  14.  
  15. module.exports.run = async (bot, message, args, ops) => {
  16.  
  17. if (!message.member.voiceChannel) return message.channel.send("Connecteer met een spraak kanaal");
  18.  
  19. // if (message.guild.me.voiceChannel) return message.channel.send("Sorry de bot is al geconecteerd met een spraak kanaal");
  20.  
  21. if (!args[0]) return message.channel.send("Sorry gelieven ene url mee te geven");
  22.  
  23. var validate = await ytdl.validateURL(args[0]);
  24.  
  25. if (!validate) return message.channel.send("Geef een juiste URL op");
  26.  
  27. var info = await ytdl.getInfo(args[0]);
  28.  
  29.  
  30. // Verkrijgen van de data als die er al is.
  31. var data = ops.active.get(message.guild.id) || {};
  32.  
  33. // Maak een connectie met het kanaal als die er nog niet is.
  34. if (!data.connection) data.connection = await message.member.voiceChannel.join();
  35. // Voeg een queue aan de data.
  36. if (!data.queue) data.queue = [];
  37. // Geef het ID mee.
  38. data.guildID = message.guild.id;
  39.  
  40. // Voeg de liedjes toe aan de lijst met volgende gegevens.
  41. // Titel, aanvrager, link, welk kanaal aangevraagd.
  42. data.queue.push({
  43. songTitle: info.title,
  44. requester: message.author.tag,
  45. url: args[0],
  46. announceChannel: message.channel.id
  47. });
  48.  
  49. // Als nog geen speelt dan roep play op anders gaan we enkel een bericht geven.
  50. if (!data.dispatcher) {
  51. Play(bot, ops, data);
  52. } else {
  53.  
  54. message.channel.send(`Toegevoegd aan de queue: ${info.title} | Aangevraagd door: ${message.author.tag}`);
  55.  
  56. }
  57.  
  58. // De data opslaan.
  59. ops.active.set(message.guild.id, data);
  60.  
  61. }
  62.  
  63. /**
  64. * Om het liedje af te spelen roepen we play op.
  65. *
  66. * @param {*} bot Gegevens van de bot.
  67. * @param {*} ops Opties die we meegeven. (Al de liedjes in de queue).
  68. * @param {*} data De data die we hebben opgevraagd.
  69. */
  70. async function Play(bot, ops, data) {
  71.  
  72. // Tekst geven welk liedje dat aan het spelen is.
  73. bot.channels.get(data.queue[0].announceChannel).send(`Nu aan het spelen: ${data.queue[0].songTitle} - Aangevraagd door: ${data.queue[0].requester}`);
  74.  
  75. // Opties meegeven. Bitrate is voor de duidelijkheid van het liedje.
  76. var options = { seek: 2, volume: 1, bitrate: 128000 };
  77.  
  78. // Speel de stream af met de opties.
  79. data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, { filter: "audioonly" }), options);
  80. // Sla het ID mee op. (Hebben we later nodig voor op te vragen welke liedjes er nog zijn in de queue.)
  81. data.dispatcher.guildID = data.guildID;
  82.  
  83. // Kijk na als het einde bereikt is en roep dan de functie Finish op.
  84. data.dispatcher.once('end', function () {
  85.  
  86. Finish(bot, ops, this);
  87.  
  88. });
  89.  
  90. }
  91.  
  92. /**
  93. * Als het liedje is gedaan dan gaan we eerst nakijken als er nog liedjes zijn en terug optarten
  94. * als geen liedje meer in lijst, dan stop alles en gooi bot uit kanaal.
  95. *
  96. * @param {*} bot Gegevens van de bot zelf.
  97. * @param {*} ops Opties die we meegegeven. (Al de data).
  98. * @param {*} dispatcher Oproep data mee geven.
  99. */
  100. function Finish(bot, ops, dispatcher) {
  101.  
  102. // Data verkrijgen van wat actief is.
  103. var fetchedData = ops.active.get(dispatcher.guildID);
  104.  
  105. // Wis het eerste liedje van de lijst.
  106. fetchedData.queue.shift();
  107.  
  108. // Als er nog liedjes zijn roep dan play op.
  109. if (fetchedData.queue.length > 0) {
  110.  
  111. ops.active.set(dispatcher.guildID, fetchedData);
  112.  
  113. Play(bot, ops, fetchedData);
  114.  
  115. } else { // Geen liedjes meer delete dan alles en haal bot uit kanaal.
  116.  
  117. ops.active.delete(dispatcher.guildID);
  118.  
  119. var voiceChannel = bot.guilds.get(dispatcher.guildID).me.voiceChannel;
  120.  
  121. if (voiceChannel) voiceChannel.leave();
  122.  
  123. }
  124.  
  125. }
  126.  
  127. module.exports.help = {
  128. name: "play",
  129. description: ""
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement