├── .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 |
--------------------------------------------------------------------------------