Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.03 KB | None | 0 0
  1. const YouTube = require('simple-youtube-api');
  2. const apikey = "api"
  3. const yt = new YouTube(apikey);
  4. const ytdl = require('ytdl-core-discord');
  5. const moment = require('moment');
  6. const Discord = require('discord.js');
  7. const prism = require('prism-media');
  8. const fs = require('fs');
  9. exports.func = async ({client, message, args, opts, member}) => {
  10.  
  11.  
  12. try {
  13. if (!message.member.voiceChannel)
  14. return message.reply(" entre em um canal de voz antes para que eu possa soltar o som...");
  15. if(!args)
  16. return message.reply(" coloque um link (YouTube) ou nome da música para que eu possa toca-la!");
  17. if(message.guild.me.voiceChannel && message.guild.me.voiceChannelID!=message.member.voiceChannelID)
  18. return message.reply(" o DJ "+client.user+" está ocupado no momento tocando em outro canal!");
  19.  
  20. else{
  21. try {
  22. let data = opts.map.get(message.guild.id) || {};
  23. if(!data.queue)
  24. data.queue = [];
  25. data.guildID = message.guild.id;
  26. let check = /^.*(youtu.be\/|list=)([^#\&\?]*).*/;
  27. if(args[0].match(check)){
  28. let playlist = await yt.getPlaylist(args[0]);
  29. let videos = await playlist.getVideos();
  30. for(let i=0;i<videos.length;i++){
  31. data.queue.push({
  32. nome:videos[i].title,
  33. qr:message.author,
  34. url:videos[i].url,
  35. canal:videos[i].channel.title,
  36. pub:videos[i].publishedAt,
  37. anuncio:message.channel.id
  38. });
  39. }
  40. if(!data.connection)
  41. data.connection = await message.member.voiceChannel.join();
  42. if(!data.dispatcher)
  43. await play(client,opts,data);
  44. else{
  45. message.channel.send(playlist.title+" adicionada a fila!");
  46. }
  47. }
  48. if(!args[0].match(check)){
  49. let song = await yt.searchVideos(args.join(" "),5);
  50. let escolhida=null;
  51. let embed= new Discord.RichEmbed().setTitle('Escolha de 1 a 5')
  52. .addField('Resultados da busca:',song.map(r=>(song.indexOf(r)+1)+'-'+r.title).join('\n'))
  53. .setColor('RANDOM')
  54. message.channel.send(embed).then(async (msg)=>{
  55. let emoji = ['1⃣',"2⃣","3⃣","4⃣","5⃣"];
  56. for (let i=0;i<5;i++){
  57.  
  58.  
  59. await msg.react(emoji[i]);
  60. }
  61. const filter = (r, u) => r.me && u.id === message.author.id;
  62. const collector = msg.createReactionCollector(filter, {max: 1, time: 60 * 1000 });
  63.  
  64. collector.on('collect', async (e)=>{
  65. msg.delete();
  66.  
  67. switch (e.emoji.name) {
  68. case emoji[0]:
  69. escolhida=song[0];
  70. break;
  71. case emoji[1]:
  72. escolhida=song[1];
  73. break;
  74. case emoji[2]:
  75. escolhida=song[2];
  76. break;
  77. case emoji[3]:
  78. escolhida=song[3];
  79. break;
  80. case emoji[4]:
  81. escolhida=song[4];
  82. break;
  83. default:message.channel.send('deu ruim')
  84. break;
  85. }
  86. data.queue.push({
  87. nome:escolhida.title,
  88. qr:message.author,
  89. url:escolhida.url,
  90. canal:escolhida.channel.title,
  91. pub:escolhida.publishedAt,
  92. anuncio:message.channel.id
  93. });
  94. if(!data.connection)
  95. data.connection = await message.member.voiceChannel.join();
  96. if(!data.dispatcher)
  97. await play(client,opts,data);
  98. else{
  99. message.channel.send(data.queue.slice(-1)[0].nome+" adicionada a fila!");
  100. }
  101. })
  102. })
  103. }
  104. opts.map.set(message.guild.id,data);
  105.  
  106. } catch(e) {
  107. console.log(e);
  108. if(e.code && e.code==403)
  109. message.channel.send('atualmente uso a API do YouTube de forma gratuita, e no momento atingi o limite da cota diária de requisições. Tente novamente mais tarde!');
  110. }
  111. }
  112. } catch(e) {
  113. message.channel.send(e.toString());
  114. }
  115. }
  116. async function play(client,opts,data){
  117.  
  118. data.dispatcher = await data.connection.playOpusStream(await ytdl(data.queue[0].url));
  119. data.dispatcher.on('start', () => {
  120. data.dispatcher.player.streamingData.pausedTime = 0;
  121. });
  122. data.dispatcher.guildID = data.guildID
  123. data.dispatcher.on('end',function(reason){
  124. console.log('Musica finalizada! razão = '+reason);
  125. finish(client, opts, this);
  126.  
  127. }).on('error', console.error);
  128. if(data.dispatcher){
  129. let embed = new Discord.RichEmbed().addField("Música:",'['+data.queue[0].nome+']('+data.queue[0].url+')').addField("Canal:",data.queue[0].canal)
  130. .addField("Publicado em:", moment(data.queue[0].pub).format("DD/MM/YYYY")).setFooter("Adicionada por: "+data.queue[0].qr.tag,data.queue[0].qr.avatarURL)
  131. .setColor('RANDOM');
  132. client.channels.get(data.queue[0].anuncio).send(embed);
  133. }
  134. }
  135.  
  136. function finish(client, opts, dispatcher){
  137. try {
  138. let fetched = opts.map.get(dispatcher.guildID);
  139. fetched.queue.shift();
  140. if(fetched.queue.length>0){
  141. opts.map.set(dispatcher.guildID,fetched);
  142. console.log("Musica passada =>"+fetched.queue[0].nome);
  143. play(client,opts,fetched);
  144. }else{
  145. opts.map.delete(dispatcher.guildID);
  146. let vc = client.guilds.get(dispatcher.guildID).me.voiceChannel;
  147. if(vc)
  148. vc.leave();
  149. console.log("Queue finalizada");
  150. }
  151. } catch (error) {
  152. console.log(error);
  153. }
  154. }
  155.  
  156.  
  157. exports.settings = {
  158. aliases: ['tocar']
  159. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement