0% found this document useful (0 votes)
4 views

fmodn

Uploaded by

minatoweeb123
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

fmodn

Uploaded by

minatoweeb123
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 48

{

"TOKEN": "bot token goes here boizzzz",


"PREFIX": "?",

"maximum_leaderboard": "50",
"embedcolor": "#118fff"
}
const Discord = require("discord.js"); //load the Discord.js Library
require("http").createServer((req, res) => res.end("Arcane clone is ONLINE Copy
the above link andd it to uptimer To make your discord bot 24/7
online")).listen(process.env.PORT || 8080)
const client = new Discord.Client(); //make a new Client
const config = require("./config.json"); //load the config.json file
const Enmap = require("enmap") //load the enmap library
const canvacord = require("canvacord") //load the canvacord library
client.points = new Enmap({ name: "points" }); //For ranking system
client.on("ready", ()=>console.log("READY")); //log when the bot gets ready
const ranking = require("./ranking"); //load the ranking file
ranking(client); //call the ranking file with the client
client.login(process.env.login); //start the bot with the bot token

client.on('ready' , () =>{
console.log('Bot esta escuchando');
client.user.setStatus('dnd');

console.log('bot status', client.user.presence.status);


client.user.setActivity('?levelinghelp | Not Launched | Under Development',
{ type: 'WATCHING'}).catch(console.error);
});
co
nst config = require("./config.json");
const canvacord = require("canvacord");
const Discord = require("discord.js");
const prefix = config.PREFIX;
const embedcolor = config.embedcolor;
const maximum_leaderboard = config.maximum_leaderboard; //maximum 50
users for the leaderboard!

module.exports = function (client) {


const description = {
name: "RANKING",
filename: "ranking.js",
version: "2.0"
}
//log that the module is loaded
console.log(` :: Module: ${description.name} | Loaded version $
{description.version} from ("${description.filename}")`)
//voice state update event to check joining/leaving channels
client.on("message", async (message) => {

if (message.author.bot || !message.guild) return;


//get the key of the user for this guild
const key = `${message.guild.id}-${message.author.id}`;
/**
* databasing
* @info General databasing, which sets the userinto the database if he types
something
*/
function databasing(rankuser) {
//if(rankuser && rankuser.bot) return console.log("GOTTA IGNORE BOT")
client.points.ensure(rankuser ? `${message.guild.id}-${rankuser.id}` : `$
{message.guild.id}-${message.author.id}`, {
user: rankuser ? rankuser.id : message.author.id,
usertag: rankuser ? rankuser.tag : message.author.tag,
xpcounter: 1,
guild: message.guild.id,
points: 0,
neededpoints: 400,
level: 1,
oldmessage: "",
});
client.points.set(rankuser ? `${message.guild.id}-${rankuser.id}` : `$
{message.guild.id}-${message.author.id}`, rankuser ? rankuser.tag :
message.author.tag, `usertag`); //set the usertag with EVERY message, if he has
nitro his tag might change ;)
client.points.set(message.guild.id, 1, `setglobalxpcounter`); //set points to 0
}
databasing();

/**
* ARGUMENTS
* @info General arguments for the Whole message Event
*/
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();

/**
* COMMANDS
* @info if a message starts with the prefix, then run it
*/
if (message.content.startsWith(prefix)) {

switch (command) {
case `rank`:
rank(message.mentions.users.first()||message.author);
break;
/////////////////////////////////
case `leaderboard`:
case `lb`:
leaderboard();
break;
/////////////////////////////////
case `setxpcounter`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")
setxpcounter();
break;
/////////////////////////////////
case `setglobalxpcounter`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")
setglobalxpcounter();
break;
/////////////////////////////////
case `addpoints`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")
addpoints();
break;
/////////////////////////////////
case `setpoints`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

setpoints();
break;
/////////////////////////////////
case `removepoints`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

removepoints();
break;
/////////////////////////////////
case `addlevel`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")
addlevel();
break;
/////////////////////////////////
case `setlevel`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

setlevel();
break;
/////////////////////////////////
case `removelevel`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

removelevel();
break;
/////////////////////////////////
case `resetranking`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

resetranking();
break;
/////////////////////////////////
case `registerall`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

registerall();
break;
/////////////////////////////////
case `addrandomall`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")

addrandomall();
break;
/////////////////////////////////
case `resetrankingall`:
if (!message.member.hasPermission("ADMINISTRATOR") || !
message.member.hasPermission("MANAGE_GUILD")) return message.reply("You
are not allowed to run this cmd!")
resetrankingall()
break;
/////////////////////////////////
case `levelhelp`:
case `rankinghelp`:
case `levelinghelp`:
case `rankhelp`:
levelinghelp();
break;
/////////////////////////////////
default:
message.reply(`UNKNOWN COMMAND! Try: \`${prefix}levelinghelp\``)
break;
}
return;
}

/**
* Anti double messages
* @info if the old message is the same as the message before: SKIP
*/
function anti_double_messages() {
const oldmessage = client.points.get(key, `oldmessage`);
if (oldmessage.toLowerCase() === message.content.toLowerCase().replace(/\
s+/g, '')) {
return console.log("DOUPLICATED MESSAGE, no ranking points sorry!");
}
client.points.set(key, message.content.toLowerCase().replace(/\s+/g, ''),
`oldmessage`); //setting the new old message
}
anti_double_messages();

/**
* Giving Ranking Points
* @info adding a random number rounded, between 1 and 5
*/
function Giving_Ranking_Points(thekey, maxnumber) {
let setglobalxpcounter = client.points.get(message.guild.id,
"setglobalxpcounter")
if (!maxnumber) maxnumber = 5;
var randomnum = ( Math.floor(Math.random() * Number(maxnumber)) + 1 ) *
setglobalxpcounter;
randomnum *= Number(client.points.get(key, `xpcounter`));
randomnum = Number(Math.floor(randomnum));
const curPoints = client.points.get(thekey ? thekey : key, `points`);
const neededPoints = client.points.get(thekey ? thekey : key, `neededpoints`);
let leftpoints = neededPoints - curPoints;

let toaddpoints = randomnum;


addingpoints(toaddpoints, leftpoints);

function addingpoints(toaddpoints, leftpoints) {


if (toaddpoints >= leftpoints) {
client.points.set(thekey ? thekey : key, 0, `points`); //set points to 0
client.points.inc(thekey ? thekey : key, `level`); //add 1 to level
//get current NEW level
const newLevel = client.points.get(thekey ? thekey : key, `level`);
/**
* HARDEN UP THE NEXT LEVEL UP
* @info The neededpoints shall raise always, when the newLevel is divideable by
4, at levels: 4,8,12,16,20,24,28,32,36,40,44,...
*/
if (newLevel % 4 === 0) client.points.math(thekey ? thekey : key, `+`, 100,
`neededpoints`)

const newneededPoints = client.points.get(thekey ? thekey : key,


`neededpoints`); //get NEW needed Points
const newPoints = client.points.get(thekey ? thekey : key, `points`); //get
current NEW points

addingpoints(toaddpoints - leftpoints, newneededPoints); //Ofc there is still


points left to add so... lets do it!
LEVELUP() //SEND LEVEL UP EMBED MESSAGE
} else {
client.points.math(thekey ? thekey : key, `+`, Number(toaddpoints), `points`)
}
}
}
Giving_Ranking_Points();

/**
* CURRENT DATA
* @info getting the current data for LEVEL, POINTS and NEEDEDPOINTS
*/
const curLevel = client.points.get(key, `level`);
const curPoints = client.points.get(key, `points`);
const neededPoints = client.points.get(key, `neededpoints`);

/**
* LEVELUP
* @info curPoints >= neededPoints | =>
* @info if the current points are equal or more then the neededpoints the points
shall reset and the level shall raise!
*/
function LEVELUP() {
const newLevel = client.points.get(key, `level`); //get current NEW level
const newPoints = client.points.get(key, `points`); //get current NEW points
const newneededPoints = client.points.get(key, `neededpoints`); //get NEW
needed Points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${message.author.tag}`,
message.member.user.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled up to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
//send ping and embed message
message.reply(embed);
}

/**
* @param { FUNCTIONS AREA }
* @info FUNCTIONS
* @info Every command leads into a single function, which may or may not be
able to work together!
*/

/**
* @info this function "BLOCK" is for the USER RANK and for LEADERBOARD
*/
function rank(the_rankuser) {
/**
* GET the Rank User
* @info you can tag him
*/
try {
let rankuser = the_rankuser ? the_rankuser : message.mentions.users.first() ?
message.mentions.users.first() : args[0] ? args[0].length == 18 ?
message.guild.members.cache.get(args[0]).user :
message.guild.members.cache.find(u =>
u.user.username.toLowerCase().includes(String(args[0]).toLowerCase())).user :
message.author
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");
//Call the databasing function!
const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);
//do some databasing
const filtered = client.points.filter(p => p.guild === message.guild.id).array();
const sorted = filtered.sort((a, b) => b.level - a.level || b.points - a.points);
const top10 = sorted.splice(0, message.guild.memberCount);
let i = 0;
//count server rank sometimes an error comes
for (const data of top10) {
try {
i++;
if (data.user === rankuser.id) break; //if its the right one then break it ;)
} catch {
i = `Error counting Rank`;
break;
}
}
//math
let curpoints = Number(client.points.get(key, `points`).toFixed(2));
//math
let curnextlevel = Number(client.points.get(key, `neededpoints`).toFixed(2));
//if not level == no rank
if (client.points.get(key, `level`) === undefined) i = `No Rank`;
//define the ranking card
const rank = new canvacord.Rank()
.setAvatar(rankuser.displayAvatarURL({
dynamic: false,
format: 'png'
}))
.setCurrentXP(Number(curpoints.toFixed(2)), embedcolor)
.setRequiredXP(Number(curnextlevel.toFixed(2)), embedcolor)
.setStatus("online", true, 5)
.renderEmojis(true)
.setProgressBar(embedcolor, "COLOR")
.setRankColor(embedcolor, "COLOR")
.setLevelColor(embedcolor, "COLOR")
.setUsername(rankuser.username, embedcolor)
.setRank(Number(i), "Rank", true)
.setLevel(Number(client.points.get(key, `level`)), "Level", true)
.setDiscriminator(rankuser.discriminator, embedcolor);
rank.build()
.then(data => {
//add rankcard to attachment
const attachment = new Discord.MessageAttachment(data, "RankCard.png");
//define embed
const embed = new Discord.MessageEmbed()
.setTitle(`Ranking of: ${rankuser.username}`)
.setColor(embedcolor)
.setImage("attachment://RankCard.png")
.attachFiles(attachment)
//send that embed
message.channel.send(embed);
return;
});
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function leaderboardembed() {
const filtered = client.points.filter(p => p.guild === message.guild.id).array();
let orilent;
const sorted = filtered.sort((a, b) => b.level - a.level || b.points - a.points);
let embeds = [];
let j = 0;
let maxnum = 50;
orilent = sorted.length;
if(isNaN(maxnum)) {
console.log("maximum_leaderboard NOT A NUMBER")
maxnum = 50;}
if (maxnum > sorted.length)
maxnum = sorted.length + (10 - Number(String(sorted.length/10).slice(2)));
if(maxnum < 10) maxnum = 10;
for (let i = 10; i <= maxnum; i += 10) {
const top = sorted.splice(0, 10);
const embed = new Discord.MessageEmbed()
.setTitle(`\`${message.guild.name}\` | Leaderboard`)
.setTimestamp()
.setDescription(`Top ${i<orilent?i:orilent}/${orilent} Ranking:`)
.setColor(embedcolor);
for (const data of top) {
j++;
try {
embed.addField(`**${j}**. \`${data.usertag}\``, `**Points:** \`$
{data.points.toFixed(2)}\` / \`${data.neededpoints}\` | **Level:** \`$
{data.level}\``);
} catch {
embed.addField(`**${j}**. \`${data.usertag}\``, `**Points:** \`$
{data.points.toFixed(2)}\` / \`${data.neededpoints}\` | **Level:** \`$
{data.level}\``);
}
}
embeds.push(embed);
}
return embeds;
}
async function leaderboard() {
let currentPage = 0;
const embeds = leaderboardembed();
if(embeds.length == 1){
return message.channel.send(embeds[0])
}
const lbembed = await message.channel.send(
`**Current Page - ${currentPage + 1}/${embeds.length}**`,
embeds[currentPage]
);

try {
await lbembed.react("⏪");
await lbembed.react("⏹");
await lbembed.react("⏩");
} catch (error) {
console.error(error);
}

const filter = (reaction, user) => ["⏪", "⏹", "⏩"].includes(reaction.emoji.name)


&& message.author.id === user.id;
const collector = lbembed.createReactionCollector(filter, {
time: 60000
});

collector.on("collect", async (reaction, user) => {


try {
if (reaction.emoji.name === "⏩") {
if (currentPage < embeds.length - 1) {
currentPage++;
lbembed.edit(`**Current Page - ${currentPage + 1}/${embeds.length}**`,
embeds[currentPage]);
}
} else if (reaction.emoji.name === "⏪") {
if (currentPage !== 0) {
--currentPage;
lbembed.edit(`**Current Page - ${currentPage + 1}/${embeds.length}**`,
embeds[currentPage]);
}
} else {
collector.stop();
reaction.message.reactions.removeAll();
}
await reaction.users.remove(message.author.id);
} catch (error) {
console.error(error);
}
});
}

function setxpcounter(){
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");
//Call the databasing function!
const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);
if (!args[1]) return message.reply("PLEASE ADD POINTS TO ADD! Usage:
`setxpcounter @USER 2`");
client.points.set(key, Number(args[1]), `xpcounter`); //set points to 0
const embed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully set XP COUNTER to \`${args[1]}x\` for: \`$
{rankuser.tag}\``)
message.reply(embed);
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function setglobalxpcounter(){
try {
if (!args[0]) return message.reply("PLEASE ADD POINTS TO ADD! Usage:
`setglobalxpcounter 2`");
client.points.set(message.guild.id, Number(args[0]), `setglobalxpcounter`); //set
points to 0
const embed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully set GLOBAL XP COUNTER to \`${args[0]}x\` for: \
`${message.guild.name}\``)
message.reply(embed);
} catch {
}
}
/**
* @info this function "BLOCK" is for managing the POINTS, adding, setting and
removing! PER USER
*/
function addpoints(amount) {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");
//Call the databasing function!
const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);

const curPoints = client.points.get(key, `points`);


const neededPoints = client.points.get(key, `neededpoints`);
let leftpoints = neededPoints - curPoints;
if (!args[1] && !amount) return message.reply("PLEASE ADD POINTS TO ADD!
Usage: `addpoints @USER 100`");
if (!amount) amount = Number(args[1]);
if (amount < 0) removepoints(amount);
let toaddpoints = amount;
addingpoints(toaddpoints, leftpoints);

function addingpoints(toaddpoints, leftpoints) {


if (toaddpoints >= leftpoints) {
client.points.set(key, 0, `points`); //set points to 0
client.points.inc(key, `level`); //add 1 to level
//HARDING UP!
const newLevel = client.points.get(key, `level`); //get current NEW level
if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`)

const newneededPoints = client.points.get(key, `neededpoints`); //get NEW


needed Points
const newPoints = client.points.get(key, `points`); //get current NEW points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled up to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints + toaddpoints - leftpoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
//send ping and embed message only IF the adding will be completed!
if (toaddpoints - leftpoints < newneededPoints)
message.channel.send(rankuser, embed);
addingpoints(toaddpoints - leftpoints, newneededPoints); //Ofc there is still
points left to add so... lets do it!
} else {
client.points.math(key, `+`, Number(toaddpoints), `points`)
}
}

const embed = new Discord.MessageEmbed()


.setColor(embedcolor)
.setDescription(`Successfully added \`${toaddpoints} Points\` to: \`$
{rankuser.tag}\``)
message.reply(embed);
rank(rankuser); //also sending the rankcard
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function setpoints() {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");
//Call the databasing function!
const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);

let toaddpoints = Number(args[1]);


if (!args[1]) return message.reply("PLEASE ADD POINTS TO SET! Usage:
`addpoints @USER 100`");
if (Number(args[1]) < 0) args[1] = 0;
const neededPoints = client.points.get(key, `neededpoints`);
addingpoints(toaddpoints, neededPoints);

function addingpoints(toaddpoints, neededPoints) {


if (toaddpoints >= neededPoints) {
client.points.set(key, 0, `points`); //set points to 0
client.points.inc(key, `level`); //add 1 to level
//HARDING UP!
const newLevel = client.points.get(key, `level`); //get current NEW level
if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`)

const newneededPoints = client.points.get(key, `neededpoints`); //get NEW


needed Points
const newPoints = client.points.get(key, `points`); //get current NEW points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled up to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
//send ping and embed message
message.channel.send(rankuser, embed);

addingpoints(toaddpoints - neededPoints, newneededPoints); //Ofc there is still


points left to add so... lets do it!
} else {
client.points.set(key, Number(toaddpoints), `points`)
}
}

const embed = new Discord.MessageEmbed()


.setColor(embedcolor)
.setDescription(`Successfully set \`${toaddpoints} Points\` to: \`$
{rankuser.tag}\``)
message.channel.send(embed);
rank(rankuser); //also sending the rankcard
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function removepoints(amount) {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");
//Call the databasing function!
const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);

const curPoints = client.points.get(key, `points`);


const neededPoints = client.points.get(key, `neededpoints`);

if (!args[1] && !amount) return message.reply("PLEASE ADD POINTS TO


REMOVE! Usage: `addpoints @USER 100`");
if (!amount) amount = Number(args[1]);
if (amount < 0) addpoints(amount);

removingpoints(amount, curPoints);

function removingpoints(amount, curPoints) {


if (amount > curPoints) {
let removedpoints = amount - curPoints - 1;
client.points.set(key, neededPoints - 1, `points`); //set points to 0
if (client.points.get(key, `level`) == 1) return message.reply("ALREADY AT 0
POINTS");
client.points.dec(key, `level`); //remove 1 from level
//HARDING UP!
const newLevel = client.points.get(key, `level`); //get current NEW level
if ((newLevel + 1) % 4 === 0) { //if old level was divideable by 4 set
neededpoints && points -100
client.points.math(key, `-`, 100, `points`)
client.points.math(key, `-`, 100, `neededpoints`)
}

const newneededPoints = client.points.get(key, `neededpoints`); //get NEW


needed Points
const newPoints = client.points.get(key, `points`); //get current NEW points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled down to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints - amount + removedpoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
//send ping and embed message only IF the removing will be completed!
if (amount - removedpoints < neededPoints)
message.channel.send(rankuser, embed);

removingpoints(amount - removedpoints, newneededPoints); //Ofc there is still


points left to add so... lets do it!
} else {
client.points.math(key, `-`, Number(amount), `points`)
}
}

const embed = new Discord.MessageEmbed()


.setColor(embedcolor)
.setDescription(`Successfully removed \`${amount} Points\` from: \`$
{rankuser.tag}\``)
message.reply(embed);
rank(rankuser); //also sending the rankcard
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

/**
* @info this function "BLOCK" is for managing the LEVELS, adding, setting and
removing! PER USER
*/
function addlevel() {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");

//Call the databasing function!


const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);
let newLevel = client.points.get(key, `level`);
if (!args[1]) return message.reply("Please add the amount of Levels you want to
add to! Usage: addlevel @User 4");
if (Number(args[1]) < 0) args[1] = 0;
for (let i = 0; i < Number(args[1]); i++) {
client.points.set(key, 0, `points`); //set points to 0
client.points.inc(key, `level`); //add 1 to level
//HARDING UP!
newLevel = client.points.get(key, `level`); //get current NEW level
if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`)
}
const newneededPoints = client.points.get(key, `neededpoints`); //get NEW
needed Points
const newPoints = client.points.get(key, `points`); //get current NEW points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled up to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
message.channel.send(rankuser, embed);
rank(rankuser); //also sending the rankcard
const sssembed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully added ${args[1]} Levels to: \`${rankuser.tag}\``)
message.reply(sssembed);
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function setlevel() {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");

//Call the databasing function!


const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);

if (!args[1]) return message.reply("Please add the amount of Levels you want to


set to! Usage: setlevel @User 3");
if (Number(args[1]) < 1) args[1] = 1;
client.points.set(key, Number(args[1]), `level`); //set level to the wanted level
client.points.set(key, 0, `points`); //set the points to 0

let newLevel = client.points.get(key, `level`); //set level to the wanted level


let counter = Number(newLevel) / 4;

client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing


sure
//add 100 for each divideable 4
for (let i = 0; i < Math.floor(counter); i++) {
client.points.math(key, `+`, 100, `neededpoints`)
}
const newneededPoints = client.points.get(key, `neededpoints`); //get NEW
needed Points

const newPoints = client.points.get(key, `points`); //get current NEW points


//THE INFORMATION EMBED
const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled up to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
message.channel.send(rankuser, embed);
rank(rankuser); //also sending the rankcard
const sssembed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully set \`${rankuser.tag}\` to Level: ${args[1]}`)
message.reply(sssembed);
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

function removelevel() {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");

//Call the databasing function!


const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);
let newLevel = client.points.get(key, `level`);
if (!args[1]) return message.reply("Please add the amount of Levels you want to
remove to! Usage: removelevel @User 4");
if (Number(args[1]) < 0) args[1] = 0;
for (let i = 0; i < Number(args[1]); i++) {
client.points.set(key, 0, `points`); //set points to 0
client.points.dec(key, `level`); //add 1 to level
//HARDING UP!
newLevel = client.points.get(key, `level`); //get current NEW level
if(newLevel < 1) client.points.set(key, 1 ,`level`); //if smaller then 1 set to 1
}
snewLevel = client.points.get(key, `level`); //get current NEW level
let counter = Number(snewLevel) / 4;

client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing


sure
//add 100 for each divideable 4
for (let i = 0; i < Math.floor(counter); i++) {
client.points.math(key, `+`, 100, `neededpoints`)
}
const newneededPoints = client.points.get(key, `neededpoints`); //get NEW
needed Points
const newPoints = client.points.get(key, `points`); //get current NEW points

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've leveled down to Level: **\`${newLevel}\`**! (Points: \`$
{newPoints}\` / \`${newneededPoints}\`) `)
.setColor(embedcolor);
message.channel.send(rankuser, embed);
rank(rankuser); //also sending the rankcard
const sssembed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully removed \`${args[0]}\` Levels from: \`$
{rankuser.tag}\``)
message.reply(sssembed);
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

/**
* @info This function is for ressetting a single USER
*/
function resetranking() {
try {
/**
* GET the Rank User
* @info you can tag him
*/
if (!args[0]) return message.reply("PLEASE ADD A RANKUSER!");
let rankuser = message.mentions.users.first();
if (!rankuser) return message.reply("PLEASE ADD A RANKUSER!");
// if(rankuser.bot) return message.reply("NO BOTS!");

//Call the databasing function!


const key = `${message.guild.id}-${rankuser.id}`;
databasing(rankuser);

client.points.set(key, 1, `level`); //set level to 0


client.points.set(key, 0, `points`); //set the points to 0
client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing
sure
client.points.set(key, "", `oldmessage`); //set old message to 0

//THE INFORMATION EMBED


const embed = new Discord.MessageEmbed()
.setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({
dynamic: true
}))
.setDescription(`You've been resetted to Level: **\`1\`**! (Points: \`0\` / \`400\`)
`)
.setColor(embedcolor);
message.channel.send(rankuser, embed);
rank(rankuser); //also sending the rankcard
const sssembed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully resetted ranking from: \`${rankuser.tag}\``)
message.reply(sssembed);
} catch (error) {
console.log(error.stack)
message.reply("PLEASE ADD A RANKUSER!");
}
}

/**
* @info this function "BLOCK" is for managing the POINTS for EVERYONE, like
randompoints to EVERYONE, and registering EVERYONE and resetting
EVERYONE
*/
function registerall() {
let allmembers = message.guild.members.cache.keyArray();
for (let i = 0; i < allmembers.length; i++) {
//Call the databasing function!
let rankuser = message.guild.members.cache.get(allmembers[i]).user;
databasing(rankuser);
}
const embed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully registered everyone`)
message.reply(embed);
}

function resetrankingall() {
let allmembers = message.guild.members.cache.keyArray();
for (let i = 0; i < allmembers.length; i++) {
let rankuser = message.guild.members.cache.get(allmembers[i]).user;
const key = `${message.guild.id}-${rankuser.id}`;
client.points.set(key, 1, `level`); //set level to 0
client.points.set(key, 0, `points`); //set the points to 0
client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing
sure
client.points.set(key, "", `oldmessage`); //set old message to 0
}
const embed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully resetted everyone`)
message.reply(embed);
}

function addrandomall() {
let maxnum = 5;
if (args[0]) maxnum = Number(args[0]);
let allmembers = message.guild.members.cache.keyArray();
for (let i = 0; i < allmembers.length; i++) {
//Call the databasing function!
let rankuser = message.guild.members.cache.get(allmembers[i]).user;
databasing(rankuser);
if(rankuser.bot) continue;
Giving_Ranking_Points(`${message.guild.id}-${rankuser.id}`, maxnum);
Giving_Ranking_Points(`${message.guild.id}-${message.author.id}`, maxnum);
}
const embed = new Discord.MessageEmbed()
.setColor(embedcolor)
.setDescription(`Successfully added ${args[0]} Points to everyone`)
message.reply(embed);
}

function levelinghelp() {
const embed = new Discord.MessageEmbed()
.setTitle(`\`${message.guild.name}\` | Ranking Commands`)
.setTimestamp()
.setColor(embedcolor)
.addField("Commands 1", "<a:cb_arrow4:880374383703629834> `rank
[@User]` **__Shows the Rank of a User__**\n
<a:cb_arrow4:880374383703629834> `leaderboard` **__Shows the Top 10
Leaderboard__** \n <a:cb_arrow4:880374383703629834> `setxpcounter
<@USER> <AMOUNT>` **_Changes the amount of how much to count, x1, x2,
x3, ..._** \n <a:cb_arrow4:880374383703629834> `addpoints <@User>
<Amount`**__Add a specific amount of Points to a User__** \n
<a:cb_arrow4:880374383703629834> `setpoints <@User> <Amount>` **__Set
a specific amount of Points to a User__** \n
<a:cb_arrow4:880374383703629834> `removepoints <@User> <Amount>`
**__Remove a specific amount of Points to a User__** \n
<a:cb_arrow4:880374383703629834> `addlevel <@User> <Amount` **__Add
a specific amount of Levels to a User__**")
.addField("\n \n Commands 2", " <a:cb_arrow4:880374383703629834>
`setlevel <@User> <Amount>` **__Set a specific amount of Levels to a
User__** \n <a:cb_arrow4:880374383703629834> `removelevel <@User>
<Amount>` **__Remove a specific amount of Levels to a User__** \n
<a:cb_arrow4:880374383703629834> `resetranking <@User>` **__Resets the
ranking of a User__** \n
<a:cb_arrow4:880374383703629834>`setglobalxpcounter <AMOUNT>`
**__Sets the global xp counter for this guild, standard 1__** \n
<a:cb_arrow4:880374383703629834> `resetrankingall` **__Reset ranking of
everyone in this Server__** \n <a:cb_arrow4:880374383703629834>
`addrandomall` **__Add a random amount of Points to everyone__**")
.setDescription(`<a:cb_arrow4:880374383703629834> **__Arcane Clone__ This
is the Help pannel Of Arcan clone** \n Click Me to
[Invite](https://discord.com/api/oauth2/authorize?
client_id=903278756280541184&permissions=8&scope=bot)`)
.setThumbnail(`https://i.pinimg.com/550x/4c/68/32/4c68325818a28e7c849a174
086edf39e.jpg`)
.setFooter(`Bot made BY Custom Bot Hub Team`)
.setImage('https://cdn.discordapp.com/attachments/880437174061895718/9071
83961929822248/unknown.png')
message.channel.send(embed)
}
})
}
{
"name": "better_discord_ranking_system",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@canvacord/assets": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@canvacord/assets/-/assets-2.1.0.tgz",
"integrity":
"sha512-VwPVQrMz/nVLiAlkqUuWI+wuOBptpik2g+eIj2ADOsiK2yiLN/4ZSL+V0SQ
UidB3OLfAmuY949kCJ788CD5P9g=="
},
"@canvacord/emoji-parser": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@canvacord/emoji-parser/-/emoji-parser-
1.0.1.tgz",
"integrity":
"sha512-Lb3xatdd91MR9tU4sicgrxxKg+/rVD1zKTOh55bmVF2Ri5X8vHTV+jNHTv
RzkomGpyepGM+7qA4xMvG8ZqtO8g==",
"requires": {
"twemoji-parser": "^13.0.0"
}
},
"@discordjs/collection": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-
0.1.6.tgz",
"integrity": "sha512-
utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hER
eOPQZCJaRKoURwRotKucQ=="
},
"@discordjs/form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-
3.0.1.tgz",
"integrity":
"sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+
BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"@mapbox/node-pre-gyp": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-
1.0.7.tgz",
"integrity": "sha512-
PplSvl4pJ5N3BkVjAdDzpPhVUPdC73JgttkR+LnBx2OORC1GCQsBjUeEuipf9uOaAM
1SbxcdZFfR3KDTKm2S0A==",
"requires": {
"detect-libc": "^1.0.3",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
"node-fetch": "^2.6.5",
"nopt": "^5.0.0",
"npmlog": "^6.0.0",
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"tar": "^6.1.11"
}
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity":
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNf
NtAfZ9/1RtehkszU9qcTii0Q=="
},
"abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-
3.0.0.tgz",
"integrity":
"sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9
wnHDiQsEj19q0drzdWdeAHtweg==",
"requires": {
"event-target-shim": "^5.0.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity":
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk5
8UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
}
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-
quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/
ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"aproba": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
"integrity":
"sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9c
l27Tmu5gg3QUbUrQYa/y+KOHPQ=="
},
"are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-
2.0.0.tgz",
"integrity":
"sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZj
G04HiK7zV/p6Vs9952MrMeUIw==",
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
}
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-
1.0.2.tgz",
"integrity": "sha512-
3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2
MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-
AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNe
PLwzxq8iypo41qeWA=="
},
"better-sqlite3": {
"version": "7.4.5",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.5.tgz",
"integrity": "sha512-
mybC3dgrtJeHkIRGP36tST7wjBlIMgTRAXhhO4bMpPZ17EG23FZxZeFcwKWy6o8m
V1SKQFnQNyeAZlQpGrgheQ==",
"requires": {
"bindings": "^1.5.0",
"prebuild-install": "^7.0.0",
"tar": "^6.1.11"
}
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity":
"sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Ae
xs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-
1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqW
VA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-
1.1.11.tgz",
"integrity":
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOY
FldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity":
"sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVl
Ba4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"canvacord": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/canvacord/-/canvacord-5.2.3.tgz",
"integrity": "sha512-
aYxGA7tVQi3NCa7Qxg2b9u+wAeek2xE5q+nJjiReZofeUx0d1Xq731UerKf+iVIPBr
CAcjbv/yflJL0qVwPuMQ==",
"requires": {
"@canvacord/assets": "^2.0.5",
"@canvacord/emoji-parser": "^1.0.1",
"canvas": "^2.8.0",
"gifencoder": "^2.0.1",
"moment": "^2.29.1",
"moment-duration-format": "^2.3.2"
}
},
"canvas": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/canvas/-/canvas-2.8.0.tgz",
"integrity": "sha512-
gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVc
MYwXD659J8NyzjRY/2aE+C2Q==",
"requires": {
"@mapbox/node-pre-gyp": "^1.0.0",
"nan": "^2.14.0",
"simple-get": "^3.0.3"
}
},
"chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-
bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b
4Eydl+pVbIyE1DcvCWgQ=="
},
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity":
"sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHys
vqHGS3mP6mznPckpXmw1nI9cJjyRg=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-
1.0.8.tgz",
"integrity": "sha512-
FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOY
wxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-
strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-
ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9a
w2lmBDLgkObEA4DWNJ9FYQ=="
},
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity":
"sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DF
tzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
"ms": "2.1.2"
}
},
"decompress-response": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-
response-4.2.1.tgz",
"integrity":
"sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHe
mTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"requires": {
"mimic-response": "^2.0.0"
}
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity":
"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWs
m2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-
1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
"discord.js": {
"version": "12.5.3",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz",
"integrity":
"sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVW
wEcgbQR97XQ+mcnqJpmJ/92B4Aw==",
"requires": {
"@discordjs/collection": "^0.1.6",
"@discordjs/form-data": "^3.0.1",
"abort-controller": "^3.0.0",
"node-fetch": "^2.6.1",
"prism-media": "^1.2.9",
"setimmediate": "^1.0.5",
"tweetnacl": "^1.0.3",
"ws": "^7.4.4"
}
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-
MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ
8Eu3TdM14SawnVUmGE6A=="
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-
+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7v
S9x/oIyhLP5PR1H+phQAHu5Q==",
"requires": {
"once": "^1.4.0"
}
},
"enmap": {
"version": "5.8.7",
"resolved": "https://registry.npmjs.org/enmap/-/enmap-5.8.7.tgz",
"integrity": "sha512-
JmTRK0hFjatxz6tWN+E4IzuMz5rxKjQvweRXzlmhrgAa66b96DAySW3YRb5p0drpJ7
ZLt1WX+PWIpnHDH134jQ==",
"requires": {
"better-sqlite3": "^7.1.0",
"lodash": "^4.17.20",
"on-change": "^2.0.1",
"serialize-javascript": "^5.0.1"
}
},
"event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-
5.0.1.tgz",
"integrity":
"sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM
2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
"expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-
2.0.3.tgz",
"integrity":
"sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH
+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity":
"sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm
1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-
y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt
6ZNKm+w+Hfp/Bciwow=="
},
"fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
"integrity":
"sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cD
l8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"requires": {
"minipass": "^3.0.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"gauge": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz",
"integrity":
"sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGU
KbhrgKm0S3EjW3scMFuQmWSROw==",
"requires": {
"ansi-regex": "^5.0.1",
"aproba": "^1.0.3 || ^2.0.0",
"color-support": "^1.1.2",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.1",
"signal-exit": "^3.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"wide-align": "^1.1.2"
}
},
"gifencoder": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/gifencoder/-/gifencoder-2.0.1.tgz",
"integrity":
"sha512-x19DcyWY10SkshBpokqFOo/HBht9GB75evRYvaLMbez9p+yB/o+kt0fK9
AwW59nFiAMs2UUQsjv1lX/hvu9Ong==",
"requires": {
"canvas": "^2.2.0"
}
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-
package-0.0.0.tgz",
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
},
"glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-
lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBk
PffO641IP9jWa1z4ivqG26Q==",
"requires": {
"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": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"https-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-
5.0.0.tgz",
"integrity": "sha512-
EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7
bz6Ht1eaRIa6QaJqO5rCFbA==",
"requires": {
"agent-base": "6",
"debug": "4"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity":
"sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7
KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity":
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+En
BiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity":
"sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREO
E7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-
point-3.0.0.tgz",
"integrity": "sha512-
zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk
+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-
v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17Lhb
ZVGedAJv8XZ1tvj5FvSg=="
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity":
"sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYO
YCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity":
"sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2m
d0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"requires": {
"semver": "^6.0.0"
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity":
"sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM3
4M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
"mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
"integrity": "sha512-
5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMy
NFz/EtYDSkiiEHx3F7UN6g=="
},
"mime-types": {
"version": "2.1.34",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
"integrity":
"sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhk
KiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"requires": {
"mime-db": "1.51.0"
}
},
"mimic-response": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-
2.1.0.tgz",
"integrity":
"sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5
DwVxSV4NcYHjzMkoj5LjQZwTQLEA=="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-
yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOC
dCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-
FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg
6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"minipass": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
"integrity":
"sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVV
aufV8PNf4qSslFTD8VMOxNVhHCjTw==",
"requires": {
"yallist": "^4.0.0"
}
},
"minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
"integrity": "sha512-
bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/
hxLY8phGJ0YhYHZo7jil7Qdg==",
"requires": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
}
},
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-
vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/
oiWqbhszeGWW2T6Gzw=="
},
"mkdirp-classic": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
"integrity": "sha512-
gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8i
D1oUr/txX35NjcaY6Ns/A=="
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity":
"sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5Vim
xkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"moment-duration-format": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-
duration-format-2.3.2.tgz",
"integrity":
"sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8Oz
wPiG3brouXKY5Un4pBjAeB6UToXHaQ=="
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-
sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyW
tmLSM0b+adUTEvbs1PEaH2w=="
},
"nan": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
"integrity": "sha512-
8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/
Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
},
"napi-build-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-
1.0.2.tgz",
"integrity": "sha512-
ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9Yw
PTfxDdF1zLeL+RGZiR9kGMLdg=="
},
"node-abi": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.5.0.tgz",
"integrity":
"sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYn
Acl4qan3uFeRROErKGzatFHPf6kDxWw==",
"requires": {
"semver": "^7.3.5"
}
},
"node-fetch": {
"version": "2.6.6",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
"integrity":
"sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFG
Wn/ibwzXTE8qwr1Yzx28vsecXEA==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"nopt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
"integrity": "sha512-
Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa
/vuxP0IjEont6umdMgtQ==",
"requires": {
"abbrev": "1"
}
},
"npmlog": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz",
"integrity":
"sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqF
BP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q==",
"requires": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
"gauge": "^4.0.0",
"set-blocking": "^2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"on-change": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/on-change/-/on-change-2.2.3.tgz",
"integrity":
"sha512-yx48YQW3XsMHYWJ5n8oOgonrxsIJJNn1fqE3QlQpYS/I6XHvzTARHzaVbw
FyJoSaZ4g7UTZheaaxHVtFKcNXgg=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-
1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"prebuild-install": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-
7.0.0.tgz",
"integrity": "sha512-
IvSenf33K7JcgddNz2D5w521EgO+4aMMjFt73Uk9FRzQ7P+QZPKrp7qPsDydsSwjG
t3T5xRNnM1bj1zMTD5fTA==",
"requires": {
"detect-libc": "^1.0.3",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.3",
"mkdirp-classic": "^0.5.3",
"napi-build-utils": "^1.0.1",
"node-abi": "^3.3.0",
"npmlog": "^4.0.1",
"pump": "^3.0.0",
"rc": "^1.2.7",
"simple-get": "^4.0.0",
"tar-fs": "^2.0.0",
"tunnel-agent": "^0.6.0"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity":
"sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITd
biiIVcBo03Hi3jMxigBtsddlXRw=="
},
"are-we-there-yet": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-
1.1.7.tgz",
"integrity": "sha512-
nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCI
zYn9wlEv4zvFL7uKDMCFQm3g==",
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-
response-6.0.0.tgz",
"integrity":
"sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBD
nDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"requires": {
"mimic-response": "^3.1.0"
}
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
"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"
}
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-
point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
"number-is-nan": "^1.0.0"
}
},
"mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-
3.1.0.tgz",
"integrity": "sha512-
z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb0
64c6Wr4N/wv0DzQTjNzHNGQ=="
},
"npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity":
"sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr
/h9bL3E4aZccVwpwP+5W9Vjkg==",
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-
2.3.7.tgz",
"integrity":
"sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZu
ZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"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"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity":
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscS
mMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"simple-get": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz",
"integrity": "sha512-
ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzz
Vj8QmefmAonZIK2BSGcQ==",
"requires": {
"decompress-response": "^6.0.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-
1.1.1.tgz",
"integrity":
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBC
bi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
"ansi-regex": "^2.0.0"
}
}
}
},
"prism-media": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz",
"integrity": "sha512-
L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6
wG9ruBj+q5Ax+bH8Ik1g=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-
args-2.0.1.tgz",
"integrity":
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEY
yvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity":
"sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRm
PL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-
vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC
0JO6B1Zp41J0LpT0oR68amQ==",
"requires": {
"safe-buffer": "^5.1.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-
y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDf
gexCgccckhcZvywyQYPOw==",
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-
3.6.0.tgz",
"integrity":
"sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB1
43xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity":
"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/
i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-
rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN
+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity":
"sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE
5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"serialize-javascript": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-
5.0.1.tgz",
"integrity": "sha512-
SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKn
mQ1yasR4PCJc8x+M4JSPA==",
"requires": {
"randombytes": "^2.1.0"
}
},
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"signal-exit": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
"integrity": "sha512-
sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDw
g0NXJc3yv4/ox7b+JWb57kQ=="
},
"simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity":
"sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1q
U+xvz3u/sfYJLa947b7nAN2Q=="
},
"simple-get": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
"integrity":
"sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/
c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
"requires": {
"decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity":
"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuO
qrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
}
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-
1.3.0.tgz",
"integrity":
"sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1
Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"requires": {
"safe-buffer": "~5.2.0"
}
},
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-
Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGG
ZF+/0ooI7KrPuUSztUdU5A==",
"requires": {
"ansi-regex": "^5.0.1"
}
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-
comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"tar": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
"integrity":
"sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc
4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
}
},
"tar-fs": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
"integrity":
"sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDN
R011utopbkex2nM4dHNV6GDsng==",
"requires": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
"pump": "^3.0.0",
"tar-stream": "^2.1.4"
},
"dependencies": {
"chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity":
"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQj
ZumK7KXGFhUy89PrsJWlakBVg=="
}
}
},
"tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-
ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvl
eWrrXpmjpt7vZeF1LnMZQ==",
"requires": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-
6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2di
NEA8FEmu32YOn9rhaiE5yw=="
},
"twemoji-parser": {
"version": "13.1.0",
"resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-
13.1.0.tgz",
"integrity": "sha512-
AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26
AIZ/OHwFoUbdv6YYD/wGg=="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-
3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wide-align": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
"integrity":
"sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/
dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"requires": {
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "7.5.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
"integrity":
"sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVA
Ci8tfk5XrgLQEk+P0Tnz9UcA=="
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity":
"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dyc
QW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}

You might also like