├── .env ├── .gitignore ├── .replit ├── LICENCE.md ├── README.md ├── commands ├── connect.js ├── disconnect.js ├── help.js ├── invite.js ├── loop.js ├── lyrics.js ├── np.js ├── pause.js ├── play.js ├── queue.js ├── remove.js ├── resume.js ├── shuffle.js ├── skip.js ├── skipto.js ├── stop.js └── volume.js ├── events ├── message.js └── ready.js ├── index.js ├── install.bat ├── media └── banner.gif ├── package.json ├── sound.gif ├── start.bat ├── utils └── forhumans.js └── yarn.lock /.env: -------------------------------------------------------------------------------- 1 | TOKEN="Add token here" 2 | PREFIX="-" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | package-lock.json -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | run = "node index.js" 2 | language = "NodeJS" -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | ## License 2 | ### Strictly follow these rules, Or don't use the bot 3 |   4 | 5 | - Allowed only for fair use, Don't use for illegal purposes 6 | - You are not allowed to remove the credits 7 | - You are not edit credits and claim that you made it 8 | - You are not allowed to make a youtube video with this source code 9 | - If found anything violated, They will be reported to respective administration team -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Discord Music Bot - Professional

2 |
3 |

Thanks for 5k Views on the v1 bot, Enjoy with v2

4 |
5 | 6 | ## Tutorial 7 | [Click Me](https://www.youtube.com/watch?v=8wopOm4598Q) To watch the video 8 | 9 | ## Contact Me 10 | 11 | 12 | - Nithish#6593 13 | 14 | 15 | 16 | - nithish_codez 17 | 18 | ## Showcase 19 |

20 |

21 |

22 |

23 | and many more... 24 | 25 | ## Credits 26 | As always queue system is partially adapted from [@icrawl's](https://github.com/iCrawl) [MusicBotRepo](https://github.com/iCrawl/discord-music-bot) -------------------------------------------------------------------------------- /commands/connect.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | 10 | if (!channel.permissionsFor(message.client.user).has("CONNECT")) 11 | return error("I don't have permission to join the voice channel"); 12 | 13 | if (!channel.permissionsFor(message.client.user).has("SPEAK")) 14 | return error("I don't have permission to speak in the voice channel"); 15 | 16 | await channel.join(); 17 | 18 | return message.channel.send( 19 | new MessageEmbed() 20 | .setDescription("**Joined the voice channel :white_check_mark: **") 21 | .setColor("BLUE") 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /commands/disconnect.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | 10 | await channel.leave(); 11 | 12 | return message.channel.send( 13 | new MessageEmbed() 14 | .setDescription("**Left the voice channel :white_check_mark: **") 15 | .setColor("BLUE") 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /commands/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const commands = `connect\`\` - join the voice channel you are in 5 | disconnect\`\` - leave the voice channel you are in 6 | play \`\` - play songs from youtube 7 | pause\`\` - pause currently playing songs in the server 8 | resume\`\` - resume paused songs in the server 9 | queue\`\` - shows the song queue of the server 10 | skip\`\` - skips to next song in the queue 11 | skipto \`\` - Multiple skips until target 12 | stop\`\` - stops the song and clears the queue 13 | volume \`\` - see or adjust volume of songs 14 | np\`\` - see now playing song 15 | lyrics\`\` - get lyrics of current song 16 | shuffle\`\` - shuffle and randomize the queue 17 | invite\`\` - get invite link for the bot 18 | loop\`\` - enable / disable loop for the currently playing song 19 | remove \`\` - remove a song from the queue 20 | help\`\` - to see this command`; 21 | 22 | const revised = commands 23 | .split("\n") 24 | .map((x) => "• " + "``" + client.config.prefix + x.trim()) 25 | .join("\n"); 26 | 27 | message.channel.send( 28 | new MessageEmbed() 29 | .setAuthor( 30 | "MusicBot Commands Help", 31 | "https://img.icons8.com/color/2x/services--v2.gif" 32 | ) 33 | .setColor("FFFBFB") 34 | .setTimestamp() 35 | .setDescription(revised) 36 | ); 37 | }; 38 | -------------------------------------------------------------------------------- /commands/invite.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | message.channel.send( 5 | new MessageEmbed() 6 | .setAuthor( 7 | "Invite Me", 8 | "https://img.icons8.com/ultraviolet/2x/email-open--v2.gif" 9 | ) 10 | .setColor("BLUE") 11 | .setTimestamp() 12 | .setDescription( 13 | "https://discord.com/oauth2/authorize?client_id=" + 14 | client.user.id + 15 | "&permissions=" + 16 | "37080128" + 17 | "&scope=" + 18 | "bot" 19 | ) 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /commands/loop.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const queue = message.client.queue.get(message.guild.id); 5 | 6 | if (!queue) 7 | return message.channel.send( 8 | ":x: There are no songs playing in this server" 9 | ); 10 | 11 | queue.loop = !queue.loop; 12 | message.channel.send( 13 | new MessageEmbed() 14 | .setAuthor( 15 | "Master Loop Contrller", 16 | "https://img.icons8.com/color/2x/refresh--v2.gif" 17 | ) 18 | .setColor("BLUE") 19 | .setTimestamp() 20 | .setDescription( 21 | "**Loop is" + 22 | (queue.loop == true ? " Enabled " : " Disabled ") + 23 | "for current song :white_check_mark: **" 24 | ) 25 | ); 26 | }; 27 | -------------------------------------------------------------------------------- /commands/lyrics.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const lyricsFinder = require("lyrics-finder"); 3 | 4 | exports.run = async (client, message, args) => { 5 | const queue = message.client.queue.get(message.guild.id); 6 | if (!queue) 7 | return message.channel 8 | .send("There is nothing playing.") 9 | .catch(console.error); 10 | 11 | let lyrics = null; 12 | 13 | try { 14 | lyrics = await lyricsFinder(queue.queue[0].name, ""); 15 | if (!lyrics) lyrics = `No lyrics found for ${queue.queue[0].name} :x:`; 16 | } catch (error) { 17 | lyrics = `No lyrics found for ${queue.queue[0].name} :x:`; 18 | } 19 | 20 | let lyricsEmbed = new MessageEmbed() 21 | .setAuthor( 22 | `Lyrics For ${queue.queue[0].name}`, 23 | "https://img.icons8.com/color/2x/task--v2.gif" 24 | ) 25 | .setDescription(lyrics) 26 | .setColor("BLUE") 27 | .setTimestamp(); 28 | 29 | if (lyricsEmbed.description.length >= 2048) 30 | lyricsEmbed.description = `${lyricsEmbed.description.substr(0, 2045)}...`; 31 | return message.channel.send(lyricsEmbed).catch(console.error); 32 | }; 33 | -------------------------------------------------------------------------------- /commands/np.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setColor("RED") 14 | .setDescription(":x: There are no songs playing in this server") 15 | ); 16 | message.channel.send( 17 | new MessageEmbed() 18 | .setAuthor( 19 | "Now Playing", 20 | "https://img.icons8.com/color/2x/audio-wave--v2.gif" 21 | ) 22 | .setColor("BLUE") 23 | .setDescription( 24 | queue.queue[0].name + 25 | " Requested By: " + 26 | "<@" + 27 | queue.queue[0].requested + 28 | ">" 29 | ) 30 | .setThumbnail(queue.queue[0].thumbnail) 31 | .setFooter("There are " + queue.queue.length + " songs in queue") 32 | ); 33 | }; 34 | -------------------------------------------------------------------------------- /commands/pause.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setDescription(":x: There are no songs playing in this server") 14 | .setColor("RED") 15 | ); 16 | if (queue.playing == false) 17 | return message.channel.send( 18 | new MessageEmbed() 19 | .setDescription(":x: The song is already paused") 20 | .setColor("RED") 21 | ); 22 | queue.connection.dispatcher.pause(); 23 | message.react("⏸"); 24 | queue.playing = false; 25 | return message.channel.send( 26 | new MessageEmbed() 27 | .setDescription("**Paused the music :white_check_mark: **") 28 | .setColor("BLUE") 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /commands/play.js: -------------------------------------------------------------------------------- 1 | const ytdl = require("discord-ytdl-core"); 2 | const youtubeScraper = require("yt-search"); 3 | const yt = require("ytdl-core"); 4 | const { MessageEmbed, Util } = require("discord.js"); 5 | const forHumans = require("../utils/forhumans.js"); 6 | 7 | exports.run = async (client, message, args) => { 8 | const channel = message.member.voice.channel; 9 | 10 | const error = (err) => message.channel.send(err); 11 | const send = (content) => message.channel.send(content); 12 | const setqueue = (id, obj) => message.client.queue.set(id, obj); 13 | const deletequeue = (id) => message.client.queue.delete(id); 14 | var song; 15 | 16 | if (!channel) return error("You must join a voice channel to play music!"); 17 | 18 | if (!channel.permissionsFor(message.client.user).has("CONNECT")) 19 | return error("I don't have permission to join the voice channel"); 20 | 21 | if (!channel.permissionsFor(message.client.user).has("SPEAK")) 22 | return error("I don't have permission to speak in the voice channel"); 23 | 24 | const query = args.join(" "); 25 | 26 | if (!query) return error("You didn't provide a song name to play!"); 27 | 28 | if (query.includes("www.youtube.com")) { 29 | try { 30 | const ytdata = await await yt.getBasicInfo(query); 31 | if (!ytdata) return error("No song found for the url provided"); 32 | song = { 33 | name: Util.escapeMarkdown(ytdata.videoDetails.title), 34 | thumbnail: 35 | ytdata.player_response.videoDetails.thumbnail.thumbnails[0].url, 36 | requested: message.author, 37 | videoId: ytdata.videoDetails.videoId, 38 | duration: forHumans(ytdata.videoDetails.lengthSeconds), 39 | url: ytdata.videoDetails.video_url, 40 | views: ytdata.videoDetails.viewCount, 41 | }; 42 | } catch (e) { 43 | console.log(e); 44 | return error("Error occured, please check console"); 45 | } 46 | } else { 47 | try { 48 | const fetched = await (await youtubeScraper(query)).videos; 49 | if (fetched.length === 0 || !fetched) 50 | return error("I couldn't find the song you requested!'"); 51 | const data = fetched[0]; 52 | song = { 53 | name: Util.escapeMarkdown(data.title), 54 | thumbnail: data.image, 55 | requested: message.author, 56 | videoId: data.videoId, 57 | duration: data.duration.toString(), 58 | url: data.url, 59 | views: data.views, 60 | }; 61 | } catch (err) { 62 | console.log(err); 63 | return error("An error occured, Please check console"); 64 | } 65 | } 66 | 67 | var list = message.client.queue.get(message.guild.id); 68 | 69 | if (list) { 70 | list.queue.push(song); 71 | return send( 72 | new MessageEmbed() 73 | .setAuthor( 74 | "The song has been added to the queue", 75 | "https://img.icons8.com/color/2x/cd--v3.gif" 76 | ) 77 | .setColor("F93CCA") 78 | .setThumbnail(song.thumbnail) 79 | .addField("Song Name", song.name, false) 80 | .addField("Views", song.views, false) 81 | .addField("Duration", song.duration, false) 82 | .addField("Requested By", song.requested.tag, false) 83 | .setFooter("Positioned " + list.queue.length + " In the queue") 84 | ); 85 | } 86 | 87 | const structure = { 88 | channel: message.channel, 89 | vc: channel, 90 | volume: 85, 91 | playing: true, 92 | queue: [], 93 | connection: null, 94 | }; 95 | 96 | setqueue(message.guild.id, structure); 97 | structure.queue.push(song); 98 | 99 | try { 100 | const join = await channel.join(); 101 | structure.connection = join; 102 | play(structure.queue[0]); 103 | } catch (e) { 104 | console.log(e); 105 | deletequeue(message.guild.id); 106 | return error("I couldn't join the voice channel, Please check console"); 107 | } 108 | 109 | async function play(track) { 110 | try { 111 | const data = message.client.queue.get(message.guild.id); 112 | if (!track) { 113 | data.channel.send("Queue is empty, Leaving voice channel"); 114 | message.guild.me.voice.channel.leave(); 115 | return deletequeue(message.guild.id); 116 | } 117 | data.connection.on("disconnect", () => deletequeue(message.guild.id)); 118 | const source = await ytdl(track.url, { 119 | filter: "audioonly", 120 | quality: "highestaudio", 121 | highWaterMark: 1 << 25, 122 | opusEncoded: true, 123 | }); 124 | const player = data.connection 125 | .play(source, { type: "opus" }) 126 | .on("finish", () => { 127 | var removed = data.queue.shift(); 128 | if(data.loop == true){ 129 | data.queue.push(removed) 130 | } 131 | play(data.queue[0]); 132 | }); 133 | player.setVolumeLogarithmic(data.volume / 100); 134 | data.channel.send( 135 | new MessageEmbed() 136 | .setAuthor( 137 | "Started Playing", 138 | "https://img.icons8.com/color/2x/cd--v3.gif" 139 | ) 140 | .setColor("9D5CFF") 141 | .setThumbnail(track.thumbnail) 142 | .addField("Song Name", track.name, false) 143 | .addField("Views", track.views, false) 144 | .addField("Duration", track.duration, false) 145 | .addField("Requested By", track.requested, false) 146 | .setFooter("Youtube Music Player") 147 | ); 148 | } catch (e) { 149 | console.error(e); 150 | } 151 | } 152 | }; 153 | -------------------------------------------------------------------------------- /commands/queue.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | const queue = message.client.queue.get(message.guild.id); 10 | var status; 11 | var np; 12 | var count = 0; 13 | if (!queue) status = "There is nothing in queue!"; 14 | else 15 | status = queue.queue 16 | .map((x) => { 17 | count += 1; 18 | return ( 19 | "• " + 20 | "`" + 21 | count + 22 | "." + 23 | "`" + 24 | x.name + 25 | " -Requested by " + 26 | `<@${x.requested.id}>` 27 | ); 28 | }) 29 | .join("\n"); 30 | if (!queue) np = status; 31 | else np = queue.queue[0].name; 32 | if (queue) thumbnail = queue.queue[0].thumbnail; 33 | else thumbnail = message.guild.iconURL(); 34 | message.channel.send( 35 | new MessageEmbed() 36 | .setAuthor( 37 | "Music Queue", 38 | "https://img.icons8.com/color/2x/rhombus-loader.gif" 39 | ) 40 | .setThumbnail(thumbnail) 41 | .setColor("GREEN") 42 | .addField("Now Playing", np, true) 43 | .setDescription(status) 44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /commands/remove.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message, args) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | if (!args[0]) 10 | return message.channel.send( 11 | new MessageEmbed() 12 | .setDescription(":x: No song number provided") 13 | .setColor("RED") 14 | ); 15 | if (isNaN(args[0])) 16 | return message.channel.send( 17 | new MessageEmbed() 18 | .setDescription(":x: **Args must be number [Example: -remove 2]**") 19 | .setColor("RED") 20 | ); 21 | let queue = message.client.queue.get(message.guild.id); 22 | if (args[0] == 1) 23 | return message.channel.send( 24 | new MessageEmbed() 25 | .setDescription( 26 | ":x: **Can't remove currently playing song, use command skip**" 27 | ) 28 | .setColor("RED") 29 | ); 30 | if (queue.queue.length == 1) 31 | return message.channel.send( 32 | new MessageEmbed() 33 | .setDescription( 34 | ":x: **Can't remove when only one song is playing, Use command stop**" 35 | ) 36 | .setColor("RED") 37 | ); 38 | if (args[0] > queue.queue.length) 39 | return message.channel.send( 40 | new MessageEmbed() 41 | .setDescription(":x: **The queue doesn't have that much songs**") 42 | .setColor("RED") 43 | ); 44 | if (!queue) 45 | return message.channel.send( 46 | new MessageEmbed() 47 | .setDescription(":x: **There are no songs playing in this server**") 48 | .setColor("RED") 49 | ); 50 | var name = queue.queue[args[0] - 1].name; 51 | queue.queue.splice(args[0] - 1); 52 | return message.channel.send( 53 | new MessageEmbed() 54 | .setDescription( 55 | "**Removed" + " " + name + " " + "from queue :white_check_mark: **" 56 | ) 57 | .setTimestamp() 58 | .setColor("BLUE") 59 | ); 60 | }; 61 | -------------------------------------------------------------------------------- /commands/resume.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setDescription(":x: There are no songs playing in this server") 14 | .setColor("RED") 15 | ); 16 | if (queue.playing == true) 17 | return message.channel.send( 18 | new MessageEmbed() 19 | .setDescription(":x: The song is already playing") 20 | .setColor("RED") 21 | ); 22 | queue.connection.dispatcher.resume(); 23 | message.react("▶"); 24 | queue.playing = true; 25 | return message.channel.send( 26 | new MessageEmbed() 27 | .setDescription("**Resumed the music :white_check_mark:**") 28 | .setColor("BLUE") 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /commands/shuffle.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message, args) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | const queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setAuthor( 14 | "Master Shuffle Controller Error", 15 | "https://img.icons8.com/color/2x/activity.gif" 16 | ) 17 | .setDescription("** :x: There are no songs in queue to shuffle**") 18 | .setColor("RED") 19 | ); 20 | let songs = queue.queue; 21 | for (let i = songs.length - 1; i > 1; i--) { 22 | let j = 1 + Math.floor(Math.random() * i); 23 | [songs[i], songs[j]] = [songs[j], songs[i]]; 24 | } 25 | queue.queue = songs; 26 | message.client.queue.set(message.guild.id, queue); 27 | message.channel 28 | .send( 29 | new MessageEmbed() 30 | .setAuthor( 31 | "Master Shuffle Controller", 32 | "https://img.icons8.com/color/2x/activity.gif" 33 | ) 34 | .setDescription("** :white_check_mark: Shuffled the queue**") 35 | .setColor("BLUE") 36 | ) 37 | .catch(console.error); 38 | }; 39 | -------------------------------------------------------------------------------- /commands/skip.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setDescription(":x: There are no songs playing in this server") 14 | .setColor("RED") 15 | ); 16 | queue.connection.dispatcher.end('skipped'); 17 | return message.channel.send( 18 | new MessageEmbed() 19 | .setDescription("**Skipped the music :white_check_mark: **") 20 | .setColor("BLUE") 21 | ); 22 | }; 23 | -------------------------------------------------------------------------------- /commands/skipto.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message, args) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setDescription(":x: There are no songs playing in this server") 14 | .setColor("RED") 15 | ); 16 | if (!args[0]) 17 | return message.channel.send( 18 | new MessageEmbed() 19 | .setDescription("**You must specify the number to skip** :x:") 20 | .setColor("RED") 21 | ); 22 | if (isNaN(args[0])) 23 | return message.channel.send( 24 | new MessageEmbed() 25 | .setDescription("**Value must be a number** :x:") 26 | .setColor("RED") 27 | ); 28 | queue.playing = !false; 29 | 30 | if (queue.loop) { 31 | for (let i = 0; i < parseInt(args[0]) - (1 + 1); i++) { 32 | var delta = queue.queue.shift(); 33 | queue.queue.push(delta); 34 | } 35 | } else { 36 | queue.queue = queue.queue.slice(parseInt(args[0]) - (1 + 1)); 37 | } 38 | 39 | try { 40 | queue.connection.dispatcher.end(); 41 | } catch (e) { 42 | console.log(e); 43 | message.client.queue.delete(message.guild.id); 44 | queue.vc.leave(); 45 | } 46 | 47 | return message.channel.send( 48 | new MessageEmbed() 49 | .setDescription( 50 | "**Skipped the music to" + 51 | " `" + 52 | args[0] + 53 | "` " + 54 | ":white_check_mark:**" 55 | ) 56 | .setColor("BLUE") 57 | ); 58 | }; 59 | -------------------------------------------------------------------------------- /commands/stop.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | let queue = message.client.queue.get(message.guild.id); 10 | if (!queue) 11 | return message.channel.send( 12 | new MessageEmbed() 13 | .setDescription(":x: There are no songs playing in this server") 14 | .setColor("RED") 15 | ); 16 | queue.connection.dispatcher.end(); 17 | queue.queue = []; 18 | return message.channel.send( 19 | new MessageEmbed() 20 | .setDescription("**Stopped the music :white_check_mark: **") 21 | .setColor("BLUE") 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /commands/volume.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | exports.run = async (client, message, args) => { 4 | const channel = message.member.voice.channel; 5 | if (!channel) 6 | return message.channel.send( 7 | "You must Join a voice channel before using this command!" 8 | ); 9 | 10 | let queue = message.client.queue.get(message.guild.id); 11 | 12 | if (!args[0]) 13 | return message.channel.send( 14 | new MessageEmbed() 15 | .setAuthor( 16 | "Master Volume Controller", 17 | "https://img.icons8.com/color/2x/high-volume--v2.gif" 18 | ) 19 | .setColor("BLUE") 20 | .setDescription("**Current volume is " + queue.volume + " **") 21 | ); 22 | 23 | if (args[0] > 100) 24 | return message.channel.send( 25 | new MessageEmbed() 26 | .setAuthor( 27 | "Master Volume Error", 28 | "https://img.icons8.com/color/2x/high-volume--v2.gif" 29 | ) 30 | .setColor("RED") 31 | .setDescription("**Volume cannot exceed 100 :x: **") 32 | ); 33 | 34 | queue.connection.dispatcher.setVolumeLogarithmic(args[0] / 100); 35 | queue.volume = args[0]; 36 | message.channel.send( 37 | new MessageEmbed() 38 | .setAuthor( 39 | "Master Volume Controller", 40 | "https://img.icons8.com/color/2x/high-volume--v2.gif" 41 | ) 42 | .setColor("BLUE") 43 | .setDescription("**Volume set to " + args[0] + " :white_check_mark: **") 44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /events/message.js: -------------------------------------------------------------------------------- 1 | module.exports = (client, message) => { 2 | if (message.author.bot) return; 3 | 4 | if (message.content.indexOf(client.config.prefix) !== 0) return; 5 | 6 | const args = message.content 7 | .slice(client.config.prefix.length) 8 | .trim() 9 | .split(/ +/g); 10 | const command = args.shift().toLowerCase(); 11 | 12 | const cmd = client.commands.get(command); 13 | 14 | if (!cmd) return; 15 | 16 | cmd.run(client, message, args); 17 | }; 18 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | module.exports = (client) => { 2 | console.log("[Discord API]: Logged In As " + client.user.tag); 3 | }; 4 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const fs = require("fs"); 3 | require("dotenv").config(); 4 | 5 | const client = new Discord.Client(); 6 | const config = { 7 | token: process.env.TOKEN, 8 | prefix: process.env.PREFIX, 9 | }; 10 | client.config = config; 11 | client.queue = new Map(); 12 | 13 | fs.readdir("./events/", (err, files) => { 14 | if (err) return console.error(err); 15 | files.forEach((file) => { 16 | const event = require(`./events/${file}`); 17 | let eventName = file.split(".")[0]; 18 | client.on(eventName, event.bind(null, client)); 19 | }); 20 | }); 21 | 22 | client.commands = new Discord.Collection(); 23 | 24 | fs.readdir("./commands/", (err, files) => { 25 | if (err) return console.error(err); 26 | files.forEach((file) => { 27 | if (!file.endsWith(".js")) return; 28 | let props = require(`./commands/${file}`); 29 | let commandName = file.split(".")[0]; 30 | console.log(`[Command Manager]: Loading Command ${commandName}`); 31 | client.commands.set(commandName, props); 32 | }); 33 | }); 34 | 35 | client.login(client.config.token); 36 | -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | @echo "Install dependencies, please be patient, this may take upto [few seconds - 5min] according to your internet performence" 2 | npm i 3 | @echo "Installations completed, Open start.bat to enjoy with your bot" 4 | @echo "Consider subscribing to https://www.youtube.com/CodingWithNithish" 5 | PAUSE -------------------------------------------------------------------------------- /media/banner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NithishCodez/Discordjs-MusicBot/b8de98ebe6f5972dd409fc918bf7740c923f928f/media/banner.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discordjs-musicbot", 3 | "version": "2.0.0", 4 | "description": "Most Advanced open-source discord music bot, Made by NithishPravin", 5 | "main": "index.js", 6 | "license": "MIT", 7 | "scripts": { 8 | "start": "node index.js" 9 | }, 10 | "engines": { 11 | "node": "14.x" 12 | }, 13 | "dependencies": { 14 | "@discordjs/opus": "^0.3.2", 15 | "discord-ytdl-core": "^5.0.1", 16 | "discord.js": "^12.3.1", 17 | "dotenv": "^8.2.0", 18 | "ffmpeg": "0.0.4", 19 | "ffmpeg-static": "^4.2.7", 20 | "fs": "0.0.1-security", 21 | "lyrics-finder": "^21.4.0", 22 | "node-opus": "^0.3.3", 23 | "opusscript": "^0.0.7", 24 | "yt-search": "^2.2.4", 25 | "ytdl-core": "^4.1.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /sound.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NithishCodez/Discordjs-MusicBot/b8de98ebe6f5972dd409fc918bf7740c923f928f/sound.gif -------------------------------------------------------------------------------- /start.bat: -------------------------------------------------------------------------------- 1 | @echo "Starting your discord bot!" 2 | @echo "This wont take more than a minute" 3 | node index.js 4 | PAUSE -------------------------------------------------------------------------------- /utils/forhumans.js: -------------------------------------------------------------------------------- 1 | function forHumans(o) { 2 | for ( 3 | var r = [ 4 | [Math.floor(o / 31536e3), "years"], 5 | [Math.floor((o % 31536e3) / 86400), "days"], 6 | [Math.floor(((o % 31536e3) % 86400) / 3600), "hours"], 7 | [Math.floor((((o % 31536e3) % 86400) % 3600) / 60), "minutes"], 8 | [(((o % 31536e3) % 86400) % 3600) % 60, "seconds"], 9 | ], 10 | e = "", 11 | t = 0, 12 | s = r.length; 13 | t < s; 14 | t++ 15 | ) 16 | 0 !== r[t][0] && 17 | (e += 18 | " " + 19 | r[t][0] + 20 | " " + 21 | (1 === r[t][0] ? r[t][1].substr(0, r[t][1].length - 1) : r[t][1])); 22 | return e.trim(); 23 | } 24 | 25 | module.exports = forHumans; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@derhuerst/http-basic@^8.2.0": 6 | version "8.2.1" 7 | resolved "https://registry.yarnpkg.com/@derhuerst/http-basic/-/http-basic-8.2.1.tgz#11e3964cf1f2fb40806f9a0fff0c451bb7526093" 8 | integrity sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw== 9 | dependencies: 10 | caseless "^0.12.0" 11 | concat-stream "^1.6.2" 12 | http-response-object "^3.0.1" 13 | parse-cache-control "^1.0.1" 14 | 15 | "@discordjs/collection@^0.1.6": 16 | version "0.1.6" 17 | resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.6.tgz#9e9a7637f4e4e0688fd8b2b5c63133c91607682c" 18 | integrity sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ== 19 | 20 | "@discordjs/form-data@^3.0.1": 21 | version "3.0.1" 22 | resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697" 23 | integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== 24 | dependencies: 25 | asynckit "^0.4.0" 26 | combined-stream "^1.0.8" 27 | mime-types "^2.1.12" 28 | 29 | "@types/node@^10.0.3": 30 | version "10.17.56" 31 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" 32 | integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== 33 | 34 | abort-controller@^3.0.0: 35 | version "3.0.0" 36 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 37 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 38 | dependencies: 39 | event-target-shim "^5.0.0" 40 | 41 | agent-base@6: 42 | version "6.0.2" 43 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 44 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 45 | dependencies: 46 | debug "4" 47 | 48 | ansi-regex@^2.1.1: 49 | version "2.1.1" 50 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 51 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 52 | 53 | ansi-regex@^3.0.0: 54 | version "3.0.0" 55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 56 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 57 | 58 | async.parallellimit@~0.5.2: 59 | version "0.5.2" 60 | resolved "https://registry.yarnpkg.com/async.parallellimit/-/async.parallellimit-0.5.2.tgz#bfdcbf2f0832f1fff4c0b3354b4f6320663dd51f" 61 | integrity sha1-v9y/Lwgy8f/0wLM1S09jIGY91R8= 62 | dependencies: 63 | async.util.eachoflimit "0.5.2" 64 | async.util.parallel "0.5.2" 65 | 66 | async.util.eachoflimit@0.5.2: 67 | version "0.5.2" 68 | resolved "https://registry.yarnpkg.com/async.util.eachoflimit/-/async.util.eachoflimit-0.5.2.tgz#8b8cb8cfb0278aa5ceb50a8f800c1c2668db57ef" 69 | integrity sha1-i4y4z7AniqXOtQqPgAwcJmjbV+8= 70 | dependencies: 71 | async.util.keyiterator "0.5.2" 72 | async.util.noop "0.5.2" 73 | async.util.once "0.5.2" 74 | async.util.onlyonce "0.5.2" 75 | 76 | async.util.isarray@0.5.2: 77 | version "0.5.2" 78 | resolved "https://registry.yarnpkg.com/async.util.isarray/-/async.util.isarray-0.5.2.tgz#e62dac8f2636f65875dcf7521c2d24d0dfb2bbdf" 79 | integrity sha1-5i2sjyY29lh13PdSHC0k0N+yu98= 80 | 81 | async.util.isarraylike@0.5.2: 82 | version "0.5.2" 83 | resolved "https://registry.yarnpkg.com/async.util.isarraylike/-/async.util.isarraylike-0.5.2.tgz#8e7f87da9141f2f0996e8040477d0d4efe3f50f8" 84 | integrity sha1-jn+H2pFB8vCZboBAR30NTv4/UPg= 85 | dependencies: 86 | async.util.isarray "0.5.2" 87 | 88 | async.util.keyiterator@0.5.2: 89 | version "0.5.2" 90 | resolved "https://registry.yarnpkg.com/async.util.keyiterator/-/async.util.keyiterator-0.5.2.tgz#339e6ce8f89d000433fb7814e22728f3f175090d" 91 | integrity sha1-M55s6PidAAQz+3gU4ico8/F1CQ0= 92 | dependencies: 93 | async.util.isarraylike "0.5.2" 94 | async.util.keys "0.5.2" 95 | 96 | async.util.keys@0.5.2: 97 | version "0.5.2" 98 | resolved "https://registry.yarnpkg.com/async.util.keys/-/async.util.keys-0.5.2.tgz#5c34ddd8a3edb7a7883c9b5fe2126781b2098af6" 99 | integrity sha1-XDTd2KPtt6eIPJtf4hJngbIJivY= 100 | 101 | async.util.noop@0.5.2: 102 | version "0.5.2" 103 | resolved "https://registry.yarnpkg.com/async.util.noop/-/async.util.noop-0.5.2.tgz#bdd62b97cb0aa3f60b586ad148468698975e58b9" 104 | integrity sha1-vdYrl8sKo/YLWGrRSEaGmJdeWLk= 105 | 106 | async.util.once@0.5.2: 107 | version "0.5.2" 108 | resolved "https://registry.yarnpkg.com/async.util.once/-/async.util.once-0.5.2.tgz#1453cb7404cad0822694fababc47a96e5caa7216" 109 | integrity sha1-FFPLdATK0IImlPq6vEepblyqchY= 110 | 111 | async.util.onlyonce@0.5.2: 112 | version "0.5.2" 113 | resolved "https://registry.yarnpkg.com/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz#b8e6fc004adc923164d79e32f2813ee465c24ff2" 114 | integrity sha1-uOb8AErckjFk154y8oE+5GXCT/I= 115 | 116 | async.util.parallel@0.5.2: 117 | version "0.5.2" 118 | resolved "https://registry.yarnpkg.com/async.util.parallel/-/async.util.parallel-0.5.2.tgz#233524e3d6faffd5e995d75476b8d924f96808cd" 119 | integrity sha1-IzUk49b6/9XplddUdrjZJPloCM0= 120 | dependencies: 121 | async.util.isarraylike "0.5.2" 122 | async.util.noop "0.5.2" 123 | async.util.restparam "0.5.2" 124 | 125 | async.util.restparam@0.5.2: 126 | version "0.5.2" 127 | resolved "https://registry.yarnpkg.com/async.util.restparam/-/async.util.restparam-0.5.2.tgz#03efebf3c0277b97220e525aba750f5e04fc80cd" 128 | integrity sha1-A+/r88Ane5ciDlJaunUPXgT8gM0= 129 | 130 | asynckit@^0.4.0: 131 | version "0.4.0" 132 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 133 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 134 | 135 | balanced-match@^1.0.0: 136 | version "1.0.2" 137 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 138 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 139 | 140 | bindings@1: 141 | version "1.5.0" 142 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 143 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 144 | dependencies: 145 | file-uri-to-path "1.0.0" 146 | 147 | bindings@~1.2.1: 148 | version "1.2.1" 149 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" 150 | integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= 151 | 152 | boolbase@~1.0.0: 153 | version "1.0.0" 154 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 155 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 156 | 157 | boolstring@~1.0.2: 158 | version "1.0.2" 159 | resolved "https://registry.yarnpkg.com/boolstring/-/boolstring-1.0.2.tgz#9e63a5f6a131838fffbf981a382cc798c616efc7" 160 | integrity sha512-0JLNSmZUv1m/O8sVayFm2t0naiOXwQ9O2Gq9u1eoIkhvu6U5NQER/e3k4BGpjZ33G775lWMT7TzJ7r5VtmEnbQ== 161 | 162 | brace-expansion@^1.1.7: 163 | version "1.1.11" 164 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 165 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 166 | dependencies: 167 | balanced-match "^1.0.0" 168 | concat-map "0.0.1" 169 | 170 | buffer-from@^1.0.0: 171 | version "1.1.1" 172 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 173 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 174 | 175 | caseless@^0.12.0: 176 | version "0.12.0" 177 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 178 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 179 | 180 | cheerio@~0.22.0: 181 | version "0.22.0" 182 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" 183 | integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= 184 | dependencies: 185 | css-select "~1.2.0" 186 | dom-serializer "~0.1.0" 187 | entities "~1.1.1" 188 | htmlparser2 "^3.9.1" 189 | lodash.assignin "^4.0.9" 190 | lodash.bind "^4.1.4" 191 | lodash.defaults "^4.0.1" 192 | lodash.filter "^4.4.0" 193 | lodash.flatten "^4.2.0" 194 | lodash.foreach "^4.3.0" 195 | lodash.map "^4.4.0" 196 | lodash.merge "^4.4.0" 197 | lodash.pick "^4.2.1" 198 | lodash.reduce "^4.4.0" 199 | lodash.reject "^4.4.0" 200 | lodash.some "^4.4.0" 201 | 202 | cli-color@~1.2.0: 203 | version "1.2.0" 204 | resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" 205 | integrity sha1-OlrnT9drYmevZm5p4q+70B3vNNE= 206 | dependencies: 207 | ansi-regex "^2.1.1" 208 | d "1" 209 | es5-ext "^0.10.12" 210 | es6-iterator "2" 211 | memoizee "^0.4.3" 212 | timers-ext "0.1" 213 | 214 | combined-stream@^1.0.8: 215 | version "1.0.8" 216 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 217 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 218 | dependencies: 219 | delayed-stream "~1.0.0" 220 | 221 | commander@^2.9.0: 222 | version "2.20.3" 223 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 224 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 225 | 226 | concat-map@0.0.1: 227 | version "0.0.1" 228 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 229 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 230 | 231 | concat-stream@^1.6.2: 232 | version "1.6.2" 233 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 234 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 235 | dependencies: 236 | buffer-from "^1.0.0" 237 | inherits "^2.0.3" 238 | readable-stream "^2.2.2" 239 | typedarray "^0.0.6" 240 | 241 | core-util-is@~1.0.0: 242 | version "1.0.2" 243 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 244 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 245 | 246 | css-select@~1.2.0: 247 | version "1.2.0" 248 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 249 | integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= 250 | dependencies: 251 | boolbase "~1.0.0" 252 | css-what "2.1" 253 | domutils "1.5.1" 254 | nth-check "~1.0.1" 255 | 256 | css-what@2.1: 257 | version "2.1.3" 258 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 259 | integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== 260 | 261 | d@1, d@^1.0.1: 262 | version "1.0.1" 263 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 264 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 265 | dependencies: 266 | es5-ext "^0.10.50" 267 | type "^1.0.1" 268 | 269 | dasu@~0.4.2: 270 | version "0.4.2" 271 | resolved "https://registry.yarnpkg.com/dasu/-/dasu-0.4.2.tgz#2290ebf08d4a70ff2ada924b7a01be24b5215a01" 272 | integrity sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ== 273 | 274 | debug@2: 275 | version "2.6.9" 276 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 277 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 278 | dependencies: 279 | ms "2.0.0" 280 | 281 | debug@4: 282 | version "4.3.1" 283 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 284 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 285 | dependencies: 286 | ms "2.1.2" 287 | 288 | delayed-stream@~1.0.0: 289 | version "1.0.0" 290 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 291 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 292 | 293 | discord-ytdl-core@^5.0.2: 294 | version "5.0.2" 295 | resolved "https://registry.yarnpkg.com/discord-ytdl-core/-/discord-ytdl-core-5.0.2.tgz#28fb8712af8b5fda34f20800d2226b556e700422" 296 | integrity sha512-tuu+skr0cA89Li7sCH+L1p3TwdfSOunmC9BFzSa0Jj567B1F2leVVbjKQ5ZKpsW1cXKv0fh0PdQA2/Fnu6WcQA== 297 | dependencies: 298 | prism-media "^1.2.7" 299 | 300 | discord.js@^12.3.1: 301 | version "12.5.3" 302 | resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-12.5.3.tgz#56820d473c24320871df9ea0bbc6b462f21cf85c" 303 | integrity sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw== 304 | dependencies: 305 | "@discordjs/collection" "^0.1.6" 306 | "@discordjs/form-data" "^3.0.1" 307 | abort-controller "^3.0.0" 308 | node-fetch "^2.6.1" 309 | prism-media "^1.2.9" 310 | setimmediate "^1.0.5" 311 | tweetnacl "^1.0.3" 312 | ws "^7.4.4" 313 | 314 | dom-serializer@0: 315 | version "0.2.2" 316 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 317 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 318 | dependencies: 319 | domelementtype "^2.0.1" 320 | entities "^2.0.0" 321 | 322 | dom-serializer@~0.1.0: 323 | version "0.1.1" 324 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" 325 | integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== 326 | dependencies: 327 | domelementtype "^1.3.0" 328 | entities "^1.1.1" 329 | 330 | domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: 331 | version "1.3.1" 332 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 333 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 334 | 335 | domelementtype@^2.0.1: 336 | version "2.2.0" 337 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" 338 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== 339 | 340 | domhandler@^2.3.0: 341 | version "2.4.2" 342 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 343 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== 344 | dependencies: 345 | domelementtype "1" 346 | 347 | domutils@1.5.1: 348 | version "1.5.1" 349 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 350 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= 351 | dependencies: 352 | dom-serializer "0" 353 | domelementtype "1" 354 | 355 | domutils@^1.5.1: 356 | version "1.7.0" 357 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 358 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 359 | dependencies: 360 | dom-serializer "0" 361 | domelementtype "1" 362 | 363 | encoding@^0.1.13: 364 | version "0.1.13" 365 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" 366 | integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== 367 | dependencies: 368 | iconv-lite "^0.6.2" 369 | 370 | entities@^1.1.1, entities@~1.1.1: 371 | version "1.1.2" 372 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 373 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 374 | 375 | entities@^2.0.0: 376 | version "2.2.0" 377 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 378 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 379 | 380 | env-paths@^2.2.0: 381 | version "2.2.1" 382 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" 383 | integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== 384 | 385 | es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: 386 | version "0.10.53" 387 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" 388 | integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== 389 | dependencies: 390 | es6-iterator "~2.0.3" 391 | es6-symbol "~3.1.3" 392 | next-tick "~1.0.0" 393 | 394 | es6-iterator@2, es6-iterator@^2.0.3, es6-iterator@~2.0.3: 395 | version "2.0.3" 396 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 397 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 398 | dependencies: 399 | d "1" 400 | es5-ext "^0.10.35" 401 | es6-symbol "^3.1.1" 402 | 403 | es6-symbol@^3.1.1, es6-symbol@~3.1.3: 404 | version "3.1.3" 405 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 406 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 407 | dependencies: 408 | d "^1.0.1" 409 | ext "^1.1.2" 410 | 411 | es6-weak-map@^2.0.3: 412 | version "2.0.3" 413 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" 414 | integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== 415 | dependencies: 416 | d "1" 417 | es5-ext "^0.10.46" 418 | es6-iterator "^2.0.3" 419 | es6-symbol "^3.1.1" 420 | 421 | event-emitter@^0.3.5: 422 | version "0.3.5" 423 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 424 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= 425 | dependencies: 426 | d "1" 427 | es5-ext "~0.10.14" 428 | 429 | event-target-shim@^5.0.0: 430 | version "5.0.1" 431 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 432 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 433 | 434 | ext@^1.1.2: 435 | version "1.4.0" 436 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" 437 | integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== 438 | dependencies: 439 | type "^2.0.0" 440 | 441 | ffmpeg-static@^4.2.7: 442 | version "4.3.0" 443 | resolved "https://registry.yarnpkg.com/ffmpeg-static/-/ffmpeg-static-4.3.0.tgz#fa5f689eacb0b3f7ed3eaa52760d132d9db818ec" 444 | integrity sha512-w/tXYGlOSeAkPHjypjzylaChLrG5wRzHFyB47KFRDsGyBxUJJWiq9I/39/e6r9Y4aY1gzpejTLg5Aa0aqb0XXA== 445 | dependencies: 446 | "@derhuerst/http-basic" "^8.2.0" 447 | env-paths "^2.2.0" 448 | https-proxy-agent "^5.0.0" 449 | progress "^2.0.3" 450 | 451 | ffmpeg@^0.0.4: 452 | version "0.0.4" 453 | resolved "https://registry.yarnpkg.com/ffmpeg/-/ffmpeg-0.0.4.tgz#1c460df8e7da5127f62ceef4bfa06c59c89630cb" 454 | integrity sha1-HEYN+OfaUSf2LO70v6BsWciWMMs= 455 | dependencies: 456 | when ">= 0.0.1" 457 | 458 | file-uri-to-path@1.0.0: 459 | version "1.0.0" 460 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 461 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 462 | 463 | he@^1.2.0: 464 | version "1.2.0" 465 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 466 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 467 | 468 | html-entities@^1.3.1: 469 | version "1.4.0" 470 | resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" 471 | integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== 472 | 473 | html-to-text@^5.1.1: 474 | version "5.1.1" 475 | resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-5.1.1.tgz#2d89db7bf34bc7bcb7d546b1b228991a16926e87" 476 | integrity sha512-Bci6bD/JIfZSvG4s0gW/9mMKwBRoe/1RWLxUME/d6WUSZCdY7T60bssf/jFf7EYXRyqU4P5xdClVqiYU0/ypdA== 477 | dependencies: 478 | he "^1.2.0" 479 | htmlparser2 "^3.10.1" 480 | lodash "^4.17.11" 481 | minimist "^1.2.0" 482 | 483 | htmlparser2@^3.10.1, htmlparser2@^3.9.1: 484 | version "3.10.1" 485 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" 486 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== 487 | dependencies: 488 | domelementtype "^1.3.1" 489 | domhandler "^2.3.0" 490 | domutils "^1.5.1" 491 | entities "^1.1.1" 492 | inherits "^2.0.1" 493 | readable-stream "^3.1.1" 494 | 495 | http-response-object@^3.0.1: 496 | version "3.0.2" 497 | resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" 498 | integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== 499 | dependencies: 500 | "@types/node" "^10.0.3" 501 | 502 | https-proxy-agent@^5.0.0: 503 | version "5.0.0" 504 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" 505 | integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== 506 | dependencies: 507 | agent-base "6" 508 | debug "4" 509 | 510 | human-time@0.0.2: 511 | version "0.0.2" 512 | resolved "https://registry.yarnpkg.com/human-time/-/human-time-0.0.2.tgz#566d04452ef5c24755c465b7b50fa103c41306c9" 513 | integrity sha512-sbYI90YhYmstslPTb70BLGjy6mdESa0lxL7uDR4fIVAx9Iobz8fLEqi7FqF4Q/6vblrzZALg//MsYJlIPBU8SA== 514 | 515 | iconv-lite@^0.6.2: 516 | version "0.6.2" 517 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" 518 | integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== 519 | dependencies: 520 | safer-buffer ">= 2.1.2 < 3.0.0" 521 | 522 | inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 523 | version "2.0.4" 524 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 525 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 526 | 527 | is-fullwidth-code-point@^2.0.0: 528 | version "2.0.0" 529 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 530 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 531 | 532 | is-promise@^2.2.2: 533 | version "2.2.2" 534 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 535 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 536 | 537 | isarray@~1.0.0: 538 | version "1.0.0" 539 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 540 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 541 | 542 | jsonpath-plus@~5.0.2: 543 | version "5.0.4" 544 | resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-5.0.4.tgz#3b8ce2ea6904ee6c6750ed027fe8df31789b62e3" 545 | integrity sha512-w3pI3PewtwIrrGRCFvTkCkKu8IrOwjsqoYRxvxuXQjPB0udEtAuBY0B6/SEztsxMmuIHVHGFQ0knVnTCPW9qYw== 546 | 547 | keypress@~0.2.1: 548 | version "0.2.1" 549 | resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77" 550 | integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc= 551 | 552 | lodash.assignin@^4.0.9: 553 | version "4.2.0" 554 | resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" 555 | integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= 556 | 557 | lodash.bind@^4.1.4: 558 | version "4.2.1" 559 | resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" 560 | integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= 561 | 562 | lodash.defaults@^4.0.1: 563 | version "4.2.0" 564 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" 565 | integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= 566 | 567 | lodash.filter@^4.4.0: 568 | version "4.6.0" 569 | resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" 570 | integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= 571 | 572 | lodash.flatten@^4.2.0: 573 | version "4.4.0" 574 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 575 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 576 | 577 | lodash.foreach@^4.3.0: 578 | version "4.5.0" 579 | resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" 580 | integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= 581 | 582 | lodash.map@^4.4.0: 583 | version "4.6.0" 584 | resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" 585 | integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= 586 | 587 | lodash.merge@^4.4.0: 588 | version "4.6.2" 589 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 590 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 591 | 592 | lodash.pick@^4.2.1: 593 | version "4.4.0" 594 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 595 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 596 | 597 | lodash.reduce@^4.4.0: 598 | version "4.6.0" 599 | resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" 600 | integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= 601 | 602 | lodash.reject@^4.4.0: 603 | version "4.6.0" 604 | resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" 605 | integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= 606 | 607 | lodash.some@^4.4.0: 608 | version "4.6.0" 609 | resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" 610 | integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= 611 | 612 | lodash@^4.17.11: 613 | version "4.17.21" 614 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 615 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 616 | 617 | lru-queue@^0.1.0: 618 | version "0.1.0" 619 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" 620 | integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= 621 | dependencies: 622 | es5-ext "~0.10.2" 623 | 624 | lyrics-finder@^21.4.0: 625 | version "21.7.0" 626 | resolved "https://registry.yarnpkg.com/lyrics-finder/-/lyrics-finder-21.7.0.tgz#11ee09c8a9ad0b752898c905ae1e52f8929bd680" 627 | integrity sha512-AMaJ+MdbdemYOWM1Kxd/vzn23OD66/fdemaJWN9dU0qsxK6d09rODSphygAvaGka6mgfHaFlHN+ETHv/d60ftw== 628 | dependencies: 629 | encoding "^0.1.13" 630 | html-to-text "^5.1.1" 631 | node-fetch "^2.6.0" 632 | 633 | m3u8stream@^0.7.1: 634 | version "0.7.1" 635 | resolved "https://registry.yarnpkg.com/m3u8stream/-/m3u8stream-0.7.1.tgz#74b01a67ca248ac7bbdc263a65d9d8d2c479a65c" 636 | integrity sha512-z6ldnAdhbuWOL6LmMkwptSZGzj+qbRytMKLTbNicwF/bJMjf9U9lqD57RNQUFecvWadEkzy6PDjcNJFFgi19uQ== 637 | dependencies: 638 | miniget "^1.6.1" 639 | sax "^1.2.4" 640 | 641 | memoizee@^0.4.3: 642 | version "0.4.15" 643 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" 644 | integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== 645 | dependencies: 646 | d "^1.0.1" 647 | es5-ext "^0.10.53" 648 | es6-weak-map "^2.0.3" 649 | event-emitter "^0.3.5" 650 | is-promise "^2.2.2" 651 | lru-queue "^0.1.0" 652 | next-tick "^1.1.0" 653 | timers-ext "^0.1.7" 654 | 655 | mime-db@1.47.0: 656 | version "1.47.0" 657 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 658 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 659 | 660 | mime-types@^2.1.12: 661 | version "2.1.30" 662 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 663 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 664 | dependencies: 665 | mime-db "1.47.0" 666 | 667 | miniget@^1.6.1: 668 | version "1.7.2" 669 | resolved "https://registry.yarnpkg.com/miniget/-/miniget-1.7.2.tgz#f95eff50b78d798dddee2460c4aa3c72db1aa23a" 670 | integrity sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA== 671 | 672 | miniget@^2.0.1: 673 | version "2.1.0" 674 | resolved "https://registry.yarnpkg.com/miniget/-/miniget-2.1.0.tgz#2dfb9ecb3a9a55d9dc682102f65fca2a06e3f5ca" 675 | integrity sha512-fy9x3d/0oOIhkwAms6kgxTYkHwdELhMfgj+9a/aYZpJdTWIIWGta9aXHUtnzUn+LjBmRoTdPRQSi2hkmEvXk3A== 676 | 677 | minimatch@~3.0.4: 678 | version "3.0.4" 679 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 680 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 681 | dependencies: 682 | brace-expansion "^1.1.7" 683 | 684 | minimist@^1.2.0, minimist@~1.2.0, minimist@~1.2.5: 685 | version "1.2.5" 686 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 687 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 688 | 689 | ms@2.0.0: 690 | version "2.0.0" 691 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 692 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 693 | 694 | ms@2.1.2: 695 | version "2.1.2" 696 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 697 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 698 | 699 | nan@2, nan@^2.14.0: 700 | version "2.14.2" 701 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 702 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 703 | 704 | next-tick@1, next-tick@^1.1.0: 705 | version "1.1.0" 706 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" 707 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== 708 | 709 | next-tick@~1.0.0: 710 | version "1.0.0" 711 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 712 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= 713 | 714 | node-fetch@^2.6.0, node-fetch@^2.6.1: 715 | version "2.6.1" 716 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 717 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 718 | 719 | node-fzf@~0.5.1: 720 | version "0.5.3" 721 | resolved "https://registry.yarnpkg.com/node-fzf/-/node-fzf-0.5.3.tgz#69dae1c197682505b02158fc689960a78a7f0b4a" 722 | integrity sha512-crN8rRfApu/GUrtKq+zJ6LueUyNAOJpFHxoT2Ru1Q+OYRa/F/H7CXvzcMrFc7D964yakYZEZ9XR3YbdSHXgyCw== 723 | dependencies: 724 | cli-color "~1.2.0" 725 | keypress "~0.2.1" 726 | minimist "~1.2.0" 727 | redstar "0.0.2" 728 | string-width "~2.1.1" 729 | ttys "0.0.3" 730 | 731 | node-opus@^0.3.3: 732 | version "0.3.3" 733 | resolved "https://registry.yarnpkg.com/node-opus/-/node-opus-0.3.3.tgz#bde2369b13b7d34f6e35d2a7fc97d7e4936d0211" 734 | integrity sha512-ZQniA8iJ6y/qOTmW6eyzM9m8odt4CIGV0NM9/U03/pYLhGyxy18QXO25WfrWd8XsUYx57tnxll2xxj54CN08uQ== 735 | dependencies: 736 | bindings "~1.2.1" 737 | commander "^2.9.0" 738 | nan "^2.14.0" 739 | optionalDependencies: 740 | ogg-packet "^1.0.0" 741 | 742 | nth-check@~1.0.1: 743 | version "1.0.2" 744 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 745 | integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 746 | dependencies: 747 | boolbase "~1.0.0" 748 | 749 | ogg-packet@^1.0.0: 750 | version "1.0.1" 751 | resolved "https://registry.yarnpkg.com/ogg-packet/-/ogg-packet-1.0.1.tgz#6b7d6c7a743c5f1ae9277c3b1271cac256af4785" 752 | integrity sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A== 753 | dependencies: 754 | ref-struct "*" 755 | 756 | opusscript@^0.0.7: 757 | version "0.0.7" 758 | resolved "https://registry.yarnpkg.com/opusscript/-/opusscript-0.0.7.tgz#7dd7ec55b302d26bf588e6fc3feb090b8c7da856" 759 | integrity sha512-DcBadTdYTUuH9zQtepsLjQn4Ll6rs3dmeFvN+SD0ThPnxRBRm/WC1zXWPg+wgAJimB784gdZvUMA57gDP7FdVg== 760 | 761 | parse-cache-control@^1.0.1: 762 | version "1.0.1" 763 | resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" 764 | integrity sha1-juqz5U+laSD+Fro493+iGqzC104= 765 | 766 | prism-media@^1.2.7, prism-media@^1.2.9: 767 | version "1.2.9" 768 | resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.9.tgz#8d4f97b36efdfc82483eb8d3db64020767866f36" 769 | integrity sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q== 770 | 771 | process-nextick-args@~2.0.0: 772 | version "2.0.1" 773 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 774 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 775 | 776 | progress@^2.0.3: 777 | version "2.0.3" 778 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 779 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 780 | 781 | readable-stream@^2.2.2: 782 | version "2.3.7" 783 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 784 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 785 | dependencies: 786 | core-util-is "~1.0.0" 787 | inherits "~2.0.3" 788 | isarray "~1.0.0" 789 | process-nextick-args "~2.0.0" 790 | safe-buffer "~5.1.1" 791 | string_decoder "~1.1.1" 792 | util-deprecate "~1.0.1" 793 | 794 | readable-stream@^3.1.1: 795 | version "3.6.0" 796 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 797 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 798 | dependencies: 799 | inherits "^2.0.3" 800 | string_decoder "^1.1.1" 801 | util-deprecate "^1.0.1" 802 | 803 | redstar@0.0.2: 804 | version "0.0.2" 805 | resolved "https://registry.yarnpkg.com/redstar/-/redstar-0.0.2.tgz#9d56a6980638c9851a100b0cb3bf7d3eb90205cb" 806 | integrity sha1-nVammAY4yYUaEAsMs799PrkCBcs= 807 | dependencies: 808 | minimatch "~3.0.4" 809 | 810 | ref-struct@*: 811 | version "1.1.0" 812 | resolved "https://registry.yarnpkg.com/ref-struct/-/ref-struct-1.1.0.tgz#5d5ee65ad41cefc3a5c5feb40587261e479edc13" 813 | integrity sha1-XV7mWtQc78Olxf60BYcmHkee3BM= 814 | dependencies: 815 | debug "2" 816 | ref "1" 817 | 818 | ref@1: 819 | version "1.3.5" 820 | resolved "https://registry.yarnpkg.com/ref/-/ref-1.3.5.tgz#0e33f080cdb94a3d95312b2b3b1fd0f82044ca0f" 821 | integrity sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA== 822 | dependencies: 823 | bindings "1" 824 | debug "2" 825 | nan "2" 826 | 827 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 828 | version "5.1.2" 829 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 830 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 831 | 832 | safe-buffer@~5.2.0: 833 | version "5.2.1" 834 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 835 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 836 | 837 | "safer-buffer@>= 2.1.2 < 3.0.0": 838 | version "2.1.2" 839 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 840 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 841 | 842 | sax@^1.1.3, sax@^1.2.4: 843 | version "1.2.4" 844 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 845 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 846 | 847 | setimmediate@^1.0.5: 848 | version "1.0.5" 849 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 850 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 851 | 852 | string-width@~2.1.1: 853 | version "2.1.1" 854 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 855 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 856 | dependencies: 857 | is-fullwidth-code-point "^2.0.0" 858 | strip-ansi "^4.0.0" 859 | 860 | string_decoder@^1.1.1: 861 | version "1.3.0" 862 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 863 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 864 | dependencies: 865 | safe-buffer "~5.2.0" 866 | 867 | string_decoder@~1.1.1: 868 | version "1.1.1" 869 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 870 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 871 | dependencies: 872 | safe-buffer "~5.1.0" 873 | 874 | strip-ansi@^4.0.0: 875 | version "4.0.0" 876 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 877 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 878 | dependencies: 879 | ansi-regex "^3.0.0" 880 | 881 | timers-ext@0.1, timers-ext@^0.1.7: 882 | version "0.1.7" 883 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" 884 | integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== 885 | dependencies: 886 | es5-ext "~0.10.46" 887 | next-tick "1" 888 | 889 | ttys@0.0.3: 890 | version "0.0.3" 891 | resolved "https://registry.yarnpkg.com/ttys/-/ttys-0.0.3.tgz#15bacde7831020de5f2f28f01b1732ef03651f4d" 892 | integrity sha1-FbrN54MQIN5fLyjwGxcy7wNlH00= 893 | 894 | tweetnacl@^1.0.3: 895 | version "1.0.3" 896 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 897 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 898 | 899 | type@^1.0.1: 900 | version "1.2.0" 901 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" 902 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== 903 | 904 | type@^2.0.0: 905 | version "2.5.0" 906 | resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" 907 | integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== 908 | 909 | typedarray@^0.0.6: 910 | version "0.0.6" 911 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 912 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 913 | 914 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 915 | version "1.0.2" 916 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 917 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 918 | 919 | "when@>= 0.0.1": 920 | version "3.7.8" 921 | resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" 922 | integrity sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I= 923 | 924 | ws@^7.4.4: 925 | version "7.4.4" 926 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" 927 | integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== 928 | 929 | yt-search@^2.7.6: 930 | version "2.7.6" 931 | resolved "https://registry.yarnpkg.com/yt-search/-/yt-search-2.7.6.tgz#dd4b43f1e68007c4a4d2cb11f35204108704f80a" 932 | integrity sha512-qFXPoKsfaeoOpyfNQP1DwVxJhoYaawwf2DoVmOODDHy7Q8FKeVxMPfk7Mmbejky8LbAglJGZce3ETALvp2gEPA== 933 | dependencies: 934 | async.parallellimit "~0.5.2" 935 | boolstring "~1.0.2" 936 | cheerio "~0.22.0" 937 | dasu "~0.4.2" 938 | human-time "0.0.2" 939 | jsonpath-plus "~5.0.2" 940 | minimist "~1.2.5" 941 | node-fzf "~0.5.1" 942 | 943 | ytdl-core@^3.3.0: 944 | version "3.4.2" 945 | resolved "https://registry.yarnpkg.com/ytdl-core/-/ytdl-core-3.4.2.tgz#0d3d35f54d4f6b1de870b987f3d45e88c64b6a6c" 946 | integrity sha512-R6m1XZQK+iXxb9Q9Wo14/K8mti1r4HnKv4zKrbp5FvMG/jDbeV0xQHUHqqDLk+uiDy/VU6fVATm5x2ms0QaF5w== 947 | dependencies: 948 | html-entities "^1.3.1" 949 | m3u8stream "^0.7.1" 950 | miniget "^2.0.1" 951 | sax "^1.1.3" 952 | --------------------------------------------------------------------------------