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"