JohnTomah

Music JS

Mar 21st, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const ytdl = require("ytdl-core");
  2. const { Client, Util } = require('discord.js');
  3. const getYoutubeID = require('get-youtube-id');
  4. const fetchVideoInfo = require('youtube-info');
  5. const YouTube = require('simple-youtube-api');
  6. const youtube = new YouTube("AIzaSyAdORXg7UZUo7sePv97JyoDqtQVi3Ll0b8");
  7. const queue = new Map();
  8.  
  9.  
  10.  
  11.  
  12. client.on('message', async msg => {
  13.   if (msg.author.bot) return undefined;
  14.   if (!msg.content.startsWith(prefix)) return undefined;
  15.   const args = msg.content.split(' ');
  16.   const searchString = args.slice(1).join(' ');
  17.   const url = args[1] ? args[1] .replace(/<(.+)>/g, '$1') : '';
  18.   const serverQueue = queue.get(msg.guild.id);
  19.   let command = msg.content.toLowerCase().split(" ")[0];
  20.   command = command.slice(prefix.length)
  21.   if (command === `play`) {
  22.     const voiceChannel = msg.member.voiceChannel;
  23.     if (!voiceChannel) return msg.channel.send('يجب توآجد حضرتك بروم صوتي .');
  24.     const permissions = voiceChannel.permissionsFor(msg.client.user);
  25.     if (!permissions.has('CONNECT')) {
  26.       return msg.channel.send('لا يتوآجد لدي صلاحية للتكلم بهذآ الروم');
  27.     }
  28.     if (!permissions.has('SPEAK')) {
  29.       return msg.channel.send('لا يتوآجد لدي صلاحية للتكلم بهذآ الروم');
  30.     }
  31.  
  32.     if (!permissions.has('EMBED_LINKS')) {
  33.       return msg.channel.sendMessage("**يجب توآفر برمشن `EMBED LINKS`لدي **rl")
  34.       }
  35.  
  36.     if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
  37.       const playlist = await youtube.getPlaylist(url);
  38.       const videos = await playlist.getVideos();
  39.       for (const video of Object.values(videos)) {
  40.         const video2 = await youtube.getVideoByID(video.id);
  41.         await handleVideo(video2, msg, voiceChannel, true);
  42.       }
  43.       return msg.channel.send(` **${playlist.title}** تم الإضآفة إلى قأئمة التشغيل`);
  44.     } else {
  45.       try {
  46.  
  47.         var video = await youtube.getVideo(url);
  48.  
  49.       } catch (error) {
  50.         try {
  51.                           var fast = {};
  52.           var videos = await youtube.searchVideos(searchString, 10);
  53.           let index = 0;
  54.           const embed1 = new Discord.RichEmbed()
  55.               .setDescription(`**الرجآء من حضرتك إختيآر رقم المقطع** :
  56. ${videos.map(video2 => `[**${++index}**] **${video2.title}**`).join('\n')}`)
  57.           .setFooter(`${msg.guild.name}`)
  58.             .setThumbnail('https://e.top4top.net/p_1001lsv3w1.png')
  59.  
  60.           msg.channel.sendEmbed(embed1).then(message =>{
  61.  
  62.             message.delete(15000)
  63.  
  64.           });
  65.           try {
  66.             var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
  67.               maxMatches: 1,
  68.               time: 20000,
  69.               errors: ['time']
  70.             })
  71.  
  72.             }catch(err) {
  73.             console.error(err);
  74.             return msg.channel.send('لم يتم إختيآر مقطع صوتي');
  75.             }
  76.           const videoIndex = parseInt(response.first().content);
  77.           var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
  78.         } catch (err) {
  79.           console.error(err);
  80.           return msg.channel.send(':x: لا يتوفر نتآئج بحث ');
  81.         }
  82.     }
  83.  
  84.       return handleVideo(video, msg, voiceChannel);
  85.     }
  86.   } else if (command === `skip`) {
  87.     if (!msg.member.voiceChannel) return msg.channel.send('أنت لست بروم صوتي .');
  88.     if (!serverQueue) return msg.channel.send('لا يتوفر مقطع لتجآوزه');
  89.     serverQueue.connection.dispatcher.end('تم تجآوز هذآ المقطع');
  90.     return undefined;
  91.   } else if (command === `stop`) {
  92.     if (!msg.member.voiceChannel) return msg.channel.send('أنت لست بروم صوتي .');
  93.     if (!serverQueue) return msg.channel.send('لا يتوفر مقطع لإيقآفه');
  94.     serverQueue.songs = [];
  95.     serverQueue.connection.dispatcher.end('تم إيقآف هذآ المقطع');
  96.     return undefined;
  97.   } else if (command === `vol`) {
  98.     if (!msg.member.voiceChannel) return msg.channel.send('أنت لست بروم صوتي .');
  99.     if (!serverQueue) return msg.channel.send('لا يوجد شيء شغآل.');
  100.     if (!args[1]) return msg.channel.send(`:loud_sound: مستوى الصوت **${serverQueue.volume}**`);
  101.     serverQueue.volume = args[1];
  102.     serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 50);
  103.     return msg.channel.send(`:speaker: تم تغير الصوت الي **${args[1]}**`);
  104.   } else if (command === `np`) {
  105.     if (!serverQueue) return msg.channel.send('لا يوجد شيء حالي ف العمل.');
  106.     const embedNP = new Discord.RichEmbed()
  107.   .setDescription(`:notes: الان يتم تشغيل : **${serverQueue.songs[0].title}**`)
  108.     return msg.channel.sendEmbed(embedNP);
  109.   } else if (command === `replay`) {
  110.     if (!serverQueue) return msg.channel.send('لا يوجد شيء حالي ف العمل.');
  111.     const embedNP = new Discord.RichEmbed()
  112.   .setDescription(`سيتم اعاده تشغيل الفديو :**${serverQueue.songs[0].title}**`)
  113.   msg.channel.send({embed: embedNP})
  114.      return handleVideo(video, msg, msg.member.voiceChannel);
  115.  
  116.   } else if (command === `queue`) {
  117.     if (!serverQueue) return msg.channel.send('لا يوجد شيء حالي ف العمل.');
  118.     let index = 0;
  119.     const embedqu = new Discord.RichEmbed()
  120. .setDescription(`**Songs Queue**
  121. ${serverQueue.songs.map(song => `**${++index} -** ${song.title}`).join('\n')}
  122. **الان يتم تشغيل** ${serverQueue.songs[0].title}`)
  123.     return msg.channel.sendEmbed(embedqu);
  124.   } else if (command === `pause`) {
  125.     if (serverQueue && serverQueue.playing) {
  126.       serverQueue.playing = false;
  127.       serverQueue.connection.dispatcher.pause();
  128.       return msg.channel.send('تم إيقاف الموسيقى مؤقتا!');
  129.     }
  130.     return msg.channel.send('لا يوجد شيء حالي ف العمل.');
  131.   } else if (command === "resume") {
  132.     if (serverQueue && !serverQueue.playing) {
  133.       serverQueue.playing = true;
  134.       serverQueue.connection.dispatcher.resume();
  135.       return msg.channel.send('استأنفت الموسيقى بالنسبة لك !');
  136.     }
  137.     return msg.channel.send('لا يوجد شيء حالي في العمل.');
  138.   }
  139.  
  140.   return undefined;
  141. async function handleVideo(video, msg, voiceChannel, playlist = false) {
  142.   const serverQueue = queue.get(msg.guild.id);
  143.   const song = {
  144.     id: video.id,
  145.     title: Util.escapeMarkdown(video.title),
  146.     url: `https://www.youtube.com/watch?v=${video.id}`,
  147.     time:`${video.duration.hours}:${video.duration.minutes}:${video.duration.seconds}`,
  148.     eyad:`${video.thumbnails.high.url}`,
  149.     best:`${video.channel.title}`,
  150.     bees:`${video.raw.snippet.publishedAt}`,
  151.     shahd:`${video.raw.kind}`,
  152.     zg:`${video.raw.snippet.channelId}`,
  153.         views:`${video.raw.views}`,
  154.         like:`${video.raw.likeCount}`,
  155.         dislike:`${video.raw.dislikeCount}`,
  156.         hi:`${video.raw.id}`
  157.   };
  158.   if (!serverQueue) {
  159.     const queueConstruct = {
  160.       textChannel: msg.channel,
  161.       voiceChannel: voiceChannel,
  162.       connection: null,
  163.       songs: [],
  164.       volume: 5,
  165.       playing: true
  166.     };
  167.     queue.set(msg.guild.id, queueConstruct);
  168.     queueConstruct.songs.push(song);
  169.     try {
  170.       var connection = await voiceChannel.join();
  171.       queueConstruct.connection = connection;
  172.       play(msg.guild, queueConstruct.songs[0]);
  173.     } catch (error) {
  174.       console.error(`I could not join the voice channel: ${error}`);
  175.       queue.delete(msg.guild.id);
  176.       return msg.channel.send(`لا أستطيع دخول هذآ الروم ${error}`);
  177.     }
  178.   } else {
  179.     serverQueue.songs.push(song);
  180.     console.log(serverQueue.songs);
  181.     if (playlist) return undefined;
  182.     else return msg.channel.send(` **${song.title}** تم اضافه الاغنية الي القائمة!`);
  183.   }
  184.   return undefined;
  185. }
  186.  
  187. function play(guild, song) {
  188.   const serverQueue = queue.get(guild.id);
  189.  
  190.   if (!song) {
  191.     serverQueue.voiceChannel.leave();
  192.     queue.delete(guild.id);
  193.     return;
  194.   }
  195.   console.log(serverQueue.songs);
  196.   const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
  197.     .on('end', reason => {
  198.       if (reason === 'Stream is not generating quickly enough.') console.log('Song ended.');
  199.       else console.log(reason);
  200.       serverQueue.songs.shift();
  201.       play(guild, serverQueue.songs[0]);
  202.     })
  203.     .on('error', error => console.error(error));
  204.   dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
  205.     fetchVideoInfo(`${song.hi}`, function (err,  idk) {
  206.   if (err) throw new Error(err);
  207.   console.log( idk);
  208.       const yyyy = {}
  209.   if(!yyyy[msg.guild.id]) yyyy[msg.guild.id] = {
  210.     like: `${ idk.likeCount}`,
  211.     dislike: `${ idk.dislikeCount}`
  212.   }
  213.   serverQueue.textChannel.send({embed : new Discord.RichEmbed()
  214.   .setTitle(`**${ idk.title}**`)
  215.   .setURL( idk.url)
  216.   .addField('Time The Video :' , `${song.time}`, true)
  217.   .addField('Channel Name :' , `${song.best}`, true)
  218.   .addField('Channel ID :' , `${song.zg}`, true)
  219.   .addField('Video Created at :' , `${ idk.datePublished}`, true)
  220.   .addField('Views :' , `${ idk.views}`, true)
  221.   .addField('Like👍 :' , `${ idk.likeCount}`, true)
  222.   .addField('dislike👎 :' , `${ idk.dislikeCount}`, true)
  223.   .addField('comments :' , `${ idk.commentCount}`, true)
  224.   .setImage(`${song.eyad}`)
  225.   .setThumbnail('http://cdn.akhbaar24.com/430e061a-f89a-43c7-86d9-82fae5f7c495.jpg')
  226.   .setColor('#ff0000')
  227.   .setTimestamp()
  228.   }).then(love => {
  229.     love.react('👍').then(r=>{
  230.     love.react('👎').then(r =>{
  231.     love.react('🙌').then(r=> {
  232.     let likee = (reaction, user) => reaction.emoji.name === '👍' && user.id === msg.author.id;
  233.     let dislikee = (reaction, user) => reaction.emoji.name === '👎' && user.id === msg.author.id;
  234.     let cnn = (reaction, user) => reaction.emoji.name === '🙌' && user.id === msg.author.id;
  235.  
  236.     let ll = love.createReactionCollector(likee , {max:5});
  237.     let dd = love.createReactionCollector(dislikee , {max:5});
  238.     let cn = love.createReactionCollector(cnn , {max:5});
  239.  
  240.         ll.on("collect", r => {
  241.           yyyy[msg.guild.id].like++;
  242.   love.edit({embed : new Discord.RichEmbed()
  243.   .setTitle(`**${ idk.title}**`)
  244.   .setURL( idk.url)
  245.   .addField('Time The Video :' , `${song.time}`, true)
  246.   .addField('Channel Name :' , `${song.best}`, true)
  247.   .addField('Channel ID :' , `${song.zg}`, true)
  248.   .addField('Video Created at :' , `${ idk.datePublished}`, true)
  249.   .addField('Views :' , `${ idk.views}`, true)
  250.   .addField('Like👍 :' , `${yyyy[msg.guild.id].like}`, true)
  251.   .addField('dislike👎 :' , `${ idk.dislikeCount}`, true)
  252.   .addField('comments :' , `${ idk.commentCount}`, true)
  253.   .setImage(`${song.eyad}`)
  254.   .setThumbnail('http://cdn.akhbaar24.com/430e061a-f89a-43c7-86d9-82fae5f7c495.jpg')
  255.   .setColor('#ff0000')
  256.   .setTimestamp()
  257. });
  258.     })
  259.  
  260.     dd.on("collect", r => {
  261.       yyyy[msg.guild.id].dislike++;
  262.   love.edit({embed : new Discord.RichEmbed()
  263.   .setTitle(`**${ idk.title}**`)
  264.   .setURL( idk.url)
  265.   .addField('Time The Video :' , `${song.time}`, true)
  266.   .addField('Channel Name :' , `${song.best}`, true)
  267.   .addField('Channel ID :' , `${song.zg}`, true)
  268.   .addField('Video Created at :' , `${ idk.datePublished}`, true)
  269.   .addField('Views :' , `${ idk.views}`, true)
  270.   .addField('Like👍 :' , `${ idk.likeCount}`, true)
  271.   .addField('dislike👎 :' , `${yyyy[msg.guild.id].dislike}`, true)
  272.   .addField('comments :' , `${ idk.commentCount}`, true)
  273.   .setImage(`${song.eyad}`)
  274.   .setThumbnail('http://cdn.akhbaar24.com/430e061a-f89a-43c7-86d9-82fae5f7c495.jpg')
  275.   .setColor('#ff0000')
  276.   .setTimestamp()
  277. });
  278. })
  279.     cn.on("collect", r => {
  280.   love.edit({embed : new Discord.RichEmbed()
  281.   .setTitle(`**${ idk.title}**`)
  282.   .setURL( idk.url)
  283.   .addField('Time The Video :' , `${song.time}`, true)
  284.   .addField('Channel Name :' , `${song.best}`, true)
  285.   .addField('Channel ID :' , `${song.zg}`, true)
  286.   .addField('Video Created at :' , `${ idk.datePublished}`, true)
  287.   .addField('Views :' , `${ idk.views}`, true)
  288.   .addField('Like👍 :' , `${ idk.likeCount}`, true)
  289.   .addField('dislike👎 :' , `${ idk.dislikeCount}`, true)
  290.   .addField('comments :' , `${ idk.commentCount}`, true)
  291.   .setImage(`${song.eyad}`)
  292.   .setThumbnail('http://cdn.akhbaar24.com/430e061a-f89a-43c7-86d9-82fae5f7c495.jpg')
  293.   .setColor('#ff0000')
  294.   .setTimestamp()
  295. });
  296. })
  297. })
  298. })
  299. })
  300. })
  301. })
  302. }
  303. });
Advertisement
Add Comment
Please, Sign In to add comment