diff --git a/.env-example b/.env-example
index 4c0334313..8bd160dad 100644
--- a/.env-example
+++ b/.env-example
@@ -1,2 +1,2 @@
-DISCORD_TOKEN=
-DISCORD_PREFIX=!
\ No newline at end of file
+TOKEN=""
+PREFIX="!"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2979bc53e..45cffe922 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
# Packages
node_modules/
+package-lock.json
+yarn.lock
# Envronmental Storage
.env
\ No newline at end of file
diff --git a/README.md b/README.md
index ab9e6a1e5..f67ce4192 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,20 @@
-# Important Biggest Update Comming soon
-> And yes a updated tutorial :> without using the api
-
-# Discord Music bot
-> Very simple discord music bot with the discord.js with Song Name playing. It can able to play music with song name.
-
-## Tutorial
-
-Video tutorial click [here](https://youtu.be/wWVXN4mIgz8). [Support in Discord](https://sudhanplayz.live/discord)
- ## IMPORTANT
-Please use this [SudhanPlayz/Discord-MusicBot/tree/v1.0.0](https://github.com/SudhanPlayz/Discord-MusicBot/tree/v1.0.0)
+# Advanced Discord Music Bot
+Thanks for 4k Views! I made this for you all!
+
+
+
+## Tutorial
+Soon
+
+## Screenshots
+
+
+
+## Run the projects
+Soon
+
+## Contributors
+
+
+
+
\ No newline at end of file
diff --git a/assets/banner.gif b/assets/banner.gif
new file mode 100644
index 000000000..3230e2a12
Binary files /dev/null and b/assets/banner.gif differ
diff --git a/commands/help.js b/commands/help.js
new file mode 100644
index 000000000..ac0b4485f
--- /dev/null
+++ b/commands/help.js
@@ -0,0 +1,43 @@
+const { MessageEmbed } = require('discord.js')
+
+module.exports = {
+ info: {
+ name: "help",
+ description: "To show all commands",
+ usage: "[command]",
+ aliases: ["commands", "help me", "pls help"]
+ },
+
+ run: async function(client, message, args){
+ var allcmds = "";
+
+ client.commands.forEach(cmd => {
+ let cmdinfo = cmd.info
+ allcmds+="``"+client.config.prefix+cmdinfo.name+" "+cmdinfo.usage+"`` ~ "+cmdinfo.description+"\n"
+ })
+
+ let embed = new MessageEmbed()
+ .setAuthor("Commands of "+client.user.username, client.user.displayAvatarURL())
+ .setColor("BLUE")
+ .setDescription(allcmds)
+ .setFooter(`To get info of each command you can do ${client.config.prefix}help [command] | Hander by ItzCutePikachu#2006`)
+
+ if(!args[0])return message.channel.send(embed)
+ else {
+ let cmd = args[0]
+ let command = client.commands.get(cmd)
+ if(!command)command = client.commands.find(x => x.info.aliases.includes(cmd))
+ if(!command)return message.channel.send("Unknown Command")
+ let commandinfo = new MessageEmbed()
+ .setTitle("Command: "+command.info.name+" info")
+ .setColor("YELLOW")
+ .setDescription(`
+Name: ${command.info.name}
+Description: ${command.info.description}
+Usage: \`\`${client.config.prefix}${command.info.name} ${command.info.usage}\`\`
+Aliases: ${command.info.aliases.join(", ")}
+`)
+ message.channel.send(commandinfo)
+ }
+ }
+}
diff --git a/commands/nowplaying.js b/commands/nowplaying.js
new file mode 100644
index 000000000..f33f92f7b
--- /dev/null
+++ b/commands/nowplaying.js
@@ -0,0 +1,26 @@
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error")
+
+module.exports = {
+ info: {
+ name: "nowplaying",
+ description: "To show the music which is currently playing in this server",
+ usage: "",
+ aliases: ["np"],
+ },
+
+ run: async function (client, message, args) {
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (!serverQueue) return sendError("There is nothing playing in this server.", message.channel);
+ let song = serverQueue.songs[0]
+ let thing = new MessageEmbed()
+ .setAuthor("Now Playing", song.req.displayAvatarURL({ dynamic: true }))
+ .setThumbnail(song.img)
+ .setColor("BLUE")
+ .addField("Name", song.title, true)
+ .addField("Duration", song.duration, true)
+ .addField("Requested by", song.req.tag, true)
+ .setFooter(`Views: ${song.views} | ${song.ago}`)
+ return message.channel.send(thing)
+ },
+};
diff --git a/commands/np.js b/commands/np.js
deleted file mode 100644
index 2e26bc03d..000000000
--- a/commands/np.js
+++ /dev/null
@@ -1,8 +0,0 @@
-exports.run = (client, message, args) => {
- const serverQueue = message.client.queue.get(message.guild.id);
- if (!serverQueue) return message.channel.send("There is nothing playing.");
- return message.channel.send(
- `🎶 Now playing: **${serverQueue.songs[0].title}**`
- );
-};
-
diff --git a/commands/pause.js b/commands/pause.js
index 01bc96ddb..ff1306735 100644
--- a/commands/pause.js
+++ b/commands/pause.js
@@ -1,9 +1,25 @@
-exports.run = (client, message, args) => {
- const serverQueue = message.client.queue.get(message.guild.id);
- if (serverQueue && serverQueue.playing) {
- serverQueue.playing = false;
- serverQueue.connection.dispatcher.pause();
- return message.channel.send("⏸ Paused the music for you!");
- }
- return message.channel.send("There is nothing playing.");
-};
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "pause",
+ description: "To pause the current music in the server",
+ usage: "",
+ aliases: [""],
+ },
+
+ run: async function (client, message, args) {
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (serverQueue && serverQueue.playing) {
+ serverQueue.playing = false;
+ serverQueue.connection.dispatcher.pause();
+ let xd = new MessageEmbed()
+ .setDescription("⏸ Paused the music for you!")
+ .setColor("YELLOW")
+ .setTitle("Music has been paused!")
+ return message.channel.send(xd);
+ }
+ return sendError("There is nothing playing in this server.", message.channel);
+ },
+};
diff --git a/commands/play.js b/commands/play.js
index 346dbd3d0..a42c1ea89 100644
--- a/commands/play.js
+++ b/commands/play.js
@@ -1,101 +1,106 @@
-const { Util } = require("discord.js");
-const ytdl = require("ytdl-core");
-const ytSearch = require("../utils/ytSearch");
-
-exports.run = async (client, message, args) => {
- const { channel } = message.member.voice;
- if (!channel)
- return message.channel.send(
- "I'm sorry but you need to be in a voice channel to play music!"
- );
- const permissions = channel.permissionsFor(message.client.user);
- if (!permissions.has("CONNECT"))
- return message.channel.send(
- "I cannot connect to your voice channel, make sure I have the proper permissions!"
- );
- if (!permissions.has("SPEAK"))
- return message.channel.send(
- "I cannot speak in this voice channel, make sure I have the proper permissions!"
- );
- const searchString = args.join(" ");
- if (!searchString)
- return message.channel.send("You didn't provide anything to play");
- const serverQueue = message.client.queue.get(message.guild.id);
-
- const videos = await ytSearch(searchString, 1);
- if (!videos || !videos.length) {
- return message.channel.send("No videos found with that keyword!");
- }
-
- // old method, doesn't work most of the time
- // const song = {
- // id: firstVideo.videoId,
- // url: firstVideo.url,
- // title: Util.escapeMarkdown(firstVideo.title),
- // author: firstVideo.author,
- // duration: firstVideo.duration,
- // durationSeconds: firstVideo.durationSeconds,
- // ago: firstVideo.ago,
- // views: firstVideo.views,
- // };
-
- const firstVideo = videos[0].full ? videos[0] : videos[0].fetch();
-
- const song = {
- id: firstVideo.id,
- url: `https://youtube.com/watch?v=${firstVideo.id}`,
- title: Util.escapeMarkdown(firstVideo.title),
- author: firstVideo.channel.title,
- duration: firstVideo.duration,
- durationSeconds: firstVideo.durationSeconds,
- };
-
- if (serverQueue) {
- serverQueue.songs.push(song);
- console.log(serverQueue.songs);
- return message.channel.send(
- `✅ **${song.title}** has been added to the queue!`
- );
- }
-
- const queueConstruct = {
- textChannel: message.channel,
- voiceChannel: channel,
- connection: null,
- songs: [],
- volume: 2,
- playing: true,
- };
- message.client.queue.set(message.guild.id, queueConstruct);
- queueConstruct.songs.push(song);
-
- const play = async (song) => {
- const queue = message.client.queue.get(message.guild.id);
- if (!song) {
- queue.voiceChannel.leave();
- message.client.queue.delete(message.guild.id);
- return;
- }
-
- const dispatcher = queue.connection
- .play(ytdl(song.url))
- .on("finish", () => {
- queue.songs.shift();
- play(queue.songs[0]);
- })
- .on("error", (error) => console.error(error));
- dispatcher.setVolumeLogarithmic(queue.volume / 5);
- queue.textChannel.send(`🎶 Start playing: **${song.title}**`);
- };
-
- try {
- const connection = await channel.join();
- queueConstruct.connection = connection;
- play(queueConstruct.songs[0]);
- } catch (error) {
- console.error(`I could not join the voice channel: ${error}`);
- message.client.queue.delete(message.guild.id);
- await channel.leave();
- return message.channel.send(`I could not join the voice channel: ${error}`);
- }
-};
+const { Util, MessageEmbed } = require("discord.js");
+const ytdl = require("ytdl-core");
+const yts = require("yt-search");
+const sendError = require("../util/error")
+
+module.exports = {
+ info: {
+ name: "play",
+ description: "To play songs :D",
+ usage: "",
+ aliases: ["p"],
+ },
+
+ run: async function (client, message, args) {
+ const channel = message.member.voice.channel;
+ if (!channel)return sendError("I'm sorry but you need to be in a voice channel to play music!", message.channel);
+
+ const permissions = channel.permissionsFor(message.client.user);
+ if (!permissions.has("CONNECT"))return sendError("I cannot connect to your voice channel, make sure I have the proper permissions!", message.channel);
+ if (!permissions.has("SPEAK"))return sendError("I cannot speak in this voice channel, make sure I have the proper permissions!", message.channel);
+
+ var searchString = args.join(" ");
+ if (!searchString)return sendError("You didn't poivide want i want to play", message.channel);
+
+ var serverQueue = message.client.queue.get(message.guild.id);
+
+ var searched = await yts.search(searchString)
+ if(searched.videos.length === 0)return sendError("Looks like i was unable to find the song on YouTube", message.channel)
+ var songInfo = searched.videos[0]
+
+ const song = {
+ id: songInfo.videoId,
+ title: Util.escapeMarkdown(songInfo.title),
+ views: String(songInfo.views).padStart(10, ' '),
+ url: songInfo.url,
+ ago: songInfo.ago,
+ duration: songInfo.duration.toString(),
+ img: songInfo.image,
+ req: message.author
+ };
+
+ if (serverQueue) {
+ serverQueue.songs.push(song);
+ let thing = new MessageEmbed()
+ .setAuthor("Song has been added to queue", song.req.displayAvatarURL({ dynamic: true }))
+ .setThumbnail(song.img)
+ .setColor("YELLOW")
+ .addField("Name", song.title, true)
+ .addField("Duration", song.duration, true)
+ .addField("Requested by", song.req.tag, true)
+ .setFooter(`Views: ${song.views} | ${song.ago}`)
+ return message.channel.send(thing);
+ }
+
+ const queueConstruct = {
+ textChannel: message.channel,
+ voiceChannel: channel,
+ connection: null,
+ songs: [],
+ volume: 2,
+ playing: true,
+ };
+ message.client.queue.set(message.guild.id, queueConstruct);
+ queueConstruct.songs.push(song);
+
+ const play = async (song) => {
+ const queue = message.client.queue.get(message.guild.id);
+ if (!song) {
+ sendError("Leaving the voice channel because I think there are no songs in the queue. If you like the bot stay 24/7 in voice channel go to `commands/play.js` and remove the line number 61\n\nThank you for using my code! [GitHub](https://github.com/SudhanPlayz/Discord-MusicBot)", message.channel)
+ queue.voiceChannel.leave();//If you want your bot stay in vc 24/7 remove this line :D
+ message.client.queue.delete(message.guild.id);
+ return;
+ }
+
+ const dispatcher = queue.connection
+ .play(ytdl(song.url))
+ .on("finish", () => {
+ queue.songs.shift();
+ play(queue.songs[0]);
+ })
+ .on("error", (error) => console.error(error));
+ dispatcher.setVolumeLogarithmic(queue.volume / 5);
+ let thing = new MessageEmbed()
+ .setAuthor("Started Playing Music!", song.req.displayAvatarURL({ dynamic: true }))
+ .setThumbnail(song.img)
+ .setColor("BLUE")
+ .addField("Name", song.title, true)
+ .addField("Duration", song.duration, true)
+ .addField("Requested by", song.req.tag, true)
+ .setFooter(`Views: ${song.views} | Ago: ${song.ago}`)
+ queue.textChannel.send(thing);
+ };
+
+ try {
+ const connection = await channel.join();
+ queueConstruct.connection = connection;
+ channel.guild.voice.setSelfDeaf(true)
+ play(queueConstruct.songs[0]);
+ } catch (error) {
+ console.error(`I could not join the voice channel: ${error}`);
+ message.client.queue.delete(message.guild.id);
+ await channel.leave();
+ return sendError(`I could not join the voice channel: ${error}`, message.channel);
+ }
+ }
+};
\ No newline at end of file
diff --git a/commands/queue.js b/commands/queue.js
index ea7ae09fe..bff9df664 100644
--- a/commands/queue.js
+++ b/commands/queue.js
@@ -1,11 +1,30 @@
-exports.run = (client, message, args) => {
- const serverQueue = message.client.queue.get(message.guild.id);
- if (!serverQueue) return message.channel.send("There is nothing playing.");
- return message.channel.send(`
-__**Song queue:**__
-
-${serverQueue.songs.map((song) => `**-** ${song.title}`).join("\n")}
-
-**Now playing:** ${serverQueue.songs[0].title}
- `);
-};
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "queue",
+ description: "To show the server songs queue",
+ usage: "",
+ aliases: ["q", "list", "songlist", "song-list"],
+ },
+
+ run: async function (client, message, args) {
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (!serverQueue) return sendError("There is nothing playing in this server.", message.channel);
+
+ let queue = new MessageEmbed()
+ .setTitle("Server Songs Queue")
+ .setColor("BLUE")
+ .addField("Now Playing", serverQueue.songs[0].title, true)
+ .addField("Text Channel", serverQueue.textChannel, true)
+ .addField("Voice Channel", serverQueue.voiceChannel, true)
+ .setDescription(serverQueue.songs.map((song) => {
+ if(song === serverQueue.songs[0])return
+ return `**-** ${song.title}`
+ }).join("\n"))
+ .setFooter("Currently Server Volume is "+serverQueue.volume)
+ if(serverQueue.songs.length === 1)queue.setDescription(`No songs to play next add songs by \`\`${client.config.prefix}play \`\``)
+ message.channel.send(queue)
+ },
+};
diff --git a/commands/resume.js b/commands/resume.js
index 27703feb4..57a6421e3 100644
--- a/commands/resume.js
+++ b/commands/resume.js
@@ -1,9 +1,25 @@
-exports.run = (client, message, args) => {
- const serverQueue = message.client.queue.get(message.guild.id);
- if (serverQueue && !serverQueue.playing) {
- serverQueue.playing = true;
- serverQueue.connection.dispatcher.resume();
- return message.channel.send("▶ Resumed the music for you!");
- }
- return message.channel.send("There is nothing playing.");
-};
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "resume",
+ description: "To resume the paused music",
+ usage: "",
+ aliases: [],
+ },
+
+ run: async function (client, message, args) {
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (serverQueue && !serverQueue.playing) {
+ serverQueue.playing = true;
+ serverQueue.connection.dispatcher.resume();
+ let xd = new MessageEmbed()
+ .setDescription("▶ Resumed the music for you!")
+ .setColor("YELLOW")
+ .setTitle("Music has been Resumed!")
+ return message.channel.send(xd);
+ }
+ return sendError("There is nothing playing in this server.", message.channel);
+ },
+};
diff --git a/commands/skip.js b/commands/skip.js
index e5594586c..6d6b9eb09 100644
--- a/commands/skip.js
+++ b/commands/skip.js
@@ -1,13 +1,19 @@
-exports.run = (client, message, args) => {
- const { channel } = message.member.voice;
- if (!channel)
- return message.channel.send(
- "I'm sorry but you need to be in a voice channel to play music!"
- );
- const serverQueue = message.client.queue.get(message.guild.id);
- if (!serverQueue)
- return message.channel.send(
- "There is nothing playing that I could skip for you."
- );
- serverQueue.connection.dispatcher.end("Skip command has been used!");
-};
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "skip",
+ description: "To skip the current music",
+ usage: "",
+ aliases: ["s"],
+ },
+
+ run: async function (client, message, args) {
+ const channel = message.member.voice.channel
+ if (!channel)return sendError("I'm sorry but you need to be in a voice channel to play music!", message.channel);
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (!serverQueue)return sendError("There is nothing playing that I could skip for you.", message.channel);
+ serverQueue.connection.dispatcher.end("Skiped the music");
+ message.react("✅")
+ },
+};
diff --git a/commands/stop.js b/commands/stop.js
index 4c00fe0a9..cb20fa9d2 100644
--- a/commands/stop.js
+++ b/commands/stop.js
@@ -1,14 +1,21 @@
-exports.run = (client, message, args) => {
- const { channel } = message.member.voice;
- if (!channel)
- return message.channel.send(
- "I'm sorry but you need to be in a voice channel to play music!"
- );
- const serverQueue = message.client.queue.get(message.guild.id);
- if (!serverQueue)
- return message.channel.send(
- "There is nothing playing that I could stop for you."
- );
- serverQueue.songs = [];
- serverQueue.connection.dispatcher.end("Stop command has been used!");
-};
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "stop",
+ description: "To stop the music and clearing the queue",
+ usage: "",
+ aliases: [],
+ },
+
+ run: async function (client, message, args) {
+ const channel = message.member.voice.channel
+ if (!channel)return sendError("I'm sorry but you need to be in a voice channel to play music!", message.channel);
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (!serverQueue)return sendError("There is nothing playing that I could stop for you.", message.channel);
+ serverQueue.songs = [];
+ serverQueue.connection.dispatcher.end("Stop the music");
+ message.react("✅")
+ },
+};
diff --git a/commands/volume.js b/commands/volume.js
index fbc694b75..5fec17715 100644
--- a/commands/volume.js
+++ b/commands/volume.js
@@ -1,17 +1,26 @@
-exports.run = (client, message, args) => {
- const { channel } = message.member.voice;
- if (!channel)
- return message.channel.send(
- "I'm sorry but you need to be in a voice channel to play music!"
- );
- const serverQueue = message.client.queue.get(message.guild.id);
- if (!serverQueue) return message.channel.send("There is nothing playing.");
- if (!args[0])
- return message.channel.send(
- `The current volume is: **${serverQueue.volume}**`
- );
- serverQueue.volume = args[0];
- serverQueue.connection.dispatcher.setVolumeLogarithmic(args[0] / 5);
- return message.channel.send(`I set the volume to: **${args[0]}**`);
-};
-
+const { MessageEmbed } = require("discord.js");
+const sendError = require("../util/error");
+
+module.exports = {
+ info: {
+ name: "volume",
+ description: "To change the server song queue volume",
+ usage: "[volume]",
+ aliases: ["v"],
+ },
+
+ run: async function (client, message, args) {
+ const channel = message.member.voice.channel;
+ if (!channel)return sendError("I'm sorry but you need to be in a voice channel to play music!", message.channel);
+ const serverQueue = message.client.queue.get(message.guild.id);
+ if (!serverQueue) return sendError("There is nothing playing in this server.", message.channel);
+ if (!args[0])return message.channel.send(`The current volume is: **${serverQueue.volume}**`);
+ serverQueue.volume = args[0];
+ serverQueue.connection.dispatcher.setVolumeLogarithmic(args[0] / 5);
+ let xd = new MessageEmbed()
+ .setDescription(`I set the volume to: **${args[0]/5}/5**(it will be divied by 5)`)
+ .setTitle("Server Volume Manager")
+ .setColor("BLUE")
+ return message.channel.send(xd);
+ },
+};
diff --git a/events/message.js b/events/message.js
new file mode 100644
index 000000000..fc579af74
--- /dev/null
+++ b/events/message.js
@@ -0,0 +1,27 @@
+module.exports = async (client, message) => {
+ if (message.author.bot) return;
+
+ //Prefixes also have mention match
+ const prefixMention = new RegExp(`^<@!?${client.user.id}> `);
+ const prefix = message.content.match(prefixMention) ? message.content.match(prefixMention)[0] : client.config.prefix;
+
+ if (message.content.indexOf(prefix) !== 0) return;
+
+ const args = message.content.slice(prefix.length).trim().split(/ +/g);
+ //Making the command lowerCase because our file name will be in lowerCase
+ const command = args.shift().toLowerCase();
+
+ //Searching a command
+ const cmd = client.commands.get(command);
+ //Searching a command aliases
+ const aliases = client.commands.find(x => x.info.aliases.includes(command))
+
+ //if(message.channel.type === "dm")return message.channel.send("None of the commands work in DMs. So please use commands in server!")
+
+ //Executing the codes when we get the command or aliases
+ if(cmd){
+ cmd.run(client, message, args);
+ }else if(aliases){
+ aliases.run(client, message, args);
+ }else return
+};
diff --git a/events/ready.js b/events/ready.js
new file mode 100644
index 000000000..63232923b
--- /dev/null
+++ b/events/ready.js
@@ -0,0 +1,6 @@
+module.exports = async (client) => {
+ console.log(`[API] Logged in as ${client.user.username}`);
+ await client.user.setActivity("Music", {
+ type: "LISTENING",//can be LISTENING, WATCHING, PLAYING, STREAMING
+ });
+};
diff --git a/index.js b/index.js
index 9ff21def7..08a045275 100644
--- a/index.js
+++ b/index.js
@@ -1,41 +1,37 @@
-require("dotenv").config();
-const Discord = require("discord.js");
-const client = new Discord.Client();
-const fs = require("fs");
-
-client.config = {
- token: process.env.DISCORD_TOKEN,
- prefix: process.env.DISCORD_PREFIX,
- //api: process.env.GOOGLE_API,
-};
-
-client.commands = new Discord.Collection();
-client.queue = new Map();
-
-client.once("ready", () =>
- console.log("Ready, Logged in as " + client.user.tag)
-);
-
-fs.readdir(__dirname + "/commands/", (err, files) => {
- if (err) return console.error(err);
- files.forEach((file) => {
- if (!file.endsWith(".js")) return;
- let props = require(`./commands/${file}`);
- let commandName = file.split(".")[0];
- client.commands.set(commandName, props);
- console.log("Loading Command: " + commandName);
- });
-});
-
-client.on("message", (message) => {
- if (!message.content.startsWith(client.config.prefix) || message.author.bot)
- return;
- const args = message.content.slice(client.config.prefix.length).split(/ +/);
- const commandName = args.shift().toLowerCase();
- const command = client.commands.get(commandName);
- if (!command) return;
-
- command.run(client, message, args);
-});
-
-client.login(client.config.token);
+require("dotenv").config();//Loading .env
+const fs = require("fs");
+const { Collection, Client } = require("discord.js");
+
+const client = new Client();//Making a discord bot client
+client.commands = new Collection();//Making client.commands as a Discord.js Collection
+client.queue = new Map()
+
+client.config = {
+ prefix: process.env.PREFIX
+}
+
+//Loading Events
+fs.readdir(__dirname + "/events/", (err, files) => {
+ if (err) return console.error(err);
+ files.forEach((file) => {
+ const event = require(__dirname + `/events/${file}`);
+ let eventName = file.split(".")[0];
+ client.on(eventName, event.bind(null, client));
+ console.log("Loading Event: "+eventName)
+ });
+});
+
+//Loading Commands
+fs.readdir("./commands/", (err, files) => {
+ if (err) return console.error(err);
+ files.forEach((file) => {
+ if (!file.endsWith(".js")) return;
+ let props = require(`./commands/${file}`);
+ let commandName = file.split(".")[0];
+ client.commands.set(commandName, props);
+ console.log("Loading Command: "+commandName)
+ });
+});
+
+//Logging in to discord
+client.login(process.env.TOKEN)
diff --git a/install.bat b/install.bat
index 72c1d4b59..9ebca8405 100644
--- a/install.bat
+++ b/install.bat
@@ -1,3 +1,3 @@
npm i
-echo "Successfully Installed now open start.bat"
+echo "Successfully Installed now open start.bat or run by node index.js"
PAUSE
\ No newline at end of file
diff --git a/package.json b/package.json
index a8dfe0319..27fdf10a6 100644
--- a/package.json
+++ b/package.json
@@ -9,11 +9,11 @@
},
"dependencies": {
"@discordjs/opus": "^0.3.2",
- "axios": "^0.19.2",
- "cheerio": "^1.0.0-rc.3",
"discord.js": "^12.2.0",
"dotenv": "^8.2.0",
- "simple-youtube-api": "^5.2.1",
- "ytdl-core": "^3.1.1"
+ "ffmpeg": "0.0.4",
+ "ffmpeg-static": "^4.2.7",
+ "yt-search": "^2.2.4",
+ "ytdl-core": "^3.2.2"
}
}
diff --git a/util/error.js b/util/error.js
new file mode 100644
index 000000000..5011bc4a7
--- /dev/null
+++ b/util/error.js
@@ -0,0 +1,14 @@
+const { MessageEmbed } = require("discord.js")
+
+/**
+ * Easy to send errors because im lazy to do the same things :p
+ * @param {String} text - Message which is need to send
+ * @param {TextChannel} channel - A Channel to send error
+ */
+module.exports = async (text, channel) => {
+ let embed = new MessageEmbed()
+ .setColor("RED")
+ .setDescription(text)
+ .setFooter("Oops something went wrong :(")
+ await channel.send(embed)
+}
\ No newline at end of file
diff --git a/utils/ytSearch.js b/utils/ytSearch.js
deleted file mode 100644
index dd1517103..000000000
--- a/utils/ytSearch.js
+++ /dev/null
@@ -1,104 +0,0 @@
-const axios = require("axios");
-const cheerio = require("cheerio");
-
-const YouTube = require("simple-youtube-api");
-const youtube = new YouTube("AIzaSyC9wP9rVzyoeAt0EFNZmYmz0jPlpaCfhtg");
-
-const parseDuration = (string) => {
- const units = string.split(":").reverse();
- let hours = 0;
- let minutes = 0;
- let seconds = 0;
- while (units.length) {
- if (!seconds) seconds = parseInt(units.shift());
- else if (!minutes) minutes = parseInt(units.shift());
- else if (!hours) hours = parseInt(units.shift());
- }
- minutes += hours * 60;
- seconds += minutes * 60;
- return seconds;
-};
-
-// old method, doesn't work most of the time
-// const search = async (query) => {
-// let response;
-// let song = {};
-// try {
-// response = await axios.get(
-// `https://www.youtube.com/results?search_query=${query}`,
-// {
-// // headers: {
-// // "User-Agent":
-// // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
-// // "x-youtube-client-name": "1",
-// // "x-youtube-client-version": "2.20191008.04.01",
-// // "x-youtube-page-cl": "276511266",
-// // "x-youtube-page-label": "youtube.ytfe.desktop_20191024_3_RC0",
-// // "x-youtube-utc-offset": "0",
-// // "x-youtube-variants-checksum": "7a1198276cf2b23fc8321fac72aa876b",
-// // "accept-language": "en",
-// // },
-// }
-// );
-// } catch (err) {
-// response = err.response;
-// }
-// if (
-// response.status === 200 ||
-// response.status === 203 ||
-// response.status === 206
-// ) {
-// const html = response.data;
-// require("fs").writeFileSync("oof.html", html);
-// const $ = cheerio.load(html);
-
-// const results = $(".yt-lockup").toArray();
-// for (const resultElement of results) {
-// const result = $(resultElement);
-// if (!result.find(".standalone-ypc-badge-renderer-label").length) {
-// const durationElement = result.find("[class^=video-time]").first();
-// const contentElement = result.find(".yt-lockup-content").first();
-// const videoId = result.attr("data-context-item-id");
-
-// if (durationElement && contentElement && videoId) {
-// song.videoId = videoId;
-// song.url = `https://www.youtube.com/watch?v=${videoId}`;
-// const titleElement = contentElement.find(".yt-lockup-title");
-// if (titleElement) {
-// song.title = titleElement.find("a").first().text();
-// }
-// const bylineElement = contentElement.find(".yt-lockup-byline");
-// if (bylineElement) {
-// song.author = bylineElement.find("a").first().text();
-// }
-// song.duration = durationElement.text();
-// song.durationSeconds = parseDuration(durationElement.text());
-// const metaElement = contentElement.find(".yt-lockup-meta");
-// if (metaElement) {
-// song.ago = metaElement
-// .find(".yt-lockup-meta-info li")
-// .first()
-// .text();
-// song.views = parseInt(
-// metaElement
-// .find(".yt-lockup-meta-info li")
-// .eq(1)
-// .text()
-// .replace(" views", "")
-// .replace(/,/g, "")
-// );
-// }
-// return song;
-// }
-// }
-// }
-// }
-// };
-
-const search = async (query, limit) => {
- return await youtube.searchVideos(query, limit);
-};
-
-module.exports.parseDuration = parseDuration;
-module.exports.search = search;
-module.exports = search;
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index f8abaca10..000000000
--- a/yarn.lock
+++ /dev/null
@@ -1,805 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@discordjs/collection@^0.1.5":
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.5.tgz#1781c620b4c88d619bd0373a1548e5a6025e3d3a"
- integrity sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw==
-
-"@discordjs/form-data@^3.0.1":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697"
- integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-"@discordjs/node-pre-gyp@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@discordjs/node-pre-gyp/-/node-pre-gyp-0.1.0.tgz#762b3b40be8567186bd7e79084befec4738a9e89"
- integrity sha512-6u3EbK2x+j9bM3iK9/pE7BWLxOXZ1PvcsbDo3ZBdPocu95qPHj8zCVsBBk3Cao7V6o8QpwxUyJl6oVJ6T3ZgAg==
- dependencies:
- detect-libc "^1.0.3"
- mkdirp "^0.5.5"
- needle "^2.4.1"
- nopt "^4.0.3"
- npm-packlist "^1.4.8"
- npmlog "^4.1.2"
- rc "^1.2.8"
- rimraf "^3.0.2"
- semver "^7.3.0"
- tar "^6.0.2"
-
-"@discordjs/opus@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@discordjs/opus/-/opus-0.3.2.tgz#7dde2d4541ccfaa451e029f9d8da980286f9f56a"
- integrity sha512-T/ubykd4Xi19vDfw7/Oe+iTQBJ28yMI2PQAzK+Zue0PB9OpEYaeIXU7k5255061RwL+rHX9w7P/P2of+x2Vu2A==
- dependencies:
- "@discordjs/node-pre-gyp" "^0.1.0"
- node-addon-api "^2.0.0"
-
-"@types/node@*":
- version "14.0.13"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9"
- integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
- integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-abort-controller@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
- integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
- dependencies:
- event-target-shim "^5.0.0"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-are-we-there-yet@~1.1.2:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
- integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-axios@^0.19.2:
- version "0.19.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
- integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
- dependencies:
- follow-redirects "1.5.10"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-boolbase@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
- integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-cheerio@^1.0.0-rc.3:
- version "1.0.0-rc.3"
- resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
- integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
- dependencies:
- css-select "~1.2.0"
- dom-serializer "~0.1.1"
- entities "~1.1.1"
- htmlparser2 "^3.9.1"
- lodash "^4.15.0"
- parse5 "^3.0.1"
-
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
- integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
- integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-css-select@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
- integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
- dependencies:
- boolbase "~1.0.0"
- css-what "2.1"
- domutils "1.5.1"
- nth-check "~1.0.1"
-
-css-what@2.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
- integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
-
-debug@=3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
- dependencies:
- ms "2.0.0"
-
-debug@^3.2.6:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
- integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
- dependencies:
- ms "^2.1.1"
-
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
- integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
-detect-libc@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
-discord.js@^12.2.0:
- version "12.2.0"
- resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-12.2.0.tgz#31018732e42a495c92655055192221eab2ad11a9"
- integrity sha512-Ueb/0SOsxXyqwvwFYFe0msMrGqH1OMqpp2Dpbplnlr4MzcRrFWwsBM9gKNZXPVBHWUKiQkwU8AihXBXIvTTSvg==
- dependencies:
- "@discordjs/collection" "^0.1.5"
- "@discordjs/form-data" "^3.0.1"
- abort-controller "^3.0.0"
- node-fetch "^2.6.0"
- prism-media "^1.2.0"
- setimmediate "^1.0.5"
- tweetnacl "^1.0.3"
- ws "^7.2.1"
-
-dom-serializer@0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
- integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
- dependencies:
- domelementtype "^2.0.1"
- entities "^2.0.0"
-
-dom-serializer@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
- integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
- dependencies:
- domelementtype "^1.3.0"
- entities "^1.1.1"
-
-domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
- integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
-
-domelementtype@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
- integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
-
-domhandler@^2.3.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
- integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
- dependencies:
- domelementtype "1"
-
-domutils@1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
- integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
- dependencies:
- dom-serializer "0"
- domelementtype "1"
-
-domutils@^1.5.1:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
- integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
- dependencies:
- dom-serializer "0"
- domelementtype "1"
-
-dotenv@^8.2.0:
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
- integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
-
-entities@^1.1.1, entities@~1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
- integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
-
-entities@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
- integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
-
-event-target-shim@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
- integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-
-follow-redirects@1.5.10:
- version "1.5.10"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
- integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
- dependencies:
- debug "=3.1.0"
-
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-glob@^7.1.3:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
- integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
-html-entities@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
- integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
-
-htmlparser2@^3.9.1:
- version "3.10.1"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
- integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
- dependencies:
- domelementtype "^1.3.1"
- domhandler "^2.3.0"
- domutils "^1.5.1"
- entities "^1.1.1"
- inherits "^2.0.1"
- readable-stream "^3.1.1"
-
-iconv-lite@^0.4.4:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-ignore-walk@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
- integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
- dependencies:
- minimatch "^3.0.4"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
- integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-iso8601-duration@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/iso8601-duration/-/iso8601-duration-1.2.0.tgz#5fa6fc180a8fe95ad6a6721c9bdd9069cb59e80e"
- integrity sha512-ErTBd++b17E8nmWII1K1uZtBgD1E8RjyvwmxlCjPHNqHMD7gmcMHOw0E8Ro/6+QT4PhHRSnnMo7bxa1vFPkwhg==
-
-lodash@^4.15.0:
- version "4.17.19"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
- integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
-
-m3u8stream@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/m3u8stream/-/m3u8stream-0.7.1.tgz#74b01a67ca248ac7bbdc263a65d9d8d2c479a65c"
- integrity sha512-z6ldnAdhbuWOL6LmMkwptSZGzj+qbRytMKLTbNicwF/bJMjf9U9lqD57RNQUFecvWadEkzy6PDjcNJFFgi19uQ==
- dependencies:
- miniget "^1.6.1"
- sax "^1.2.4"
-
-mime-db@1.44.0:
- version "1.44.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
- integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
-
-mime-types@^2.1.12:
- version "2.1.27"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
- integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
- dependencies:
- mime-db "1.44.0"
-
-miniget@^1.6.1:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/miniget/-/miniget-1.7.2.tgz#f95eff50b78d798dddee2460c4aa3c72db1aa23a"
- integrity sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA==
-
-miniget@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/miniget/-/miniget-2.0.0.tgz#5792519173a56e9e79e144e7cfcb5d2c1312f361"
- integrity sha512-JAHY/3Dv673TFDmYcpF3yo755ViTy0fU2L0j9y+5bobs6+fbnX4k8UkmCqC8mwwgYUNDOEgHrN1P/oO+rQNxjw==
-
-minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@^1.2.0, minimist@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-minipass@^3.0.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
- integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
- dependencies:
- yallist "^4.0.0"
-
-minizlib@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
- integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
-mkdirp@^0.5.5:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-needle@^2.4.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0"
- integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==
- dependencies:
- debug "^3.2.6"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
-node-addon-api@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.1.tgz#4fd0931bf6d7e48b219ff3e6abc73cbb0252b7a3"
- integrity sha512-2WVfwRfIr1AVn3dRq4yRc2Hn35ND+mPJH6inC6bjpYCZVrpXPB4j3T6i//OGVfqVsR1t/X/axRulDsheq4F0LQ==
-
-node-fetch@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
- integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
-
-nopt@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
- integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-npm-bundled@^1.0.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
- integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
- dependencies:
- npm-normalize-package-bin "^1.0.1"
-
-npm-normalize-package-bin@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
- integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
-
-npm-packlist@^1.4.8:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
- integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
- npm-normalize-package-bin "^1.0.1"
-
-npmlog@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-nth-check@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
- integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
- dependencies:
- boolbase "~1.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
- integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-object-assign@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
- integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-osenv@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
- integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
-parse5@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
- integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
- dependencies:
- "@types/node" "*"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-prism-media@^1.2.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.2.tgz#4f1c841f248b67d325a24b4e6b1a491b8f50a24f"
- integrity sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-rc@^1.2.8:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-readable-stream@^2.0.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^3.1.1:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sax@^1.1.3, sax@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-semver@^7.3.0:
- version "7.3.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
- integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
-
-set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-signal-exit@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
- integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-
-simple-youtube-api@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/simple-youtube-api/-/simple-youtube-api-5.2.1.tgz#d1f6efb941ce404f50ce56e0c5e6bff249fcac6a"
- integrity sha512-vmndP9Bkh35tifn2OwY+th2imSsfYtmDqczgdOW5yEARFzvSoR8VSQFsivJnctfV5QHQUL6VrOpNdbmDRLh9Bg==
- dependencies:
- iso8601-duration "^1.2.0"
- node-fetch "^2.6.0"
-
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-tar@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39"
- integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^3.0.0"
- minizlib "^2.1.0"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
-tweetnacl@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
- integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-wide-align@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
- integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
- dependencies:
- string-width "^1.0.2 || 2"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-ws@^7.2.1:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
- integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-ytdl-core@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/ytdl-core/-/ytdl-core-3.1.1.tgz#ab466a2eabae6b84de8498b975439f28eddbacb7"
- integrity sha512-sHw8Vz56Bs7LRKhJARW8j2JREndHFBuEdnYKgjx4RHwh1t75TsdZ5/SRpz9TLkNm2M5S8gVwvWm7AD1blhjb0g==
- dependencies:
- html-entities "^1.3.1"
- m3u8stream "^0.7.1"
- miniget "^2.0.0"
- sax "^1.1.3"