Advertisement
Guest User

Untitled

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