mirror of
				https://github.com/musix-org/musix-oss
				synced 2025-11-04 06:49:31 +00:00 
			
		
		
		
	Merge remote-tracking branch 'musix-v1/master' into v1
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/node_modules
 | 
				
			||||||
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								README.md
									
									
									
									
									
								
							@@ -1 +1,19 @@
 | 
				
			|||||||
# Musix OSS
 | 
					# Musix-V1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS VERSION OF MUSIX IS NO LONGER SUPPORTED!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Discord music bot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First version of Musix discord music bot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Made with discord.js V11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE! THIS BOT CANNOT BE USED AFTER OCTOBER 4TH 2020!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is due to new rules for bots by discord.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					npm install (idk how yarn works)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some modules are outdated to updating is recommended!
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										411
									
								
								index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										411
									
								
								index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,411 @@
 | 
				
			|||||||
 | 
					const { Client, Util } = require('discord.js');
 | 
				
			||||||
 | 
					const Discord = require('discord.js');
 | 
				
			||||||
 | 
					const YouTube = require('simple-youtube-api')
 | 
				
			||||||
 | 
					const ytdl = require('ytdl-core');
 | 
				
			||||||
 | 
					const PREFIX = ('-')
 | 
				
			||||||
 | 
					const client = new Client({ disableEveryone: true });
 | 
				
			||||||
 | 
					const youtube = new YouTube(process.env.API_KEY);
 | 
				
			||||||
 | 
					const queue = new Map();
 | 
				
			||||||
 | 
					client.login(process.env.BOT_TOKEN);
 | 
				
			||||||
 | 
					client.on('ready', () => {
 | 
				
			||||||
 | 
						client.user.setActivity('-help', { type: 'LISTENING' })
 | 
				
			||||||
 | 
						client.user.setStatus('dnd');
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					client.on('message', async msg => {
 | 
				
			||||||
 | 
						if (!msg.guild || msg.author.bot) return;
 | 
				
			||||||
 | 
						if (msg.content.toUpperCase().startsWith(`MUSIX`)) {
 | 
				
			||||||
 | 
							msg.channel.send('-help to see my commands.')
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (msg.content.startsWith(`${PREFIX}`)) {
 | 
				
			||||||
 | 
							var guildms = client.guilds.find(x => x.name === 'Musix Support')
 | 
				
			||||||
 | 
							var channelms = guildms.channels.find(x => x.name === 'log')
 | 
				
			||||||
 | 
							var guildId = msg.guild.id
 | 
				
			||||||
 | 
							if (!client.voiceConnections.has(guildId)) {
 | 
				
			||||||
 | 
								const embed = new Discord.RichEmbed()
 | 
				
			||||||
 | 
									.setTitle(`**User:** ${msg.author.id}, ${msg.member.displayName}, ${msg.author.tag}`)
 | 
				
			||||||
 | 
									.addField(`**Message channel:** ${msg.channel.name}`, `Client is not in a Voice channel.`)
 | 
				
			||||||
 | 
									.addField(`**Message Content:** ${msg.content}`, `**Message Guild:** ${msg.guild.name}, ${msg.guild.id}`)
 | 
				
			||||||
 | 
									.setColor('#b50002')
 | 
				
			||||||
 | 
								channelms.send(embed)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								const embed = new Discord.RichEmbed()
 | 
				
			||||||
 | 
									.setTitle(`**User:** ${msg.author.id}, ${msg.member.displayName}, ${msg.author.tag}`)
 | 
				
			||||||
 | 
									.addField(`**Message channel:** ${msg.channel.name}`, `**Voice channel:** ${client.voiceConnections.get(guildId).channel.name}, User Voice channel: ${msg.member.voiceChannel}`)
 | 
				
			||||||
 | 
									.addField(`**Message Content:** ${msg.content}`, `**Message Guild:** ${msg.guild.name}, ${msg.guild.id}`)
 | 
				
			||||||
 | 
									.setColor('#b50002')
 | 
				
			||||||
 | 
								channelms.send(embed)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.content === `${PREFIX}ping`) {
 | 
				
			||||||
 | 
								msg.channel.send(`My current Ping: **${Math.floor(client.ping * 10) / 10} ms**.`)
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.content === `${PREFIX}help`) {
 | 
				
			||||||
 | 
								const embed = new Discord.RichEmbed()
 | 
				
			||||||
 | 
									.setTitle('Commands for Musix!')
 | 
				
			||||||
 | 
									.addField('```-play | -p```', 'Play a song.', true)
 | 
				
			||||||
 | 
									.addField('```-queue | -q```', 'Display the queue.', true)
 | 
				
			||||||
 | 
									.addField('```-nowplaying | -np```', 'Display whats currently playing.', true)
 | 
				
			||||||
 | 
									.addField('```-volume```', 'Change or check the volume.', true)
 | 
				
			||||||
 | 
									.addField('```-pause```', 'Pause the music.', true)
 | 
				
			||||||
 | 
									.addField('```-resume```', 'Resume the music.', true)
 | 
				
			||||||
 | 
									.addField('```-stop```', 'Stop the music, Clear the queue and leave the current voice channel.', true)
 | 
				
			||||||
 | 
									.addField('```-skip | -s```', 'Skip a song.', true)
 | 
				
			||||||
 | 
									.addField('```-invite```', 'Invite Musix.', true)
 | 
				
			||||||
 | 
									.addField('```-ping```', 'See the current ping for Musix', true)
 | 
				
			||||||
 | 
									.addField('```-info```', 'Display info and instructions.', true)
 | 
				
			||||||
 | 
									.addField('```-help```', 'Display the help.', true)
 | 
				
			||||||
 | 
									.setAuthor('Musix', 'https://cdn.discordapp.com/avatars/572405135658188800/04c6f22b7600ddecfbc245dd3ec10f9f.png?size=2048')
 | 
				
			||||||
 | 
									.setColor('#b50002')
 | 
				
			||||||
 | 
								msg.channel.send(embed);
 | 
				
			||||||
 | 
								return undefined;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.content === `${PREFIX}info`) {
 | 
				
			||||||
 | 
								var line = '**>-----------------------------------------------------------------------<**';
 | 
				
			||||||
 | 
								var dj = msg.guild.roles.find(x => x.name === 'DJ') ? true : false;
 | 
				
			||||||
 | 
								const embed = new Discord.RichEmbed()
 | 
				
			||||||
 | 
									.setTitle('**Musix instructions and info**:')
 | 
				
			||||||
 | 
									.addField('If your current guild has a role called \'DJ\' you will need it to use music commands! If your current guild doesn\'t have a role called \'DJ\' everyone can use music commands!', 'DJ role existance: ' + dj, true)
 | 
				
			||||||
 | 
									.addField('If you encounter any errors with musix please report about them on the offical musix support server!', 'https://discord.gg/rvHuJtB', true)
 | 
				
			||||||
 | 
									.addField('On errors you can do -stop to reset the queue and try again!', line, true)
 | 
				
			||||||
 | 
									.addField('Current Ping in milliseconds', `${Math.floor(client.ping * 10) / 10} ms`, true)
 | 
				
			||||||
 | 
									.addField('Be careful with the Volume command! Volume is not recommended to be put over 3 with user volume at 100%!', 'Volume will reset to 1 always when a new song begins!', true)
 | 
				
			||||||
 | 
									.setAuthor('Musix', 'https://cdn.discordapp.com/avatars/572405135658188800/04c6f22b7600ddecfbc245dd3ec10f9f.png?size=2048')
 | 
				
			||||||
 | 
									.setColor('#b50002')
 | 
				
			||||||
 | 
								msg.channel.send(embed);
 | 
				
			||||||
 | 
								return undefined;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.content === `${PREFIX}invite`) {
 | 
				
			||||||
 | 
								msg.channel.send('Invite me with: https://bit.ly/2VGcuBR')
 | 
				
			||||||
 | 
								return undefined;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.member.guild.roles.find(x => x.name === 'DJ')) {
 | 
				
			||||||
 | 
								if (msg.member.roles.find(x => x.name === 'DJ')) {
 | 
				
			||||||
 | 
									const args = msg.content.split(' ');
 | 
				
			||||||
 | 
									const searchString = args.slice(1).join(' ');
 | 
				
			||||||
 | 
									const url = args[1] ? args[1].replace(/<(.+)>/g, '$1') : '';
 | 
				
			||||||
 | 
									const serverQueue = queue.get(msg.guild.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									let command = msg.content.toLowerCase().split(' ')[0];
 | 
				
			||||||
 | 
									command = command.slice(PREFIX.length)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (command === 'play' || command === 'p') {
 | 
				
			||||||
 | 
										if (!args[1]) return msg.channel.send(':x: I\'m sorry but you didn\'t specify a song');
 | 
				
			||||||
 | 
										const voiceChannel = msg.member.voiceChannel;
 | 
				
			||||||
 | 
										if (!voiceChannel) return msg.channel.send(':x: I\'m sorry but you need to be in a voice channel to play music!');
 | 
				
			||||||
 | 
										const permissions = voiceChannel.permissionsFor(msg.client.user);
 | 
				
			||||||
 | 
										if (!permissions.has('CONNECT')) {
 | 
				
			||||||
 | 
											return msg.channel.send(':x: I cannot connect to your voice channel, make sure I have the proper permissions!');
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if (!permissions.has('SPEAK')) {
 | 
				
			||||||
 | 
											return msg.channel.send(':x: I cannot speak in this voice channel, make sure I have the proper permissions!');
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
 | 
				
			||||||
 | 
											const playlist = await youtube.getPlaylist(url);
 | 
				
			||||||
 | 
											const videos = await playlist.getVideos();
 | 
				
			||||||
 | 
											for (const video of Object.values(videos)) {
 | 
				
			||||||
 | 
												const video2 = await youtube.getVideoByID(video.id);
 | 
				
			||||||
 | 
												await handleVideo(video2, msg, voiceChannel, true);
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											return msg.channel.send(`:white_check_mark: Playlist: **${playlist.title}** has been added to the queue!`);
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
 | 
											try {
 | 
				
			||||||
 | 
												var video = await youtube.getVideo(url);
 | 
				
			||||||
 | 
											} catch (error) {
 | 
				
			||||||
 | 
												try {
 | 
				
			||||||
 | 
													var videos = await youtube.searchVideos(searchString, 10);
 | 
				
			||||||
 | 
													let index = 0;
 | 
				
			||||||
 | 
													msg.channel.send(`
 | 
				
			||||||
 | 
						__**Song selection:**__
 | 
				
			||||||
 | 
					${videos.map(video2 => `**${++index} -** ${video2.title}`).join('\n')}
 | 
				
			||||||
 | 
					Please provide a value to select one of the search results ranging from __1-10__.
 | 
				
			||||||
 | 
											`);
 | 
				
			||||||
 | 
													try {
 | 
				
			||||||
 | 
														var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
 | 
				
			||||||
 | 
															maxMatches: 1,
 | 
				
			||||||
 | 
															time: 10000,
 | 
				
			||||||
 | 
															errors: ['time']
 | 
				
			||||||
 | 
														});
 | 
				
			||||||
 | 
													} catch (err) {
 | 
				
			||||||
 | 
														return msg.channel.send(':x: Cancelling song selection.');
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													const videoIndex = parseInt(response.first().content);
 | 
				
			||||||
 | 
													var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
 | 
				
			||||||
 | 
												} catch (err) {
 | 
				
			||||||
 | 
													return msg.channel.send(':x: I could not obtain any search results.');
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											return handleVideo(video, msg, voiceChannel);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									} else if (command === 'skip' || command === 's') {
 | 
				
			||||||
 | 
										if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
										if (!serverQueue) return msg.channel.send(':x: There is nothing playing that I could skip for you.');
 | 
				
			||||||
 | 
										if (!serverQueue.songs[1]) return msg.channel.send(':x: Theres nothing to skip to!')
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.end('Skipped');
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									} else if (command === 'stop') {
 | 
				
			||||||
 | 
										if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
										if (!serverQueue) return msg.channel.send(':x: There is nothing playing that I could stop for you.');
 | 
				
			||||||
 | 
										serverQueue.songs = [];
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.end('Stopped!');
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									} else if (command === 'volume') {
 | 
				
			||||||
 | 
										if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
										if (!serverQueue) return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
										if (!args[1]) return msg.channel.send(`The current volume is: **${serverQueue.volume}** :speaker:`);
 | 
				
			||||||
 | 
										if (isNaN(args[1])) {
 | 
				
			||||||
 | 
											return msg.channel.send(':x: I\'m sorry, But you need to enter a valid __number__.')
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										serverQueue.volume = args[1];
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 5);
 | 
				
			||||||
 | 
										return msg.channel.send(`I set the volume to: **${args[1]}** 🔊`);
 | 
				
			||||||
 | 
									} else if (command === 'np' || command === 'nowplaying') {
 | 
				
			||||||
 | 
										if (!serverQueue) return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
										return msg.channel.send(`:musical_note: Now playing: **${serverQueue.songs[0].title}**`);
 | 
				
			||||||
 | 
									} else if (command === "queue" || command === 'q') {
 | 
				
			||||||
 | 
										if (!serverQueue)
 | 
				
			||||||
 | 
											return msg.channel.send(":x: There is nothing in the queue.");
 | 
				
			||||||
 | 
										var queuemessage = `__**Song queue:**__
 | 
				
			||||||
 | 
					${serverQueue.songs.map(song => `**-** ${song.title}`).join("\n")}
 | 
				
			||||||
 | 
					**Now playing:** ${serverQueue.songs[0].title} :musical_note: `;
 | 
				
			||||||
 | 
										if (queuemessage.length > 2000) {
 | 
				
			||||||
 | 
											return msg.channel.send(":x: The queue has too many songs in it to show all in this channel. Try again after a few songs.");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return msg.channel.send(queuemessage);
 | 
				
			||||||
 | 
									} else if (command === 'pause') {
 | 
				
			||||||
 | 
										if (serverQueue && serverQueue.playing) {
 | 
				
			||||||
 | 
											serverQueue.playing = false;
 | 
				
			||||||
 | 
											serverQueue.connection.dispatcher.pause();
 | 
				
			||||||
 | 
											return msg.channel.send(':pause_button: Paused the music for you!');
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
									} else if (command === 'resume') {
 | 
				
			||||||
 | 
										if (serverQueue && !serverQueue.playing) {
 | 
				
			||||||
 | 
											serverQueue.playing = true;
 | 
				
			||||||
 | 
											serverQueue.connection.dispatcher.resume();
 | 
				
			||||||
 | 
											return msg.channel.send(':play_pause: Resumed the music for you!');
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
									} else if (msg.content === '-devstop') {
 | 
				
			||||||
 | 
										if (msg.author.id === '360363051792203779') {
 | 
				
			||||||
 | 
											serverQueue.songs = [];
 | 
				
			||||||
 | 
											serverQueue.connection.dispatcher.end('Stop');
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									} else if (msg.content.startsWith('-eval')) {
 | 
				
			||||||
 | 
										if (msg.author.id === '360363051792203779' || msg.author.id === '384002606621655040') {
 | 
				
			||||||
 | 
											const args = msg.content.slice(6)
 | 
				
			||||||
 | 
											msg.channel.send(eval(args));
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
 | 
											msg.channel.send('The evaluation command is only avaiable for the developers of Musix!')
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if (msg.content === `${PREFIX}`) return;
 | 
				
			||||||
 | 
									msg.channel.send(':x: Unknown command! Type -help for the list of commands!')
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (msg.content === `${PREFIX}`) return;
 | 
				
			||||||
 | 
								var coms = ['-play', '-queue', '-np', '-volume', '-pause', '-resume', '-stop', '-skip', '-ping', '-q', '-nowplaying', '-p', '-s', '-devstop', '-eval'];
 | 
				
			||||||
 | 
								for (var i = 0; i < coms.length; i++) {
 | 
				
			||||||
 | 
									if (msg.content.includes(coms[i])) {
 | 
				
			||||||
 | 
										if (!msg.member.roles.find(x => x.name === 'DJ')) {
 | 
				
			||||||
 | 
											msg.channel.send(':x: i\'m sorry but you need to have the \'DJ\' role to use music commands!')
 | 
				
			||||||
 | 
											return;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								msg.channel.send(':x: Unknown command! Type -help for the list of commands!')
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								const args = msg.content.split(' ');
 | 
				
			||||||
 | 
								const searchString = args.slice(1).join(' ');
 | 
				
			||||||
 | 
								const url = args[1] ? args[1].replace(/<(.+)>/g, '$1') : '';
 | 
				
			||||||
 | 
								const serverQueue = queue.get(msg.guild.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								let command = msg.content.toLowerCase().split(' ')[0];
 | 
				
			||||||
 | 
								command = command.slice(PREFIX.length)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (command === 'play' || command === 'p') {
 | 
				
			||||||
 | 
									if (!args[1]) return msg.channel.send(':x: I think you forgot what you wanted to play!');
 | 
				
			||||||
 | 
									const voiceChannel = msg.member.voiceChannel;
 | 
				
			||||||
 | 
									if (!voiceChannel) return msg.channel.send(':x: I\'m sorry but you need to be in a voice channel to play music!');
 | 
				
			||||||
 | 
									const permissions = voiceChannel.permissionsFor(msg.client.user);
 | 
				
			||||||
 | 
									if (!permissions.has('CONNECT')) {
 | 
				
			||||||
 | 
										return msg.channel.send(':x: I cannot connect to your voice channel, make sure I have the proper permissions!');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if (!permissions.has('SPEAK')) {
 | 
				
			||||||
 | 
										return msg.channel.send(':x: I cannot speak in this voice channel, make sure I have the proper permissions!');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
 | 
				
			||||||
 | 
										const playlist = await youtube.getPlaylist(url);
 | 
				
			||||||
 | 
										const videos = await playlist.getVideos();
 | 
				
			||||||
 | 
										for (const video of Object.values(videos)) {
 | 
				
			||||||
 | 
											const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
 | 
				
			||||||
 | 
											await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return msg.channel.send(`:white_check_mark: Playlist: **${playlist.title}** has been added to the queue!`);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										try {
 | 
				
			||||||
 | 
											var video = await youtube.getVideo(url);
 | 
				
			||||||
 | 
										} catch (error) {
 | 
				
			||||||
 | 
											try {
 | 
				
			||||||
 | 
												var videos = await youtube.searchVideos(searchString, 10);
 | 
				
			||||||
 | 
												let index = 0;
 | 
				
			||||||
 | 
												msg.channel.send(`
 | 
				
			||||||
 | 
						__**Song selection:**__
 | 
				
			||||||
 | 
					${videos.map(video2 => `**${++index} -** ${video2.title}`).join('\n')}
 | 
				
			||||||
 | 
					Please provide a value to select one of the search results ranging from 1-10.
 | 
				
			||||||
 | 
											`);
 | 
				
			||||||
 | 
												// eslint-disable-next-line max-depth
 | 
				
			||||||
 | 
												try {
 | 
				
			||||||
 | 
													var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
 | 
				
			||||||
 | 
														maxMatches: 1,
 | 
				
			||||||
 | 
														time: 10000,
 | 
				
			||||||
 | 
														errors: ['time']
 | 
				
			||||||
 | 
													});
 | 
				
			||||||
 | 
												} catch (err) {
 | 
				
			||||||
 | 
													return msg.channel.send(':x: No or invalid value entered, cancelling video selection.');
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												const videoIndex = parseInt(response.first().content);
 | 
				
			||||||
 | 
												var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
 | 
				
			||||||
 | 
											} catch (err) {
 | 
				
			||||||
 | 
												console.error(err);
 | 
				
			||||||
 | 
												return msg.channel.send(':x: I could not obtain any search results.');
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return handleVideo(video, msg, voiceChannel);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else if (command === 'skip' || command === 's') {
 | 
				
			||||||
 | 
									if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
									if (!serverQueue) return msg.channel.send(':x: There is nothing playing that I could skip for you.');
 | 
				
			||||||
 | 
									msg.channel.send('Skipped :thumbsup:')
 | 
				
			||||||
 | 
									serverQueue.connection.dispatcher.end('Skipped');
 | 
				
			||||||
 | 
									return undefined;
 | 
				
			||||||
 | 
								} else if (command === 'stop') {
 | 
				
			||||||
 | 
									if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
									if (!serverQueue) return msg.channel.send(':x: There is nothing playing that I could stop for you.');
 | 
				
			||||||
 | 
									msg.channel.send('Stopped the music! :stop_button:')
 | 
				
			||||||
 | 
									serverQueue.songs = [];
 | 
				
			||||||
 | 
									serverQueue.connection.dispatcher.end('Stopped!');
 | 
				
			||||||
 | 
									return undefined;
 | 
				
			||||||
 | 
								} else if (command === 'volume') {
 | 
				
			||||||
 | 
									if (!msg.member.voiceChannel) return msg.channel.send(':x: You are not in a voice channel!');
 | 
				
			||||||
 | 
									if (!serverQueue) return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
									if (!args[1]) return msg.channel.send(`The current volume is: **${serverQueue.volume}** :speaker:`);
 | 
				
			||||||
 | 
									if (isNaN(args[1])) {
 | 
				
			||||||
 | 
										return msg.channel.send(':x: I\'m sorry, But you need to enter a valid __number__.')
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									serverQueue.volume = args[1];
 | 
				
			||||||
 | 
									serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 5);
 | 
				
			||||||
 | 
									return msg.channel.send(`I set the volume to: **${args[1]}** 🔊`);
 | 
				
			||||||
 | 
								} else if (command === 'np' || command === 'nowplaying') {
 | 
				
			||||||
 | 
									if (!serverQueue) return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
									return msg.channel.send(`:musical_note: Now playing: **${serverQueue.songs[0].title}**`);
 | 
				
			||||||
 | 
								} else if (command === "queue" || command === 'q') {
 | 
				
			||||||
 | 
									if (!serverQueue)
 | 
				
			||||||
 | 
										return msg.channel.send(":x: There is nothing in the queue.");
 | 
				
			||||||
 | 
									var queuemessage = `__**Song queue:**__
 | 
				
			||||||
 | 
					${serverQueue.songs.map(song => `**-** ${song.title}`).join("\n")}
 | 
				
			||||||
 | 
					**Now playing:** ${serverQueue.songs[0].title} :musical_note: `;
 | 
				
			||||||
 | 
									if (queuemessage.length < 2000) {
 | 
				
			||||||
 | 
										return msg.channel.send(":x: The queue has too many songs in it to show all in this channel. Try again after a few songs");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return msg.channel.send(queuemessage);
 | 
				
			||||||
 | 
								} else if (command === 'pause') {
 | 
				
			||||||
 | 
									if (serverQueue && serverQueue.playing) {
 | 
				
			||||||
 | 
										serverQueue.playing = false;
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.pause();
 | 
				
			||||||
 | 
										return msg.channel.send(':pause_button: Paused the music for you!');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
								} else if (command === 'resume') {
 | 
				
			||||||
 | 
									if (serverQueue && !serverQueue.playing) {
 | 
				
			||||||
 | 
										serverQueue.playing = true;
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.resume();
 | 
				
			||||||
 | 
										return msg.channel.send(':play_pause: Resumed the music for you!');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return msg.channel.send(':x: There is nothing playing.');
 | 
				
			||||||
 | 
								} else if (msg.content === '-devstop') {
 | 
				
			||||||
 | 
									if (msg.author.id === '360363051792203779') {
 | 
				
			||||||
 | 
										serverQueue.songs = [];
 | 
				
			||||||
 | 
										serverQueue.connection.dispatcher.end('Stop');
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else if (msg.content.startsWith('-eval')) {
 | 
				
			||||||
 | 
									if (msg.author.id === '360363051792203779' || msg.author.id === '384002606621655040') {
 | 
				
			||||||
 | 
										const args = msg.content.slice(6)
 | 
				
			||||||
 | 
										msg.channel.send(eval(args));
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										msg.channel.send('The evaluation command is only avaiable for the developers of Musix!')
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (msg.content === `${PREFIX}`) {
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							msg.channel.send(':x: Unknown command! Type -help for the list of commands!')
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function handleVideo(video, msg, voiceChannel, playlist = false) {
 | 
				
			||||||
 | 
						const serverQueue = queue.get(msg.guild.id);
 | 
				
			||||||
 | 
						const song = {
 | 
				
			||||||
 | 
							id: video.id,
 | 
				
			||||||
 | 
							title: Util.escapeMarkdown(video.title),
 | 
				
			||||||
 | 
							url: `https://www.youtube.com/watch?v=${video.id}`
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						if (!serverQueue) {
 | 
				
			||||||
 | 
							const queueConstruct = {
 | 
				
			||||||
 | 
								textChannel: msg.channel,
 | 
				
			||||||
 | 
								voiceChannel: voiceChannel,
 | 
				
			||||||
 | 
								connection: null,
 | 
				
			||||||
 | 
								songs: [],
 | 
				
			||||||
 | 
								volume: 5,
 | 
				
			||||||
 | 
								playing: true
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							queue.set(msg.guild.id, queueConstruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							queueConstruct.songs.push(song);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								var connection = await voiceChannel.join();
 | 
				
			||||||
 | 
								queueConstruct.connection = connection;
 | 
				
			||||||
 | 
								play(msg.guild, queueConstruct.songs[0]);
 | 
				
			||||||
 | 
							} catch (error) {
 | 
				
			||||||
 | 
								console.error(`I could not join the voice channel: ${error}`);
 | 
				
			||||||
 | 
								queue.delete(msg.guild.id);
 | 
				
			||||||
 | 
								return msg.channel.send(`:x: I could not join the voice channel: ${error}`);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							serverQueue.songs.push(song);
 | 
				
			||||||
 | 
							if (playlist) return undefined;
 | 
				
			||||||
 | 
							else return msg.channel.send(`:white_check_mark: **${song.title}** has been added to the queue!`);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return undefined;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function play(guild, song) {
 | 
				
			||||||
 | 
						const serverQueue = queue.get(guild.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!song) {
 | 
				
			||||||
 | 
							serverQueue.voiceChannel.leave();
 | 
				
			||||||
 | 
							queue.delete(guild.id);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const dispatcher = serverQueue.connection.playStream(ytdl(song.url, { quality: `highestaudio`, filter: 'audioonly' }))
 | 
				
			||||||
 | 
							.on('end', reason => {
 | 
				
			||||||
 | 
								if (reason === 'Stream is not generating quickly enough.') console.log('Song ended.');
 | 
				
			||||||
 | 
								else console.log(reason);
 | 
				
			||||||
 | 
								serverQueue.songs.shift();
 | 
				
			||||||
 | 
								play(guild, serverQueue.songs[0]);
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							.on('error', error => console.error(error));
 | 
				
			||||||
 | 
						dispatcher.setVolumeLogarithmic(1 / 5);
 | 
				
			||||||
 | 
						serverQueue.volume = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						serverQueue.textChannel.send(`:musical_note: Start playing: **${song.title}**`);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										462
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										462
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,462 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Musix",
 | 
				
			||||||
 | 
					  "version": "1.2.1",
 | 
				
			||||||
 | 
					  "lockfileVersion": 1,
 | 
				
			||||||
 | 
					  "requires": true,
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "ajv": {
 | 
				
			||||||
 | 
					      "version": "6.12.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "fast-deep-equal": "^3.1.1",
 | 
				
			||||||
 | 
					        "fast-json-stable-stringify": "^2.0.0",
 | 
				
			||||||
 | 
					        "json-schema-traverse": "^0.4.1",
 | 
				
			||||||
 | 
					        "uri-js": "^4.2.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "asn1": {
 | 
				
			||||||
 | 
					      "version": "0.2.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "safer-buffer": "~2.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "assert-plus": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "async-limiter": {
 | 
				
			||||||
 | 
					      "version": "1.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "asynckit": {
 | 
				
			||||||
 | 
					      "version": "0.4.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "aws-sign2": {
 | 
				
			||||||
 | 
					      "version": "0.7.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "aws4": {
 | 
				
			||||||
 | 
					      "version": "1.9.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "bcrypt-pbkdf": {
 | 
				
			||||||
 | 
					      "version": "1.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "tweetnacl": "^0.14.3"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "tweetnacl": {
 | 
				
			||||||
 | 
					          "version": "0.14.5",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "caseless": {
 | 
				
			||||||
 | 
					      "version": "0.12.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "combined-stream": {
 | 
				
			||||||
 | 
					      "version": "1.0.8",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "delayed-stream": "~1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "core-util-is": {
 | 
				
			||||||
 | 
					      "version": "1.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "dashdash": {
 | 
				
			||||||
 | 
					      "version": "1.14.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "assert-plus": "^1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "delayed-stream": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "discord.js": {
 | 
				
			||||||
 | 
					      "version": "11.6.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.6.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-cK6rH1PuGjSjpmEQbnpuTxq1Yv8B89SotyKUFcr4RhnsiZnfBfDOev7DD7v5vhtEyyj51NuMWFoRJzgy/m08Uw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "long": "^4.0.0",
 | 
				
			||||||
 | 
					        "prism-media": "^0.0.4",
 | 
				
			||||||
 | 
					        "snekfetch": "^3.6.4",
 | 
				
			||||||
 | 
					        "tweetnacl": "^1.0.0",
 | 
				
			||||||
 | 
					        "ws": "^6.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ecc-jsbn": {
 | 
				
			||||||
 | 
					      "version": "0.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "jsbn": "~0.1.0",
 | 
				
			||||||
 | 
					        "safer-buffer": "^2.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "extend": {
 | 
				
			||||||
 | 
					      "version": "3.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "extsprintf": {
 | 
				
			||||||
 | 
					      "version": "1.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "fast-deep-equal": {
 | 
				
			||||||
 | 
					      "version": "3.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "fast-json-stable-stringify": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "forever-agent": {
 | 
				
			||||||
 | 
					      "version": "0.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "form-data": {
 | 
				
			||||||
 | 
					      "version": "2.3.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "asynckit": "^0.4.0",
 | 
				
			||||||
 | 
					        "combined-stream": "^1.0.6",
 | 
				
			||||||
 | 
					        "mime-types": "^2.1.12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "fs": {
 | 
				
			||||||
 | 
					      "version": "0.0.1-security",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "getpass": {
 | 
				
			||||||
 | 
					      "version": "0.1.7",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "assert-plus": "^1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "har-schema": {
 | 
				
			||||||
 | 
					      "version": "2.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "har-validator": {
 | 
				
			||||||
 | 
					      "version": "5.1.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "ajv": "^6.5.5",
 | 
				
			||||||
 | 
					        "har-schema": "^2.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "html-entities": {
 | 
				
			||||||
 | 
					      "version": "1.3.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "http-signature": {
 | 
				
			||||||
 | 
					      "version": "1.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "assert-plus": "^1.0.0",
 | 
				
			||||||
 | 
					        "jsprim": "^1.2.2",
 | 
				
			||||||
 | 
					        "sshpk": "^1.7.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "is-typedarray": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "iso8601-duration": {
 | 
				
			||||||
 | 
					      "version": "1.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ErTBd++b17E8nmWII1K1uZtBgD1E8RjyvwmxlCjPHNqHMD7gmcMHOw0E8Ro/6+QT4PhHRSnnMo7bxa1vFPkwhg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "isstream": {
 | 
				
			||||||
 | 
					      "version": "0.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "jsbn": {
 | 
				
			||||||
 | 
					      "version": "0.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "json-schema": {
 | 
				
			||||||
 | 
					      "version": "0.2.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "json-schema-traverse": {
 | 
				
			||||||
 | 
					      "version": "0.4.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "json-stringify-safe": {
 | 
				
			||||||
 | 
					      "version": "5.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "jsprim": {
 | 
				
			||||||
 | 
					      "version": "1.4.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "assert-plus": "1.0.0",
 | 
				
			||||||
 | 
					        "extsprintf": "1.3.0",
 | 
				
			||||||
 | 
					        "json-schema": "0.2.3",
 | 
				
			||||||
 | 
					        "verror": "1.10.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "long": {
 | 
				
			||||||
 | 
					      "version": "4.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "m3u8stream": {
 | 
				
			||||||
 | 
					      "version": "0.6.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-QZCzhcfUliZfsOboi68QkNcMejPKTEhxE+s1TApvHubDeR8ythm4ViWuYFqgUwZeoHe8q0nsPxOvA3lQvdSzyg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "miniget": "^1.6.1",
 | 
				
			||||||
 | 
					        "sax": "^1.2.4"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mime-db": {
 | 
				
			||||||
 | 
					      "version": "1.44.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mime-types": {
 | 
				
			||||||
 | 
					      "version": "2.1.27",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "mime-db": "1.44.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "miniget": {
 | 
				
			||||||
 | 
					      "version": "1.7.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.7.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-yrgaDSMRzrfYTkudB4Y6xK8pCb7oAH2bvfv6iPY2m6CedZfs9yK4b/ofh0Vzv08hCYXH/HHkoS8an6fkWtOAQA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ms": {
 | 
				
			||||||
 | 
					      "version": "2.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node-fetch": {
 | 
				
			||||||
 | 
					      "version": "2.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "oauth-sign": {
 | 
				
			||||||
 | 
					      "version": "0.9.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "opusscript": {
 | 
				
			||||||
 | 
					      "version": "0.0.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-F7nx1SWZCD5Rq2W+5Fx39HlkRkz/5Zqt0LglEB9uHexk8HjedDEiM+u/Y2rBfDFcS/0uQIWu2lJhw+Gjsta+cA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "performance-now": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "prism-media": {
 | 
				
			||||||
 | 
					      "version": "0.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-dG2w7WtovUa4SiYTdWn9H8Bd4JNdei2djtkP/Bk9fXq81j5Q15ZPHYSwhUVvBRbp5zMkGtu0Yk62HuMcly0pRw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "psl": {
 | 
				
			||||||
 | 
					      "version": "1.8.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "punycode": {
 | 
				
			||||||
 | 
					      "version": "2.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "qs": {
 | 
				
			||||||
 | 
					      "version": "6.5.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "request": {
 | 
				
			||||||
 | 
					      "version": "2.88.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "aws-sign2": "~0.7.0",
 | 
				
			||||||
 | 
					        "aws4": "^1.8.0",
 | 
				
			||||||
 | 
					        "caseless": "~0.12.0",
 | 
				
			||||||
 | 
					        "combined-stream": "~1.0.6",
 | 
				
			||||||
 | 
					        "extend": "~3.0.2",
 | 
				
			||||||
 | 
					        "forever-agent": "~0.6.1",
 | 
				
			||||||
 | 
					        "form-data": "~2.3.2",
 | 
				
			||||||
 | 
					        "har-validator": "~5.1.3",
 | 
				
			||||||
 | 
					        "http-signature": "~1.2.0",
 | 
				
			||||||
 | 
					        "is-typedarray": "~1.0.0",
 | 
				
			||||||
 | 
					        "isstream": "~0.1.2",
 | 
				
			||||||
 | 
					        "json-stringify-safe": "~5.0.1",
 | 
				
			||||||
 | 
					        "mime-types": "~2.1.19",
 | 
				
			||||||
 | 
					        "oauth-sign": "~0.9.0",
 | 
				
			||||||
 | 
					        "performance-now": "^2.1.0",
 | 
				
			||||||
 | 
					        "qs": "~6.5.2",
 | 
				
			||||||
 | 
					        "safe-buffer": "^5.1.2",
 | 
				
			||||||
 | 
					        "tough-cookie": "~2.5.0",
 | 
				
			||||||
 | 
					        "tunnel-agent": "^0.6.0",
 | 
				
			||||||
 | 
					        "uuid": "^3.3.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "safe-buffer": {
 | 
				
			||||||
 | 
					      "version": "5.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "safer-buffer": {
 | 
				
			||||||
 | 
					      "version": "2.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "sax": {
 | 
				
			||||||
 | 
					      "version": "1.2.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "simple-youtube-api": {
 | 
				
			||||||
 | 
					      "version": "5.2.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/simple-youtube-api/-/simple-youtube-api-5.2.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-vmndP9Bkh35tifn2OwY+th2imSsfYtmDqczgdOW5yEARFzvSoR8VSQFsivJnctfV5QHQUL6VrOpNdbmDRLh9Bg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "iso8601-duration": "^1.2.0",
 | 
				
			||||||
 | 
					        "node-fetch": "^2.6.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "snekfetch": {
 | 
				
			||||||
 | 
					      "version": "3.6.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "sshpk": {
 | 
				
			||||||
 | 
					      "version": "1.16.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "asn1": "~0.2.3",
 | 
				
			||||||
 | 
					        "assert-plus": "^1.0.0",
 | 
				
			||||||
 | 
					        "bcrypt-pbkdf": "^1.0.0",
 | 
				
			||||||
 | 
					        "dashdash": "^1.12.0",
 | 
				
			||||||
 | 
					        "ecc-jsbn": "~0.1.1",
 | 
				
			||||||
 | 
					        "getpass": "^0.1.1",
 | 
				
			||||||
 | 
					        "jsbn": "~0.1.0",
 | 
				
			||||||
 | 
					        "safer-buffer": "^2.0.2",
 | 
				
			||||||
 | 
					        "tweetnacl": "~0.14.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "tweetnacl": {
 | 
				
			||||||
 | 
					          "version": "0.14.5",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tough-cookie": {
 | 
				
			||||||
 | 
					      "version": "2.5.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "psl": "^1.1.28",
 | 
				
			||||||
 | 
					        "punycode": "^2.1.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tunnel-agent": {
 | 
				
			||||||
 | 
					      "version": "0.6.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "safe-buffer": "^5.0.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tweetnacl": {
 | 
				
			||||||
 | 
					      "version": "1.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "uri-js": {
 | 
				
			||||||
 | 
					      "version": "4.2.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "punycode": "^2.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "uuid": {
 | 
				
			||||||
 | 
					      "version": "3.4.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "verror": {
 | 
				
			||||||
 | 
					      "version": "1.10.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "assert-plus": "^1.0.0",
 | 
				
			||||||
 | 
					        "core-util-is": "1.0.2",
 | 
				
			||||||
 | 
					        "extsprintf": "^1.2.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ws": {
 | 
				
			||||||
 | 
					      "version": "6.2.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "async-limiter": "~1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ytdl-core": {
 | 
				
			||||||
 | 
					      "version": "0.29.7",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.29.7.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-mqPuZ1UyspT84lyV1FSU1UAoiQ4H5j52ba3sC1LC43OmL8qNaDIRCGffGlpiakQrc69qsplNWsWEZUF+J5bhJA==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "html-entities": "^1.1.3",
 | 
				
			||||||
 | 
					        "m3u8stream": "^0.6.2",
 | 
				
			||||||
 | 
					        "miniget": "^1.5.3",
 | 
				
			||||||
 | 
					        "sax": "^1.1.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Musix",
 | 
				
			||||||
 | 
					  "version": "1.2.1",
 | 
				
			||||||
 | 
					  "description": "",
 | 
				
			||||||
 | 
					  "main": "index.js",
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "test": "echo \"Error: no test specified\" && exit 1"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "keywords": [],
 | 
				
			||||||
 | 
					  "author": "",
 | 
				
			||||||
 | 
					  "license": "ISC",
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "discord.js": "^11.6.4",
 | 
				
			||||||
 | 
					    "fs": "0.0.1-security",
 | 
				
			||||||
 | 
					    "ms": "^2.1.2",
 | 
				
			||||||
 | 
					    "opusscript": "0.0.6",
 | 
				
			||||||
 | 
					    "request": "^2.88.2",
 | 
				
			||||||
 | 
					    "simple-youtube-api": "^5.2.1",
 | 
				
			||||||
 | 
					    "ytdl-core": "^0.29.7"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user