Advertisement
Guest User

music

a guest
Jan 18th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.19 KB | None | 0 0
  1. const Discord = require('discord.js');
  2. const { Client, Util} = require('discord.js');
  3. const config = require("./config.json");
  4. const YouTube = require('simple-youtube-api');
  5. const ytdl = require('ytdl-core');
  6. const prefix = "!"
  7.  
  8. const client = new Client({ disableEveryone: true});
  9.  
  10. const youtube = new YouTube(config.GOOGLE_API_KEY);
  11. const PREFIX = config.prefix;
  12.  
  13. const queue = new Map();
  14.  
  15. client.on('warn', console.warn);
  16.  
  17. client.on('error', console.error);
  18.  
  19. client.on('ready', () => console.log('I am ready!'));
  20.  
  21. client.on('disconnect', () => console.log('I disconnected!'));
  22.  
  23. client.on('reconnecting', () => console.log('I am disconnecting!'));
  24.  
  25. client.on('voiceStateUpdate', (oldMember, newMember) => {
  26. let newUserChannel = newMember.voiceChannel
  27. let oldUserChannel = oldMember.voiceChannel
  28. const serverQueue = queue.get(oldMember.guild.id);
  29.  
  30.  
  31. if(oldUserChannel === undefined && newUserChannel !== undefined) {
  32. // User joines a voice channel
  33. } else if(newUserChannel === undefined){
  34.  
  35. // User leaves a voice channel
  36. if(oldMember.id === '522658354238324756'){
  37. return console.log("BOT");
  38. }
  39. else{
  40. if(client.guilds.get(oldMember.guild.id).voiceConnection != null){
  41. if(client.guilds.get(oldMember.guild.id).voiceConnection.channel.id === oldUserChannel.id){
  42. if(oldUserChannel.members.size < 2){
  43. serverQueue.songs = [];
  44. serverQueue.connection.dispatcher.end('No members left in the channel!')
  45. }
  46. }else{
  47. return console.log('not in the same voice channel');
  48. }
  49. }else{
  50. return undefined;
  51. }
  52. }
  53.  
  54.  
  55. }
  56. })
  57.  
  58.  
  59. client.on('message', async msg => { // eslint-disable-line
  60. if (msg.author.bot) return undefined;
  61. if (!msg.content.startsWith(PREFIX)) return undefined;
  62. const args = msg.content.split(' ');
  63. const searchString = args.slice(1).join(' ');
  64. const url = args[1];
  65. const serverQueue = queue.get(msg.guild.id);
  66.  
  67. if(msg.content.startsWith(`${PREFIX}play`)){
  68. const voiceChannel = msg.member.voiceChannel;
  69. if(!voiceChannel){
  70. var embedplay1 = new Discord.RichEmbed()
  71. .setTitle(`Please Connect To A Voice Channel To Play Something!`)
  72. .setColor(['GREEN'])
  73. return msg.channel.sendEmbed(embedplay1);
  74. }
  75. const permissions = voiceChannel.permissionsFor(msg.client.user);
  76. if(!permissions.has('CONNECT')){
  77. var embedplay2 = new Discord.RichEmbed()
  78. .setTitle(`I lack the right CONNECT to connect in these Voice Channel!`)
  79. .setColor(['GREEN'])
  80. return msg.channel.sendEmbed(embedplay2);
  81. }
  82. if (!permissions.has('SPEAK')){
  83. var embedplay3 = new Discord.RichEmbed()
  84. .setTitle(`I do not have the right to SPEAK to connect in these Voice Channel!`)
  85. .setColor(['GREEN'])
  86. return msg.channel.sendEmbed(embedplay3);
  87. }
  88.  
  89.  
  90.  
  91. if(url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)){
  92. const playlist = await youtube.getPlaylist(url);
  93. const videos = await playlist.getVideos();
  94. for(const video of Object.values(videos)){
  95. const video2 = await youtube.getVideoByID(video.id);
  96. await handleVideo(video2, msg, voiceChannel, true);
  97. }
  98. var embedplay4 = new Discord.RichEmbed()
  99. .setTitle(`Playlist: ${playlist.title} queued!`)
  100. .setColor(['GREEN'])
  101. return msg.channel.sendEmbed(embedplay4);
  102. }else{
  103. try{
  104. var video = await youtube.getVideo(url);
  105. }catch(error){
  106. try{
  107. var videos = await youtube.searchVideos(searchString, 10);
  108. let index = 0;
  109. var embedqueue5 = new Discord.RichEmbed()
  110. .setTitle(`Song Play list*`)
  111. .setDescription(`
  112. ${videos.map(video2 => `${++index}- ${video2.title}`).join('\n')}
  113. Please enter a number between 1-10 on,a Song select!`)
  114. .setColor(['GREEN'])
  115. msg.channel.sendEmbed(embedqueue5);
  116.  
  117. try{
  118. var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
  119. maxMatches: 1,
  120. time: 10000,
  121. errors: ['time']
  122. });
  123. }catch(err){
  124. console.error(err);
  125. var embedplay6 = new Discord.RichEmbed()
  126. .setTitle(`no or invalid number was entered. Demolition of the song selection!`)
  127. .setColor(['GREEN'])
  128. return msg.channel.sendEmbed(embedplay6);
  129. }
  130. const videoIndex = parseInt(response.first().content);
  131. var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
  132. }catch(err){
  133. console.error(err);
  134. var embedplay7 = new Discord.RichEmbed()
  135. .setTitle(`I could find no video!`)
  136. .setColor(['GREEN'])
  137. return msg.channel.sendEmbed(embedplay7);
  138. }
  139. }
  140. return handleVideo(video, msg, voiceChannel);
  141. }
  142.  
  143. } else if(msg.content.startsWith(`${PREFIX}skip`)) {
  144. if(!msg.member.voiceChannel){
  145. var embedskip1 = new Discord.RichEmbed()
  146. .setTitle(`You are in not in the Voice Channel!`)
  147. .setColor(['GREEN'])
  148. return msg.channel.sendEmbed(embedskip1);
  149. }
  150. if(!serverQueue){
  151. var embedskip2 = new Discord.RichEmbed()
  152. .setTitle(`There is nothing to Skip!`)
  153. .setColor(['GREEN'])
  154. return msg.channel.sendEmbed(embedskip2);
  155. }
  156. serverQueue.connection.dispatcher.end('Skip command has been used!');
  157. var embedskip3 = new Discord.RichEmbed()
  158. .setTitle(`⏩Skipped👍`)
  159. .setColor(['GREEN'])
  160. return msg.channel.sendEmbed(embedskip3);
  161. }
  162.  
  163. else if (msg.content.startsWith(`${PREFIX}leave`)){
  164. if(!msg.member.voiceChannel){
  165. var embedstop1 = new Discord.RichEmbed()
  166. .setTitle(`you're not in the voice channel!`)
  167. .setColor(['GREEN'])
  168. return msg.channel.sendEmbed(embedstop1);
  169. }
  170. if(!serverQueue){
  171. var embedstop2 = new Discord.RichEmbed()
  172. .setTitle(`There is nothing to leave!`)
  173. .setColor(['GREEN'])
  174. return msg.channel.sendEmbed(embedstop2);
  175. }
  176. serverQueue.songs = [];
  177. serverQueue.connection.dispatcher.end('Stop command has been used!');
  178. var embedstop3 = new Discord.RichEmbed()
  179. .setTitle(`⏩Skipped👍`)
  180. .setColor(['GREEN'])
  181. return msg.channel.sendEmbed(embedstop3);
  182. }
  183. else if(msg.content.startsWith(`${PREFIX}song`)){
  184. if(!serverQueue){
  185. var embedsong1 = new Discord.RichEmbed()
  186. .setTitle(`It does nothing at the moment!`)
  187. .setColor(['GREEN'])
  188. return msg.channel.sendEmbed(embedsong1);
  189. }
  190. var embedsong2 = new Discord.RichEmbed()
  191. .setTitle(`${serverQueue.songs[0].title}`)
  192. .setThumbnail(serverQueue.songs[0].thumbnail)
  193. .setDescription(`
  194. Von: ${serverQueue.songs[0].channel}
  195. Dauer: ${serverQueue.songs[0].duration}
  196. Link: ${serverQueue.songs[0].url}
  197. `)
  198. .setColor(['GREEN'])
  199. return msg.channel.sendEmbed(embedsong2);
  200. }
  201. else if(msg.content.startsWith(`${PREFIX}volume`)){
  202. if(!serverQueue){
  203. var embedvolume1 = new Discord.RichEmbed()
  204. .setTitle(`It does nothing at the moment!`)
  205. .setColor(['GREEN'])
  206. return msg.channel.sendEmbed(embedvolume1);}
  207. if(!args[1]){
  208. var embedvolume2 = new Discord.RichEmbed()
  209. .setTitle(`The current volume is: ${serverQueue.volume}`)
  210. .setColor(['GREEN'])
  211. return msg.channel.sendEmbed(embedvolume2);
  212. }
  213.  
  214. if(args[1]>0){
  215. serverQueue.volume = args[1];
  216. serverQueue.connection.dispatcher.setVolume(args[1] / 2000);
  217. serverQueue.mute = false;
  218. var embedvolume3 = new Discord.RichEmbed()
  219. .setTitle(`The volume is on ${args[1]} set`)
  220. .setColor(['GREEN'])
  221. return msg.channel.sendEmbed(embedvolume3);
  222. } else{
  223. var embedvolume4 = new Discord.RichEmbed()
  224. .setTitle(`Please enter a number >0 on!`)
  225. .setColor(['GREEN'])
  226. return msg.channel.sendEmbed(embedvolume4);
  227. }
  228. }
  229. else if(msg.content.startsWith(`${PREFIX}queue`)){
  230. if(!serverQueue){
  231. var embedqueue1 = new Discord.RichEmbed()
  232. .setTitle(`It does nothing at the moment!`)
  233. .setColor(['GREEN'])
  234. return msg.channel.sendEmbed(embedqueue1);
  235. }
  236. var embedqueue2 = new Discord.RichEmbed()
  237. .setTitle(`Song Queue`)
  238. .setDescription(`
  239. ${serverQueue.songs.map(song => `- ${song.title}`).join('\n')}
  240. Playing: ${serverQueue.songs[0].title}`)
  241. .setColor(['GREEN'])
  242. return msg.channel.sendEmbed(embedqueue2);
  243. }
  244. else if(msg.content.startsWith(`${PREFIX}stop`)){
  245. if(serverQueue && serverQueue.playing) {
  246. serverQueue.playing = false;
  247. serverQueue.connection.dispatcher.pause();
  248. var embedpause1 = new Discord.RichEmbed()
  249. .setTitle(`The song is stopped!`)
  250. .setColor(['GREEN'])
  251. return msg.channel.sendEmbed(embedpause1);
  252. }
  253. var embedpause2 = new Discord.RichEmbed()
  254. .setTitle(`It does nothing at the moment!`)
  255. .setColor(['GREEN'])
  256. return msg.channel.sendEmbed(embedpause2);
  257. }
  258. else if(msg.content.startsWith(`${PREFIX}run`)){
  259. if(serverQueue && !serverQueue.playing){
  260. serverQueue.playing = true;
  261. serverQueue.connection.dispatcher.resume();
  262. var embedresume1 = new Discord.RichEmbed()
  263. .setTitle(`The song keeps playing on!`)
  264. .setColor(['GREEN'])
  265. return msg.channel.sendEmbed(embedresume1);
  266. }
  267. var embedresume2 = new Discord.RichEmbed()
  268. .setTitle(`It does nothing at the moment!`)
  269. .setColor(['GREEN'])
  270. return msg.channel.sendEmbed(embedresume2);
  271. }
  272. else if(msg.content.startsWith(`${PREFIX}mute`)){
  273. if(!serverQueue){
  274. var embedmute1 = new Discord.RichEmbed()
  275. .setTitle(`It does nothing at the moment!`)
  276. .setColor(['GREEN'])
  277. return msg.channel.sendEmbed(embedmute1);
  278. }
  279. if(serverQueue.mute){
  280. var embedmute2 = new Discord.RichEmbed()
  281. .setTitle(`The music Bot is already muted!`)
  282. .setColor(['GREEN'])
  283. return msg.channel.sendEmbed(embedmute2);
  284. }
  285. else{
  286. serverQueue.mute = true;
  287. serverQueue.connection.dispatcher.setVolume(0 / 2000);
  288. var embedmute3 = new Discord.RichEmbed()
  289. .setTitle(`The music Bot was muted!`)
  290. .setColor(['GREEN'])
  291. return msg.channel.sendEmbed(embedmute3);
  292. }
  293. }
  294. else if(msg.content.startsWith(`${PREFIX}unmute`)){
  295. if(!serverQueue){
  296. var embedunmute1 = new Discord.RichEmbed()
  297. .setTitle(`It does nothing at the moment!`)
  298. .setColor(['GREEN'])
  299. return msg.channel.sendEmbed(embedunmute1);
  300. }
  301. if(!serverQueue.mute){
  302. var embedunmute2 = new Discord.RichEmbed()
  303. .setTitle(`The Music Bot is already unmuted!`)
  304. .setColor(['GREEN'])
  305. return msg.channel.sendEmbed(embedunmute2);
  306. }
  307. else{
  308. serverQueue.mute = false;
  309. serverQueue.connection.dispatcher.setVolume(serverQueue.volume / 2000);
  310. var embedunmute3 = new Discord.RichEmbed()
  311. .setTitle(`The Music Bot has been unmuted!`)
  312. .setColor(['GREEN'])
  313. return msg.channel.sendEmbed(embedunmute3);
  314. }
  315. }
  316. else if(msg.content.startsWith(`${PREFIX}help`)){
  317. var embedhelp = new Discord.RichEmbed()
  318. .setTitle(`marcos-MusicBot Commands`)
  319. .addField("#invite", "Add Me The Bot Type #invite", false)
  320. .addField("#invite", "#invite لي اضف البوت اكتب", false)
  321. .addField("#createcolors", "To make colors, Type", false)
  322. .addField("#createcolors", "#createcolors لكي تصنع الوان اكتب", false)
  323. .setColor(['GREEN'])
  324. .setThumbnail(client.user.avatarURL)
  325. return msg.channel.sendEmbed(embedhelp);
  326. }
  327. return undefined;
  328. });
  329.  
  330.  
  331. async function handleVideo(video, msg, voiceChannel, playlist=false){
  332. const serverQueue = queue.get(msg.guild.id);
  333.  
  334. const song = {
  335. id: video.id,
  336. title: Util.escapeMarkdown(video.title),
  337. url: `https://www.youtube.com/watch?v=${video.id}`,
  338. thumbnail: video.thumbnails.default.url,
  339. channel: video.channel.title,
  340. duration: `${video.duration.hours}hrs : ${video.duration.minutes}min : ${video.duration.seconds}sec`
  341. };
  342. if(!serverQueue){
  343. const queueConstruct = {
  344. textChannel: msg.channel,
  345. voiceChannel: voiceChannel,
  346. connection: null,
  347. songs: [],
  348. volume: 2000,
  349. mute: false,
  350. playing: true
  351. };
  352. queue.set(msg.guild.id, queueConstruct);
  353.  
  354. queueConstruct.songs.push(song);
  355.  
  356. try{
  357. var connection = await voiceChannel.join();
  358. queueConstruct.connection = connection;
  359. play(msg.guild, queueConstruct.songs[0]);
  360. }catch(error){
  361. console.log(error);
  362. queue.delete(msg.guild.id);
  363. var embedfunc1 = new Discord.RichEmbed()
  364. .setTitle(`Bot could not VoiceChannel the join!`)
  365. .setColor(['GREEN'])
  366. return msg.channel.sendEmbed(embedfunc1);
  367. }
  368. } else {
  369. serverQueue.songs.push(song);
  370. console.log(serverQueue.songs);
  371. if(playlist) return undefined;
  372. else{
  373. var embedfunc2 = new Discord.RichEmbed()
  374. .setTitle(`${song.title} queued!`)
  375. .setColor(['GREEN'])
  376. return msg.channel.sendEmbed(embedfunc2);
  377. }
  378. }
  379. return undefined;
  380. }
  381.  
  382. function play(guild, song){
  383. const serverQueue = queue.get(guild.id);
  384.  
  385. if(!song){
  386. serverQueue.voiceChannel.leave();
  387. queue.delete(guild.id);
  388. return;
  389. }
  390. console.log(serverQueue.songs);
  391.  
  392. const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
  393. .on('end', reason => {
  394. if(reason === 'Stream is not generating quickly enough.') console.log('Song ended');
  395. else console.log(reason);
  396. serverQueue.songs.shift();
  397. setTimeout(() => {
  398. play(guild, serverQueue.songs[0]);
  399. }, 250);
  400. })
  401. .on('error', error => console.log(error));
  402.  
  403. dispatcher.setVolume(serverQueue.volume / 2000);
  404.  
  405. var messagefunction1 = new Discord.RichEmbed()
  406. .setTitle(`Playing 🎶 ${song.title} -now`)
  407. .setColor(['GREEN'])
  408. return serverQueue.textChannel.sendEmbed(messagefunction1);
  409. }
  410.  
  411. client.login(process.env.BOT_TOKEN);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement