From 5223be2bcd86f2d168a3109b00014d123326f180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lobo=20Metal=C3=BArgico?= Date: Sun, 5 Jul 2020 11:40:26 -0300 Subject: [PATCH] Aruna 4.2 --- _configs/index.js => .Configs/apiKeys.js | 10 +- {_configs => .Configs}/general.js | 10 +- .Configs/index.js | 25 + {_configs => .Configs}/links.js | 11 +- {_configs => .Configs}/mongoose.js | 49 +- .eslintignore | 2 + .eslintrc.json | 79 + .github/workflows/eslint.yml | 32 + .github/workflows/nodejs.yml | 31 - .gitignore | 4 +- .npmrc | 1 + Commands/ban.js | 99 -- Commands/bot.js | 109 -- Commands/eval.js | 75 - Commands/kick.js | 105 -- Commands/serverinfo.js | 95 - Commands/ship.js | 108 -- Commands/ticket.js | 250 --- Commands/userinfo.js | 185 -- _.env | 4 - events/message.js | 161 -- events/ready.js | 130 -- package-lock.json | 2062 ++++++++++++++++++---- package.json | 43 +- pm2.json | 9 + {Commands => src/Commands}/avatar.js | 14 +- src/Commands/badges.js | 161 ++ src/Commands/ban.js | 119 ++ src/Commands/bot.js | 77 + {Commands => src/Commands}/calc.js | 42 +- {Commands => src/Commands}/clear.js | 34 +- {Commands => src/Commands}/config.js | 71 +- {Commands => src/Commands}/dice.js | 41 +- src/Commands/eval.js | 76 + {Commands => src/Commands}/flip.js | 26 +- src/Commands/git.js | 38 + {Commands => src/Commands}/help.js | 41 +- {Commands => src/Commands}/invite.js | 13 +- src/Commands/kick.js | 118 ++ src/Commands/maintenance.js | 20 + {Commands => src/Commands}/ping.js | 23 +- {Commands => src/Commands}/prefix.js | 30 +- {Commands => src/Commands}/rank.js | 33 +- {Commands => src/Commands}/say.js | 6 +- src/Commands/serverinfo.js | 116 ++ src/Commands/ship.js | 104 ++ {Commands => src/Commands}/suporte.js | 8 +- src/Commands/ticket.js | 97 + src/Commands/unban.js | 84 + src/Commands/userinfo.js | 158 ++ {events => src/Events}/guildCreate.js | 4 +- {events => src/Events}/guildDelete.js | 6 +- {events => src/Events}/guildMemberAdd.js | 18 +- src/Events/message.js | 156 ++ src/Events/ready.js | 124 ++ {utils => src/Utils}/activeTicket.js | 93 +- {utils => src/Utils}/cooldown.js | 16 +- src/Utils/date.js | 15 + src/Utils/emojis.js | 42 + src/Utils/index.js | 27 + {utils => src/Utils}/rankSystem.js | 14 +- {utils => src/Utils}/utils.js | 13 +- main.js => src/main.js | 53 +- sharding.js => src/sharding.js | 18 +- utils/emojis.js | 38 - 65 files changed, 3789 insertions(+), 2087 deletions(-) rename _configs/index.js => .Configs/apiKeys.js (82%) rename {_configs => .Configs}/general.js (89%) create mode 100644 .Configs/index.js rename {_configs => .Configs}/links.js (75%) rename {_configs => .Configs}/mongoose.js (68%) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/workflows/eslint.yml delete mode 100644 .github/workflows/nodejs.yml create mode 100644 .npmrc delete mode 100644 Commands/ban.js delete mode 100644 Commands/bot.js delete mode 100644 Commands/eval.js delete mode 100644 Commands/kick.js delete mode 100644 Commands/serverinfo.js delete mode 100644 Commands/ship.js delete mode 100644 Commands/ticket.js delete mode 100644 Commands/userinfo.js delete mode 100644 _.env delete mode 100644 events/message.js delete mode 100644 events/ready.js create mode 100644 pm2.json rename {Commands => src/Commands}/avatar.js (81%) create mode 100644 src/Commands/badges.js create mode 100644 src/Commands/ban.js create mode 100644 src/Commands/bot.js rename {Commands => src/Commands}/calc.js (64%) rename {Commands => src/Commands}/clear.js (72%) rename {Commands => src/Commands}/config.js (67%) rename {Commands => src/Commands}/dice.js (81%) create mode 100644 src/Commands/eval.js rename {Commands => src/Commands}/flip.js (70%) create mode 100644 src/Commands/git.js rename {Commands => src/Commands}/help.js (64%) rename {Commands => src/Commands}/invite.js (75%) create mode 100644 src/Commands/kick.js create mode 100644 src/Commands/maintenance.js rename {Commands => src/Commands}/ping.js (71%) rename {Commands => src/Commands}/prefix.js (79%) rename {Commands => src/Commands}/rank.js (75%) rename {Commands => src/Commands}/say.js (91%) create mode 100644 src/Commands/serverinfo.js create mode 100644 src/Commands/ship.js rename {Commands => src/Commands}/suporte.js (90%) create mode 100644 src/Commands/ticket.js create mode 100644 src/Commands/unban.js create mode 100644 src/Commands/userinfo.js rename {events => src/Events}/guildCreate.js (91%) rename {events => src/Events}/guildDelete.js (84%) rename {events => src/Events}/guildMemberAdd.js (78%) create mode 100644 src/Events/message.js create mode 100644 src/Events/ready.js rename {utils => src/Utils}/activeTicket.js (67%) rename {utils => src/Utils}/cooldown.js (85%) create mode 100644 src/Utils/date.js create mode 100644 src/Utils/emojis.js create mode 100644 src/Utils/index.js rename {utils => src/Utils}/rankSystem.js (88%) rename {utils => src/Utils}/utils.js (71%) rename main.js => src/main.js (61%) rename sharding.js => src/sharding.js (67%) delete mode 100644 utils/emojis.js diff --git a/_configs/index.js b/.Configs/apiKeys.js similarity index 82% rename from _configs/index.js rename to .Configs/apiKeys.js index a2cbb4c..3feb89b 100644 --- a/_configs/index.js +++ b/.Configs/apiKeys.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,10 +17,7 @@ along with this program. If not, see . */ + +//Dbots API Keys module.exports = { - configs: require("./general.js"), - config: require("./general.js"), - links: require("./links"), - database: require("./mongoose.js"), - db: require("./mongoose.js") -}; \ No newline at end of file +} \ No newline at end of file diff --git a/_configs/general.js b/.Configs/general.js similarity index 89% rename from _configs/general.js rename to .Configs/general.js index 43f5386..cc4963b 100644 --- a/_configs/general.js +++ b/.Configs/general.js @@ -16,14 +16,12 @@ along with this program. If not, see . */ - module.exports = { - prefix: "-", - token: "", - mongoose: "", - commands: "./Commands", + prefix: '-', + token: '', + mongoose: '', sharding: { - totalShards: "auto", + totalShards: 'auto', delay: 7500 } }; \ No newline at end of file diff --git a/.Configs/index.js b/.Configs/index.js new file mode 100644 index 0000000..488d73d --- /dev/null +++ b/.Configs/index.js @@ -0,0 +1,25 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +module.exports = { + configs: require('./general.js'), + config: require('./general.js'), + links: require('./links.js'), + database: require('./mongoose.js'), + db: require('./mongoose.js') +}; \ No newline at end of file diff --git a/_configs/links.js b/.Configs/links.js similarity index 75% rename from _configs/links.js rename to .Configs/links.js index 23ca984..727d64c 100644 --- a/_configs/links.js +++ b/.Configs/links.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -17,9 +18,9 @@ */ module.exports = { - supportServers: ["https://discord.gg/NqbBgEf"], - invites: ["https://discordapp.com/oauth2/authorize?client_id=593303574725787657&scope=bot&permissions=2146954751"], - donate: ["https://patreon.com/LoboMetalurgico"], - website: "", - trelloBoard: "" + supportServers: [''], + invites: [''], + donate: [''], + website: '', + trelloBoard: '' }; \ No newline at end of file diff --git a/_configs/mongoose.js b/.Configs/mongoose.js similarity index 68% rename from _configs/mongoose.js rename to .Configs/mongoose.js index 615766b..be22a63 100644 --- a/_configs/mongoose.js +++ b/.Configs/mongoose.js @@ -6,7 +6,7 @@ it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -16,36 +16,36 @@ along with this program. If not, see . */ -var mongoose = require("mongoose"); -const config = require('./general.js') +var mongoose = require('mongoose'); +const config = require('./general.js'); var Schema = mongoose.Schema; -let url = config.mongoose; +const url = config.mongoose; mongoose.connect( url, { useNewUrlParser: true, useUnifiedTopology: true }, err => { - if (err) return console.log("(CLUSTER) => Erro\n", err); - console.log("(CLUSTER) => Conectado!"); + if (err) return console.log('(CLUSTER) => Erro\n', err); + console.log('(CLUSTER) => Conectado!'); } ); var User = new Schema({ _id: { type: String }, - cmdCooldown: { type: String, default: "0" }, SUPER: { type: Boolean, default: false } }); var Guild = new Schema({ _id: { type: String }, prefix: { type: String, default: config.prefix }, - ticketCategoryID: { type: String, default: null }, ticketLogID: { type: String, default: null }, ticketSupportID: { type: String, default: null }, rankEnable: { type: Boolean, default: false }, ticketEnable: { type: Boolean, default: false }, autoRole: { type: Boolean, default: false }, - autoRoleRole: { type: String, default: null } + autoRoleRole: { type: String, default: null }, + isPremium: { type: Boolean, default: false }, + isPartner: { type: Boolean, default: false } }); var Rank = new Schema({ @@ -56,10 +56,6 @@ var Rank = new Schema({ guild: { type: String } }); -var Comando = new Schema({ - _id: { type: String } -}); - var Ticket = new Schema({ _id: { type: String }, owner: { type: String }, @@ -78,18 +74,27 @@ var Command = new Schema({ _id: { type: String }, name: { type: String }, public: { type: Boolean, default: false } -}) +}); + +var System = new Schema({ + _id: { type: Number }, + maintenance: { type: Boolean, default: false}, + date: { type: String, default: null }, + time: { type: String, default: null } +}); -var Commands = mongoose.model("Commands", Command); -var Support = mongoose.model("Suport", Support); -var Tickets = mongoose.model("Tickets", Ticket); -var Guilds = mongoose.model("Guilds", Guild); -var Users = mongoose.model("Users", User); -var Rank = mongoose.model("Rank", Rank); +var Commands = mongoose.model('Commands', Command); +var Supports = mongoose.model('Suport', Support); +var Tickets = mongoose.model('Tickets', Ticket); +var Systems = mongoose.model('System', System); +var Guilds = mongoose.model('Guilds', Guild); +var Users = mongoose.model('Users', User); +var Ranks = mongoose.model('Rank', Rank); exports.Commands = Commands; -exports.Suport = Support; exports.Tickets = Tickets; +exports.Suport = Supports; +exports.System = Systems; exports.Guilds = Guilds; exports.Users = Users; -exports.Rank = Rank; +exports.Rank = Ranks; \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..0d81a1a --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +.Config +Config/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..e40f8be --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,79 @@ +{ + "env": { + "commonjs": true, + "es6": true, + "node": true + }, + "extends": "eslint:recommended", + "globals": {}, + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module" + }, + "rules": { + "array-bracket-spacing": [ + "warn", + "never" + ], + "computed-property-spacing": "warn", + "indent": [ + "warn", + 2 + ], + "keyword-spacing": [ + "warn", + { + "before": true, + "after": true + } + ], + "max-len": [ + "warn", + { + "code": 160, + "ignoreComments": true, + "ignoreUrls": true + } + ], + "no-cond-assign": [ + 2, + "except-parens" + ], + "no-use-before-define": [ + 2, + { + "functions": false, + "classes": false, + "variables": false + } + ], + "new-cap": 0, + "no-caller": 2, + "no-undef": 2, + "no-unused-vars": 1, + "no-empty": [ + "error", + { + "allowEmptyCatch": true + } + ], + "no-console": "off", + "no-multi-spaces": "warn", + "prefer-const": [ + "warn", + { + "destructuring": "all" + } + ], + "quotes": [ + "warn", + "single" + ], + "semi": [ + "warn", + "always" + ], + "spaced-comment": "warn", + "space-infix-ops": "warn" + } +} \ No newline at end of file diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 0000000..1264238 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,32 @@ +name: ESLint +on: + push: + paths: + - "src/**" + - ".eslintrc.*" + - ".github/workflows/eslint.yml" + +jobs: + update: + name: ESLint + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Install Node v12 + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: Install PNPM + run: curl -L https://unpkg.com/@pnpm/self-installer | node + - name: Install dependencies + run: pnpm install + - name: Run ESLint + run: npm run eslint:fix + - name: Commit changes + uses: EndBug/add-and-commit@v4 + with: + add: src + message: "chore(lint): Auto-fix linting errors" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml deleted file mode 100644 index e8461f8..0000000 --- a/.github/workflows/nodejs.yml +++ /dev/null @@ -1,31 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Node.js CI - -on: - push: - branches: [ Stable, Unstable ] - pull_request: - branches: [ Stable, Unstable ] - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [10.x, 12.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run build --if-present - - run: npm test - env: - CI: true diff --git a/.gitignore b/.gitignore index 1b99d47..eab33cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .env -configs/ +Configs/ node_modules/ -_main.js \ No newline at end of file +.vscode/ \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..9cf9495 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false \ No newline at end of file diff --git a/Commands/ban.js b/Commands/ban.js deleted file mode 100644 index 4f55e34..0000000 --- a/Commands/ban.js +++ /dev/null @@ -1,99 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); - -exports.run = async (aruna, message, args) => { - - let buser = message.guild.member( - message.mentions.users.first() || message.guild.members.get(args[0]) - ); - - const error1 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não possui a permissão de \`Banir Membros\`!`) - .setTimestamp(); - - const error2 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu não possuo a permissão de \`Banir Membros\`!`) - .setTimestamp(); - - const error3 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir um usuário para ser punido!`) - .setTimestamp(); - const error4 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não pode banir ${buser.user.username} pois este é o(a) dono(a) do servidor!`) - .setTimestamp(); - const error5 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não pode banir este usuário pois seu cargo é igual ou inferior ao de ${buser.user.username}.`) - .setTimestamp(); - const error6 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu não posso banir este usuário pois meu cargo é igual ou inferior ao de ${buser.user.username}`) - .setTimestamp(); - - if (!message.member.hasPermission("BAN_MEMBERS")) - return message.channel.send(error1) - if (!message.guild.members.get(aruna.user.id).hasPermission("BAN_MEMBERS")) - return message.channel.send(error2) - - if (!buser) return message.channel.send(error3); - - if(message.guild.owner.id == buser.user.id) - return message.channel.send(error4) - if(buser.highestRole.position >= message.guild.members.get(message.author.id).highestRole.position && message.guild.owner.id !== message.author.id) - return message.channel.send(error5); - if(buser.highestRole.position >= message.guild.members.get(aruna.user.id).highestRole.position) - return message.channel.send(error6); - - if (args.join(" ").slice(22)) { - var breason = `Punido por: ${message.author.username}`; - } else { - var breason = - `Punido por: ${message.author.username} Com o Motivo: ` + - args.join(" ").slice(22); - } - - let embed = new Discord.RichEmbed() - .setAuthor("Banimento Efetuado!") - .setDescription(`Kick efetuado por ${message.author.username}`) - .addField("Usuário Banido: ", `${buser} id ${buser.id}`, false) - .addField("Banido por: ", `<@${message.author.id}>`, false) - .addField("Data do Banimento: ", message.createdAt, false) - .addField("Motivo: ", `${breason}`, false) - .setTimestamp(); - - message.channel.send(embed); - message.guild.member(buser).ban(breason); -}; - -exports.config = { - name: "ban", - aliases: ["banir"], - category: `👮‍♂️ Moderação` -}; \ No newline at end of file diff --git a/Commands/bot.js b/Commands/bot.js deleted file mode 100644 index d822c27..0000000 --- a/Commands/bot.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); - -function format(seconds) { - function pad(s) { - return (s < 10 ? "0" : "") + s; - } - var hours = Math.floor(seconds / (60 * 60)); - var minutes = Math.floor((seconds % (60 * 60)) / 60); - var seconds = Math.floor(seconds % 60); - var days = Math.floor(hours / 24); - - if (pad(days) >= "1") { - return ( - pad(days) + - "d " + - pad(hours) + - "h " + - pad(minutes) + - "m " + - pad(seconds) + - "s" - ); - } else if (pad(hours) >= "1") { - return pad(hours) + "h " + pad(minutes) + "m " + pad(seconds) + "s"; - } else if (pad(minutes) >= "1") { - return pad(minutes) + "m " + pad(seconds) + "s"; - } else { - return pad(seconds) + "s"; - } -} - -const { config } = require("../configs"); - -const pak = require("../package.json"); - -const emoji = require("../utils/emojis.js"); - -exports.run = (aruna, message, args, prefix) => { - let user = message.guild.member(aruna.user); - - let name = user.nickname !== null ? user.nickname : aruna.user.username; - - /*let embed = new Discord.RichEmbed() - .setAuthor(aruna.user.username, `${aruna.user.avatarURL}`) - .addField(`(${emoji.robot}) Nome na Guild`, `**${name}**`, true) - .addField(`(📡) Versão`, `**${pak.version}**`, true) - .addField(`(🏓) Ping`, `**${Math.round(aruna.ping)}** ms`, true) - .addField(`(📃) Canais`, `**${aruna.channels.size}**`, true) - .addField(`(🖥️) Servidores`, `**${aruna.guilds.size}**`, true) - .addField(`(🕹️) Usuários`, `**${aruna.users.size}**`, true) - .addField( - `Convite`, - `**[Link](https://discordapp.com/api/oauth2/authorize?client_id=593303574725787657&permissions=37604422&scope=bot)**`, - true - ) - .addField(`Meu Site`, `**Em Breve™️**`, true) - .addField( - `Servidor de Suporte`, - `**[Link](https://discord.gg/NqbBgEf)**`, - true - ) - .setThumbnail(`${aruna.user.displayAvatarURL}`);*/ - let embed = new Discord.RichEmbed() - .setAuthor(aruna.user.username, `${aruna.user.avatarURL}`) - .addField(`(${emoji.robot}) Nome na Guild`, `**${name}**`, true) - .addField(`(📡) Versão`, `**${pak.version}**`, true) - .addField(`(🕰️) Uptime`, `**${format(process.uptime())}**`, true) - .addField(`(📃) Canais`, `**${aruna.channels.size}**`, true) - .addField(`(🖥️) Servidores`, `**${aruna.guilds.size}**`, true) - .addField(`(🕹️) Usuários`, `**${aruna.users.size}**`, true) - .addField( - `Convite`, - `**[Link](https://discordapp.com/api/oauth2/authorize?client_id=593303574725787657&permissions=37604422&scope=bot)**`, - true - ) - .addField(`Meu Site`, `**Em Breve™️**`, true) - .addField( - `Servidor de Suporte`, - `**[Link](https://discord.gg/NqbBgEf)**`, - true - ) - .setThumbnail(`${aruna.user.displayAvatarURL}`); - message.channel.send(embed); -}; - -exports.config = { - name: "bot", - aliases: ["botinfo", "info"], - description: "Lista as Principais informações do bot", - category: `${emoji.robot} Utilidades` -}; diff --git a/Commands/eval.js b/Commands/eval.js deleted file mode 100644 index f62e72c..0000000 --- a/Commands/eval.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -const { database, config } = require("../configs"); -const emoji = require("../utils/emojis.js"); - -exports.run = (aruna, message, args) => { - database.Users.findOne({ _id: message.author.id }, function(erro, user) { - - const errored = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setDescription(`Você não tem permissão para executar esse comando!`) - .setFooter(`Algo deu errado, ${message.author.username}`); - - if(user.SUPER !== true) return message.channel.send(errored) - const util = require("util"); - let code = args.join(" "); - let embed = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setDescription(`Você precisa digitar um código!`) - .setFooter(`Algo deu errado, ${message.author.username}`); - if (!code) return message.channel.send(embed); - - try { - let ev = eval(code); - let str = util.inspect(ev, { depth: 1 }); - - str = `${str.replace( - new RegExp(`${aruna.token}|${process.env.TOKEN}|${config.token}`, "g"), - "Erro! Você não pode exibir esta informação!" - )}`; - - if (str.length > 1800) { - str = str.substr(0, 1800); - str = str + "..."; - } - let embed = new Discord.RichEmbed() - .setAuthor("Console") - .addField( - `(<:uploaduisvgrepocom:637027335173832727>) Entrada`, - `\`\`\`js\n${code}\`\`\`` - ) - .addField( - `(<:developmentsvgrepocom:637027334553337896>) Saida`, - `\`\`\`js\n${str}\`\`\`` - ) - .setColor([54, 57, 63]); - message.channel.send(embed); - } catch (err) { - message.channel.send(err.stack, { code: "js" }); - } -}).catch(e => {}) -}; - -exports.config = { - name: "eval", - aliases: [], - category: `🧰 Administração` -}; diff --git a/Commands/kick.js b/Commands/kick.js deleted file mode 100644 index c18c8b5..0000000 --- a/Commands/kick.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); - -exports.run = async (aruna, message, args) => { - - let kuser = message.guild.member( - message.mentions.users.first() || message.guild.members.get(args[0]) - ); - - const error1 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não possui a permissão de \`Kickar Membros\`!`) - .setTimestamp(); - - const error2 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu não possuo a permissão de \`Kickar Membros\`!`) - .setTimestamp(); - - const error3 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir um usuário para ser punido!`) - .setTimestamp(); - const error4 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não pode kickar ${kuser.user.username} pois este é o(a) dono(a) do servidor!`) - .setTimestamp(); - const error5 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não pode kickar este usuário pois seu cargo é igual ou inferior ao de ${kuser.user.username}.`) - .setTimestamp(); - const error6 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu não posso kickar este usuário pois meu cargo é igual ou inferior ao de ${kuser.user.username}`) - .setTimestamp(); - - if (!message.member.hasPermission("KICK_MEMBERS")) - return message.channel.send(error1) - if (!message.guild.members.get(aruna.user.id).hasPermission("KICK_MEMBERS")) - return message.channel.send(error2) - - if (!kuser) return message.channel.send(error3); - - if(message.guild.owner.id == kuser.user.id) - return message.channel.send(error4) - if (kuser.highestRole.position >= message.guild.members.get(message.author.id).highestRole.position && message.guild.owner.id !== message.author.id) - return message.channel.send(error6); - if (kuser.highestRole.position >= message.guild.members.get(aruna.user.id).highestRole.position) - return message.channel.send(error5); - - if (args.join(" ").slice(22) == undefined) { - var kreason = `Punido por: ${message.author.username}`; - } else if (args.join(" ").slice(22) == false) { - var kreason = `Punido por: ${message.author.username}`; - } else if (args.join(" ").slice(22) == null) { - var kreason = `Punido por: ${message.author.username}`; - } else if (args.join(" ").slice(22) == "") { - var kreason = `Punido por: ${message.author.username}`; - } else { - var kreason = - `Punido por: ${message.author.username} Com o Motivo: ` + - args.join(" ").slice(22); - } - - let embed = new Discord.RichEmbed() - .setAuthor("Kick Efetuado!") - .setDescription(`Kick efetuado por ${message.author.username}`) - .addField("Usuário kickado: ", `${kuser} id ${kuser.id}`, false) - .addField("Kickado por: ", `<@${message.author.id}>`, false) - .addField("Data do kick: ", message.createdAt, false) - .addField("Motivo: ", `${kreason}`, false) - .setTimestamp(); - - message.channel.send(embed); - message.guild.member(kuser).kick(kreason); -}; - -exports.config = { - name: "kick", - aliases: ["kickar"], - category: `👮‍♂️ Moderação` -}; \ No newline at end of file diff --git a/Commands/serverinfo.js b/Commands/serverinfo.js deleted file mode 100644 index 4bae4dd..0000000 --- a/Commands/serverinfo.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -const emoji = require("../utils/emojis.js"); - -const status = { - online: `${emoji.online} Online`, - idle: `${emoji.idle} Ausente`, - dnd: `${emoji.dnd} Não Pertube`, - offline: `${emoji.offline} Offline` -}; - -exports.run = (aruna, message, args) => { - var region = message.guild.region; - - if (region === "brazil") region = `:flag_br: Brasil`; - if (region === "europe") region = ` :flag_eu: Europa`; - if (region === "hongkong") region = `:flag_hk: Hong Kong`; - if (region === "india") region = `:flag_in: India`; - if (region === "japan") region = `:flag_jp: Japão`; - if (region === "russia") region = `:flag_ru: Rússia`; - if (region === "singapore") region = `:flag_br: Singapura`; - if ( - region === "us-central" || - region === "us-east" || - region === "us-south" || - region === "us-west" - ) - region = `:flag_us: Estados Unidos`; - - let embed = new Discord.RichEmbed() - .setColor([0, 23, 132]) - .setAuthor(`${message.guild.name}`) - .setThumbnail( - `https://cdn.discordapp.com/icons/${message.guild.id}/${message.guild.icon}.png` - ) - .addField(":computer: ID da Guild", message.guild.id, true) - .addField(":crown: Dono", `${message.guild.owner}`, true) - .addField(":earth_americas: Região", `${region}`, true) - .addField( - `:speech_balloon: Canais (${message.guild.channels.filter( - chn => chn.type === "text" - ).size + - message.guild.channels.filter(chn => chn.type === "voice").size})`, - `:pencil: **Texto: ${ - message.guild.channels.filter(chn => chn.type === "text").size - }** \n :speaking_head: **Voz: ${ - message.guild.channels.filter(chn => chn.type === "voice").size - }**`, - false - ) - .addField( - `:busts_in_silhouette: Membros (${message.guild.members.size})`, - `${status["online"]}: ${ - message.guild.members.filter(m => m.presence.status === "online").size - }|${status["idle"]}: ${ - message.guild.members.filter(m => m.presence.status === "away").size - }|${status["dnd"]}: ${ - message.guild.members.filter(m => m.presence.status === "dnd").size - }|${status["offline"]}: ${ - message.guild.members.filter(m => m.presence.status === "offline").size - }\n - :raising_hand: Pessoas: ${ - message.guild.members.filter(m => !m.user.bot).size - }\n - :robot: Bots: ${message.guild.members.filter(m => m.user.bot).size}`, - false - ) - .setFooter("Bot Criado pelo Lobo Metalúrgico", aruna.user.avatarURL) - .setTimestamp(); - - message.reply(embed); -}; - -exports.config = { - name: "serverinfo", - aliases: ["si"], - category: `${emoji.robot} Utilidades` -}; diff --git a/Commands/ship.js b/Commands/ship.js deleted file mode 100644 index 7826ee1..0000000 --- a/Commands/ship.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -const Jimp = require("jimp"); - -exports.run = async (client, message, args) => { - const error1 = new Discord.RichEmbed() - .setAuthor(`Oops!`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve mencionar um segundo usuário!`) - .setTimestamp(); - - var porcentagem = 0; - var aleatorio = Math.round(Math.random() * 100); - - porcentagem = aleatorio; - - let user1 = message.mentions.users.first() || message.author; - let user2 = message.mentions.users.array()[1]; - - if (!user2) return message.channel.send(error1); - - let richard_lindu = await Jimp.read(user1.avatarURL); - let richard_dmais = await Jimp.read(user2.avatarURL); - - await richard_lindu.resize(115, 115); - await richard_dmais.resize(115, 115); - - let eu_amo_o_richard = await Jimp.read( - "https://cdn.discordapp.com/attachments/486016051851689994/509883077707694100/ships.png" - ); - - await eu_amo_o_richard.composite(richard_lindu, 1, 1); - await eu_amo_o_richard - .composite(richard_dmais, 229, 1) - .write(`./tmp/img/${user1.id}${user2.id}.png`); - - let aido = new Array(); - aido[1] = "Msg 1"; - aido[2] = "Msg 2"; - - var i = Math.floor(2 * Math.random()); - - var mensagem = - porcentagem <= 10 - ? `${porcentagem}% [----------] Nada é impossível, apenas improvável.` - : porcentagem <= 20 - ? `${porcentagem}% [█---------] Um dia talvez. ` - : porcentagem <= 30 - ? `${porcentagem}% [██--------] Bem, olhando por esse ângulo... ` - : porcentagem <= 40 - ? `${porcentagem}% [███-------] Possível, é. Díficil? De fato.` - : porcentagem <= 50 - ? `${porcentagem}% [████------] Numa galáxia não tão distante...` - : porcentagem <= 60 - ? `${porcentagem}% [█████-----] Até que formariam um belo casal. ` - : porcentagem <= 70 - ? `${porcentagem}% [██████----] Esse casal está perto de ser muito bom! ` - : porcentagem <= 80 - ? `${porcentagem}% [███████---] Casal de primeira! ` - : porcentagem <= 90 - ? `${porcentagem}% [████████--] Já poderiam estar casados! 💍 ` - : porcentagem <= 100 - ? `${porcentagem}% [█████████-] Casal perfeito, só um terremoto os separa! 💍` - : `${porcentagem}% [██████████] Casal perfeito, ninguém os separa! 💍`; - - console.log(porcentagem) - console.log(mensagem) - message.channel.send({ - embed: { - description: `${user1} + ${user2}\n\n**${mensagem}**`, - color: 111119, - image: { - url: "attachment://file.jpg" - } - }, - files: [ - { - attachment: "./tmp/img/" + user1.id + user2.id + ".png", - name: "file.jpg" - } - ] - }); - - //message.channel.send(embed); -}; - -exports.config = { - name: "ship", - aliases: ["shipar", "shipp", "casal"], - category: `🎉 Entretenimento` -}; diff --git a/Commands/ticket.js b/Commands/ticket.js deleted file mode 100644 index c1915b9..0000000 --- a/Commands/ticket.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const { database } = require("../configs"); -const emoji = require("../utils/emojis.js"); -const Discord = require("discord.js"); - -exports.run = async (aruna, message, args) => { - const user = await database.Users.findOne({ _id: message.author.id }); - const guild = await database.Guilds.findOne({ _id: message.guild.id }); - const ticket = await database.Tickets.findOne({ - _id: `${message.author.id}-${message.guild.id}` - }); - - const prefix = guild.prefix; - - const noperm = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Este comando não está disponível no momento!`) - .setTimestamp(); - - const error = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Insira \`criar\` para criar um ticket ou \`fechar\` para fechar o ticket.` - ) - .setTimestamp(); - - const error2 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Este comando não está ativado em seu servidor. Peça para algum ADM ativar com o comando \`${prefix}config\`` - ) - .setTimestamp(); - const error4 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Você não possui tickets abertos. Para abrir, use o comando \`\`${guild.prefix}ticket criar\`\`` - ) - .setTimestamp(); - - if (user.SUPER !== true) return message.channel.send(noperm); - - if (guild.ticketEnable !== true) return message.channel.send(error2); - - if (!args[0]) return message.channel.send(error); - - const mode = args[0].toLowerCase(); - - if (mode == "criar" || mode == "create" || mode == "new") { - if (ticket) { - const error3 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Você já possui um ticket aberto! Para visualiza-lo, acesse o canal <#${ticket.channel}>.` - ) - .setTimestamp(); - return message.channel.send(error3); - } - - const m = await message.channel.send( - "Criando Ticket. Por favor, aguarde um momento..." - ); - - if (guild.ticketSupportID == null) { - try { - var supportRole = await message.guild - .createRole({ - name: "Suporte", - permissions: [] - }) - .then(roleId => { - supportRole = roleId.id; - guild.ticketSupportID = roleId.id; - }); - } catch (e) { - return console.log(e.stack); - } - message.channel.send( - "Foi criado o cargo <@&" + - supportRole + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." - ); - } else { - var supportRole = guild.ticketSupportID; - if (!message.guild.roles.get(supportRole)) { - try { - var supportRole = await message.guild - .createRole({ - name: "Suporte", - permissions: [] - }) - .then(roleId => { - supportRole = roleId.id; - guild.ticketSupportID = roleId.id; - }); - } catch (e) { - return console.log(e.stack); - } - message.channel.send( - "Foi criado o cargo <@&" + - supportRole + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." - ); - } - } - - if (guild.ticketCategoryID == null) { - try { - var ticketCategory = await message.guild - .createChannel(`Tickets`, "category", [ - { - id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] - } - ]) - .then(catId => { - console.log(catId); - console.log("--------"); - console.log(ticketCategory); - ticketCategory = catId; - guild.ticketCategoryID = catId.id; - }); - } catch (e) { - console.log(e.stack); - } - console.log(ticketCategory); - message.channel.send( - "Foi criado a categoria " + - ticketCategory.name + - " como categoria que conterá os tickets. Seu nome pode ser alterado livremente." - ); - } else { - var ticketCategory = guild.ticketCategoryID; - if (!aruna.channels.get(ticketCategory)) { - try { - var ticketCategory = await message.guild - .createChannel(`Tickets`, "category", [ - { - id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] - } - ]) - .then(catId => { - console.log(catId); - console.log("--------"); - console.log(ticketCategory); - ticketCategory = catId; - guild.ticketCategoryID = catId.id; - }); - } catch (e) { - console.log(e.stack); - } - console.log(ticketCategory); - message.channel.send( - "Foi criado a categoria " + - ticketCategory.name + - " como categoria que conterá os tickets. Seu nome pode ser alterado livremente." - ); - } - } - if (guild.ticketLogID == null) { - try { - var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ - { - id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] - }, - { - id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] - } - ]) - .then(ticketId => { - ticketLog = ticketId.id; - guild.ticketLogID = ticketId.id; - ticketId.setParent(ticketCategory); - }); - message.channel.send( - "Foi criado o canal " + - ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." - ); - } catch (e) { - console.log(e.stack); - } - } else { - var ticketLog = guild.ticketLogID; - if (!aruna.channels.get(ticketLog)) { - try { - var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ - { - id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] - }, - { - id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] - } - ]) - .then(ticketId => { - ticketLog = ticketId.id; - guild.ticketLogID = ticketId.id; - ticketId.setParent(ticketCategory); - }); - message.channel.send( - "Foi criado o canal " + - ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." - ); - } catch (e) { - console.log(e.stack); - } - } - } - guild.save(); - } else if (mode == "fechar" || mode == "close") { - if (!ticket) return message.channel.send(error4); - } else return message.channel.send(error); -}; - -exports.config = { - name: "ticket", - aliases: [], - category: `${emoji.robot} Utilidades` -}; diff --git a/Commands/userinfo.js b/Commands/userinfo.js deleted file mode 100644 index 8e5ed4e..0000000 --- a/Commands/userinfo.js +++ /dev/null @@ -1,185 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -const emoji = require("../utils/emojis.js"); - -exports.run = (aruna, message, args) => { - - const mentionedUser = message.guild.member( - message.mentions.users.first() || - aruna.users.get(args[0]) || - message.author - ); - - let userNickName = - mentionedUser.nickname !== null - ? `${mentionedUser.nickname}` - : "Sem apelido"; - let userDaysDiscord = Math.round( - Math.abs( - (mentionedUser.user.createdAt.getTime() - new Date().getTime()) / - (24 * 60 * 60 * 1000) - ) - ); - let userStatus; - if (mentionedUser.presence.status === "dnd") userStatus = `Não pertubar`; - if (mentionedUser.presence.status === "idle") userStatus = `Ausente`; - if (mentionedUser.presence.status === "stream") userStatus = `Transmitindo`; - if (mentionedUser.presence.status === "offline") userStatus = `Offline`; - if (mentionedUser.presence.status === "online") userStatus = `Disponível`; - - let userStatusEmoji; - if (mentionedUser.presence.status === "dnd") userStatusEmoji = emoji.dnd; - if (mentionedUser.presence.status === "idle") userStatusEmoji = emoji.idle; - if (mentionedUser.presence.status === "stream") - userStatusEmoji = emoji.stream; - if (mentionedUser.presence.status === "offline") - userStatusEmoji = emoji.offline; - if (mentionedUser.presence.status === "online") - userStatusEmoji = emoji.online; - - let userAdminServer; - if (mentionedUser.hasPermission("ADMINISTRATOR") === true) - userAdminServer = "Sim"; - if (mentionedUser.hasPermission("ADMINISTRATOR") === false) - userAdminServer = "Não"; - - let userAvatar = mentionedUser.user.displayAvatarURL; - if (userAvatar.endsWith(".gif")) { - userAvatar = `${mentionedUser.user.displayAvatarURL}?size=2048`; - } - let userRoles = `${mentionedUser.roles.map(roles => roles).join(" | ") || - `${emoji.error} Sem Cargo`}`; - /*let trad = { - CREATE_INSTANT_INVITE: "`Criar convite instantâneo`", - KICK_MEMBERS: "`Expulsar usuários`", - BAN_MEMBERS: "`Banir usuários`", - ADMINISTRATOR: "`Administrador`", - MANAGE_CHANNELS: "`Gerenciar canais`", - MANAGE_GUILD: "`Gerenciar servidor`", - ADD_REACTIONS: "`Adicionar reação`", - VIEW_AUDIT_LOG: "`Ver registro de auditoria`", - VIEW_CHANNEL: "`Ver canais`", - READ_MESSAGES: "`Ver mensagens`", - SEND_MESSAGES: "`Enviar mensagens`", - SEND_TTS_MESSAGES: "`Enviar mensagens com aúdio`", - MANAGE_MESSAGES: "`Gerenciar mensagens`", - EMBED_LINKS: "`Links em embed`", - ATTACH_FILES: "`Arquivos arquivados`", - READ_MESSAGE_HISTORY: "`Ver histórico de mensagens`", - MENTION_EVERYONE: "`Mencionar todos`", - EXTERNAL_EMOJIS: "`Emojis externos`", - USE_EXTERNAL_EMOJIS: "`Usar emojis externos`", - CONNECT: "`Conectar`", - SPEAK: "`Falar`", - MUTE_MEMBERS: "`Silenciar usuários`", - DEAFEN_MEMBERS: "`Perdoar usuários`", - MOVE_MEMBERS: "`Mover usuários`", - USE_VAD: "`Usar detecção de voz`", - PRIORITY_SPEAKER: "`Prioridade para falar`", - CHANGE_NICKNAME: "`Trocar apelido`", - MANAGE_NICKNAMES: "`Gerenciar apelidos`", - MANAGE_ROLES: "`Gerenciar cargos`", - MANAGE_ROLES_OR_PERMISSIONS: "`Gerenciar cargos e permissões`", - MANAGE_WEBHOOKS: "`Gerenciar webhooks`", - MANAGE_EMOJIS: "`Gerenciar emojis`" - }; - let userPerms = mentionedUser.permissions - .toArray() - .map(perms => `${trad[perms]}`) - .join(", "); -*/ - var stringtime = "" - - if(userDaysDiscord == 1) stringtime = "dia" - else stringtime = "dias" - - let embed = new Discord.RichEmbed() - .setAuthor(`${mentionedUser.user.username}`, `${userAvatar}`) - .addField( - `(${emoji.boss}) Nome`, - `${mentionedUser.user.username}`, - true - ) - .addField(`(${userStatusEmoji}) Status`, `${userStatus}`, true) - .addField( - `(${emoji.customer}) Administrador`, - `${userAdminServer}`, - true - ) - .addField( - `(${emoji.menu}) Discord Tag`, - `${mentionedUser.user.tag}`, - true - ) - .addField(`(${emoji.discord}) Apelido`, `${userNickName}`, true) - .addField( - `(${emoji.pass}) Dias no discord`, - `${userDaysDiscord} ${stringtime}`, - true - ) - .addField(`(${emoji.picture}) Cargos`, `${userRoles}`, true) - .setFooter("Criada pelo Lobo Metalurgico") - .setThumbnail(userAvatar) - .setColor("#56eaf5") - .setTimestamp(); - - /*let embed2 = new Discord.RichEmbed() - .setAuthor(`${mentionedUser.user.username}`, `${userAvatar}`) - .addField(`(${emoji.passport}) Permissões`, `${userPerms}`) - .setFooter("Criada pelo Lobo Metalurgico") - .setThumbnail(userAvatar) - .setColor("#56eaf5") - .setTimestamp();*/ - - message.channel.send(embed) - - /*.then(msg => { - msg.react("638067652337729597"); - const collector = msg.createReactionCollector( - (r, u) => - r.emoji.name === "passport" && - (u.id !== aruna.user.id && u.id === message.author.id) - ); - collector.on("collect", r => { - switch (r.emoji.name) { - case "passport": - msg.edit(embed2).then(msg2 => { - msg2.react("⬅"); - const collector2 = msg.createReactionCollector( - (r, u) => - r.emoji.name === "⬅" && - (u.id !== aruna.user.id && u.id === message.author.id) - ); - collector2.on("collect", r => { - switch (r.emoji.name) { - case "⬅": - msg.edit(embed); - } - }); - }); - } - }); - });*/ -}; -exports.config = { - name: "userinfo", - aliases: ["ui"], - category: `${emoji.robot} Utilidades` -}; diff --git a/_.env b/_.env deleted file mode 100644 index 521d96f..0000000 --- a/_.env +++ /dev/null @@ -1,4 +0,0 @@ -MAINTENANCE=false -OFICIAL_MODE=false -DBL=false -TOKEN_DBL="" diff --git a/events/message.js b/events/message.js deleted file mode 100644 index 64e734d..0000000 --- a/events/message.js +++ /dev/null @@ -1,161 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -var { database, config } = require("../configs"); -const cooldown = require("../utils/cooldown.js"); -const utils = require("../utils/utils.js"); - -exports.run = async (aruna, message, args) => { - if (message.author.bot) return; - - if (message.channel.type == "dm") { - return message.reply( - "Desculpe, mas ainda não funciono em mensagens diretas :(" - ); - } - - database.Guilds.findOne({ _id: message.guild.id }, function( - servro, - servidor - ) { - database.Users.findOne({ _id: message.author.id }, async function( - erro, - usuario - ) { - if (!servidor) { - console.log("No Server!"); - var saveG = await new database.Guilds({ - _id: message.guild.id - }); - saveG.save(); - servidor = await database.Guilds.findOne({ _id: message.guild.id }); - } - - if (!usuario) { - console.log("No User!"); - var saveU = await new database.Users({ _id: message.author.id }); - saveU.save(); - usuario = await database.Users.findOne({ _id: message.author.id }); - } - - let mention = [`<@${aruna.user.id}>`, `<@!${aruna.user.id}>`]; - - mention.find(mention => { - if (message.content === mention) { - let embed = new Discord.RichEmbed() - - .setAuthor( - `${aruna.user.username}`, - `${aruna.user.displayAvatarURL}` - ) - .setDescription( - `Olá ${message.author.username}, como está? Você, deve estar se perguntando qual minha função.\nBom, minha função é ajudar seu servidor de várias formas mas principalmente na moderação e no entretenimento.\n\nSe você possuir uma sugestão ou tiver encontrado algum parafuso meu perdido por aí, entre em meu servidor de suporte para falar com meu criador.` - ) - .addField( - `⚒ Quais são meus comando?`, - `Para saber meus comandos, basta usar **${servidor.prefix}help** e eu irei mandar meus comandos à você :)` - ) - .addField( - `👤 Qual meu servidor de suporte`, - `Para entrar em meu servidor de suporte clique [aqui](https://discord.gg/8mtqyaA)!` - ) - .setColor("#6e096a") - .setTimestamp(); - - message.channel.send(embed); - } - }); - - var prefix = servidor.prefix || config.prefix; - - if (servidor.rankEnable === true) { - const rank = await database.Rank.findOne({ - _id: `${message.author.id}-${message.guild.id}` - }); - - if (!rank) { - var saveR = new database.Rank({ - _id: `${message.author.id}-${message.guild.id}`, - user: message.author.id, - xp: 0, - level: 0, - guild: message.guild.id - }); - - saveR.save(); - } - const db = database; - - let xpsystem = require(`../utils/rankSystem.js`); - xpsystem.run(aruna, message, db, cooldown, utils, Discord); - } - - if (message.content.startsWith(prefix)) { - if (message.content === prefix) return; - - let args = message.content - .slice(prefix.length) - .trim() - .split(/ +/g); - let comando = args.shift().toLowerCase(); - let ma = message.content.split(" "); - let cmd = ma[0]; - let commandFile = - aruna.commands.get(cmd.slice(prefix.length)) || - aruna.commands.get(aruna.aliases.get(cmd.slice(prefix.length))); - - if (commandFile) { - if ( - !message.guild.members - .get(aruna.user.id) - .hasPermission("USE_EXTERNAL_EMOJIS") - ) - return message.reply( - "Para meu funcionamento, preciso da permissão de `Usar Emojis Externos`" - ); - commandFile.run(aruna, message, args, prefix, comando); - } else if (!commandFile) { - let alts = - aruna.commands - .filter(c => - c.config.name.startsWith(cmd.slice(prefix.length).toLowerCase()) - ) - .map(a => "`" + a.config.name + "`") - .join(", ") || undefined; - - if (alts !== undefined) { - message.reply( - "Oops, não encontrei o comando " + - "`" + - comando + - "`" + - ". Você quis dizer algo como " + - alts + - "?" - ); - } else { - message.reply( - "Oops, não encontrei o comando " + "`" + comando + "` :(" - ); - } - } - } - }).catch(e => {}); - }).catch(e => {}); -}; diff --git a/events/ready.js b/events/ready.js deleted file mode 100644 index ebc1662..0000000 --- a/events/ready.js +++ /dev/null @@ -1,130 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -const Discord = require("discord.js"); -const pkg = require("../package.json"); -const version = pkg.version; - -const chalk = require("chalk"); - -exports.run = async (aruna, message) => { - try { - log("Conectado!") - if(process.env.DBL == true){ - const DBL = require("dblapi.js"); - const dbl = new DBL(process.env.TOKEN_DBL, aruna); - - dbl.on("posted", () => { - log("[DBL] => Server count posted!"); - }); - - dbl.on("error", e => { - error(`[DBL] => Oops! ${e}`); - }); - - setInterval(() => { - dbl.postStats(aruna.guilds.size); - }, 900000); - } - - function format(seconds) { - function pad(s) { - return (s < 10 ? "0" : "") + s; - } - var hours = Math.floor(seconds / (60 * 60)); - var minutes = Math.floor((seconds % (60 * 60)) / 60); - var seconds = Math.floor(seconds % 60); - var days = Math.floor(hours / 24); - - return ( - pad(days) + - "d " + - pad(hours) + - "h " + - pad(minutes) + - "m " + - pad(seconds) + - "s" - ); - } - - aruna.channels.get(`660612307394756627`).setName(`📡Versão: ${version}`); - aruna.channels.get(`647590857813393428`).setName(`📡Versão: ${version}`); - - let status = [ - { name: `Muppet Show`, type: `watching` }, - - { name: `Faz ${format(process.uptime())}`, type: `playing` }, - - { - name: `Netflix`, - type: `watching` - }, - - { - name: `Versão 4.1`, - type: `streaming`, - url: `https://www.twitch.tv/lobometalurgico` - } - ]; - function setStatus() { - let randomStatus = status[Math.floor(Math.random() * status.length)]; - aruna.user.setPresence({ game: randomStatus }); - } - setStatus(); - setInterval(() => { - var users = aruna.users.size; - var servers = aruna.guilds.size; - setStatus(); - - aruna.channels.get(`688180527491973220`).setName(`👥Usuários: ${users}`); - aruna.channels - .get(`688180491995578397`) - .setName(`💻Servidores: ${servers}`); - - aruna.channels.get(`647590390404349952`).setName(`👥Usuários: ${users}`); - aruna.channels - .get(`647590426378895393`) - .setName(`💻Servidores: ${servers}`); - }, 15000); - } catch (error) {} - -function logPrefix() { - return `${chalk.gray("[")}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : "ARUNA"}${chalk.gray("]")}`; -} - -function log(...a) { - return console.log(logPrefix(), ...a); -} - -function warn(...a) { - return console.warn(logPrefix(), chalk.yellow(...a)); -} - -function error(...a) { - return console.error(logPrefix(), chalk.red(...a)); -} - -function debug(...a) { - return console.debug(logPrefix(), chalk.magenta(...a)); -} - -function isSharded() { - return !!aruna.shard; -} -}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2d74123..9d9301a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,38 +1,140 @@ { "name": "arunabot", - "version": "4.1.0", + "version": "4.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", + "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", "requires": { "regenerator-runtime": "^0.13.4" } }, + "@discordjs/node-pre-gyp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.1.0.tgz", + "integrity": "sha512-6u3EbK2x+j9bM3iK9/pE7BWLxOXZ1PvcsbDo3ZBdPocu95qPHj8zCVsBBk3Cao7V6o8QpwxUyJl6oVJ6T3ZgAg==", + "requires": { + "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": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.3.2.tgz", + "integrity": "sha512-T/ubykd4Xi19vDfw7/Oe+iTQBJ28yMI2PQAzK+Zue0PB9OpEYaeIXU7k5255061RwL+rHX9w7P/P2of+x2Vu2A==", + "requires": { + "@discordjs/node-pre-gyp": "^0.1.0", + "node-addon-api": "^2.0.0" + } + }, "@jimp/bmp": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.10.2.tgz", - "integrity": "sha512-vsLwkfj6rcxtSxEdpQaxDagrgpOB0ErHTS/vVRQKDIhrzZkW1ddQa9W1hV8qssSY3K7lz1QNYFQdeRw/qoCiBA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.13.0.tgz", + "integrity": "sha512-7i/XZLoK5JETBKO0VL7qjnr6WDVl1X8mmaUk6Lzq06/veMPC5IwUIZi1JRVAXPEwTf5uUegq0WFnmUS0lVYzFw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "bmp-js": "^0.1.0", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0", + "bmp-js": "^0.1.0" } }, "@jimp/core": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.10.2.tgz", - "integrity": "sha512-oyJLzWYcT6u0joD2YJAAVqCc1Ng9wXGPdAijWy3xxQT/roALmWLGL5ev6fQ/gugPVAD+xKUQpM0OxJepRYUl0Q==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.13.0.tgz", + "integrity": "sha512-BMFEUm5HbRP4yCo4Q23CJFx/v6Yr3trw7rERmS1GKUEooDq9ktApZWWTvWq/vggKyysKX0nQ+KT+FaFD/75Q+Q==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", + "@jimp/utils": "^0.13.0", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", @@ -43,323 +145,295 @@ } }, "@jimp/custom": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.10.2.tgz", - "integrity": "sha512-+ErCKYrIC0m6nDxRwIq0ETdltL4+C8RKrv3bGW/bI94QSfIXCdP6Vsz03VMae1J9+IPjfhn1LJ5rQ3zWkZEfdA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.13.0.tgz", + "integrity": "sha512-Zir/CHoLRhQDGfPWueCIQbVjVUlayNIUch9fulq4M9V2S+ynHx9BqRn58z8wy+mk8jm1WlpRVhvZ8QUenbL0vg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/core": "^0.13.0" } }, "@jimp/gif": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.10.2.tgz", - "integrity": "sha512-Evkwr7Vlt5zMqNccsUDetHpKtvhFz07yg8BRZl3kXzkeKeaK/PbuAV7yjXn1DxVVU+1uSS765MdbsMVe7J404A==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.13.0.tgz", + "integrity": "sha512-7FO2Fa9FZluqGt1MM/L8s6P5UEedxrIQT2eBAxzB8Z82YTTSWQXw4bdrZWCwiQjBFZwKTIaULIfw6+TxA/Q2XA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/utils": "^0.13.0", + "gifwrap": "^0.9.2", "omggif": "^1.0.9" } }, "@jimp/jpeg": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.10.2.tgz", - "integrity": "sha512-+aQUGBZI6OueB0K6gqLCwehV5skZceVyZjjmPmuXaE7ZvdhFMP2QDh45vcT8LzlPGUcOwpIWxsGHrB6Q6RcFXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.13.0.tgz", + "integrity": "sha512-Fol/DxA1lnIzCsNx/CckIEoyWImQHiWPgFAWL5s7VIVaJrEFnnbRqfOxmvr8yWg8mh3hWLeXNcxqA82CKXgg+Q==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1", - "jpeg-js": "^0.3.4" + "@jimp/utils": "^0.13.0", + "jpeg-js": "^0.4.0" } }, "@jimp/plugin-blit": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.10.2.tgz", - "integrity": "sha512-PdqKZLkwnOOnrr+M4X4K/GrQ26qeCHut7AoFbKW+BsHooHvyadOWwVTBUBfK8GyDp/NApEC9SXbT0UNk8XqabA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.13.0.tgz", + "integrity": "sha512-roCShFZosJgRMLCLzuOT1pRZysQF/p3avQieZiu9pfg2F9X09f91OauU2Lf3/yOp0TZCWbheqbem9MPlhyED8w==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-blur": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.10.2.tgz", - "integrity": "sha512-9KeLyUY3s5N0cPZN4uMg0qIiSDvIPhXEnpYnXdN2V53dM25sKrBCMH578/W+n9hAHVpsbJHS+VFknO1JV47QVw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.13.0.tgz", + "integrity": "sha512-LeBhQe72bRk2fe2AftcqcDaWgSu6vFD0fxiAYYMy3pHa8pnPAwnw2W3u4bV/gc5XJt6AJzoRyc7WVG2pE4A3gg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-circle": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.10.2.tgz", - "integrity": "sha512-wOJ3qKa916YZMEwA9qwIn8yROYonkscJ3bqaaSsyf5CadiY8VCijKxA3BVwr7PKjj89yf5RCS4mcy+CO8+nmkw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.13.0.tgz", + "integrity": "sha512-INwIl8zgWnJYXxYkNhIjG8TXg2Q1nh008SDKyC+Pug4ce/XRJC8w/Gk6HS+U9Z2tIO2/zXv473k/JaiwvDMu1w==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-color": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.10.2.tgz", - "integrity": "sha512-c6cw41Hn3tLYQIRg3hxXrefKcOfW4jRN9b9DGH16mcZrRtw5jMzq3NfZ+RLQM47SyAE7N2BeUz0Ah3pmCArI0g==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.13.0.tgz", + "integrity": "sha512-e71UDivZdZGOhQRLjDo4a0BKgrH858HJ7zFk7/Yti58LwgeIGjYHhuYc+xQOdnBWPzGSD47TuFX5GXmf/x1nmg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/utils": "^0.13.0", "tinycolor2": "^1.4.1" } }, "@jimp/plugin-contain": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.10.2.tgz", - "integrity": "sha512-oDDe+XdpSwx2OQOSb6ar4O31+4d02Qz4R+1BeucuO7FzOrbDggnCWavSg6RevyOJPDKGkmv8Jj3V6S0jUwgVgw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.13.0.tgz", + "integrity": "sha512-qPYS+ccMP4mEnf7BB0bcaszUTth8OxeRX0MdMvU6PDEI0nIvVVNwmuI6YtNqqs12PwuYxgPkq6AFenyLyoNP1g==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-cover": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.10.2.tgz", - "integrity": "sha512-cnEqx8kHqBvQA+axKA8qRshwAIIfyxAwjdeRB/LZ9bWroh8XvbifW5buBgITDG5KklDkBhivmDEtPY90r3mMFQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.13.0.tgz", + "integrity": "sha512-S2GkbXNgIb0afof/NLLq9IJDZPOcFtu1mc32ngt9S8HzXsNHgRAzONW7cg56bwQ6p0+sz/dS5tB4ctOW/pu/Dw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-crop": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.10.2.tgz", - "integrity": "sha512-6uTb3LMP0kiMqYOAHyU/q/pkScw6aRWkTSxhjgcsewQS3zPHWTSGgP8u6CNAFnlDmVYVIz/jdKlFnnOdf0ZwrA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.13.0.tgz", + "integrity": "sha512-Y1Ug3kOzsq72EjLiWQlwkHuvUvdSmFUDtxpyOXh3RxeWF7wmdjH8FvdhPj8hWvFLsDYFgWGaLI4Z6SXOr+N8nA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-displace": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.10.2.tgz", - "integrity": "sha512-AGQDlyeFJz+zszYUkIzi5QyLLPsJzRJNIplU0S0HBxmXf5tZEeiiEtmsaC4j9VoAVD9Jwwn39+cfwV88Ij7WGg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.13.0.tgz", + "integrity": "sha512-c80VIUjIqQoavafthLpYRZdzANCxbOCHzqkFVbZ0kNKJnDDk6fW55mvVW4TJLDToDU81WMlttCmNV0oXcX93gQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-dither": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.10.2.tgz", - "integrity": "sha512-TEu7n44OS/+F1eWqKumsKYI+i2cPxzRTmxJhxrsUGyDD2aNi7tCIfKILXDqO6Ii0tYgSqwakG2+Eu0Jqg7J/VQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.13.0.tgz", + "integrity": "sha512-EUz/y/AaQ00TnaiVLVAXLz8n8Nx7S36lKi4VXPeYy5a5FyzBimxNiKxdITVe9zooN7+H4FP++/xGFGFMpfWtRg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-fisheye": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.2.tgz", - "integrity": "sha512-kxtfkcnnXitqpTxGaZg/q6bzMBRWCFEWs7maMIgjFkGvXsMegQ90EdKF1Ku76/gCTIGxyfbped8QD/+iACgzFw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.13.0.tgz", + "integrity": "sha512-O7h5pNTk2sYcTKxLvV6+zzUpLx8qzdNl6qiP9x1S0CKy64oZ9IwtK1eR1eLom0YA8tUR7rX5Ra4pB8bhq8Oyqw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-flip": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.10.2.tgz", - "integrity": "sha512-JW/aAKPGYOEGrqldpUBFxHUZ21pwhtxeRiwXEyMu/8N23PVuNBAePKboPMxRvkSLvAOn122xKEyCQvF10v/TOQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.13.0.tgz", + "integrity": "sha512-gWk+Q0LmCvupUuWRfoGyETmH/+lJKZuPCeA9K6UHJldq5Cdg/3MrlKUNS1HcPCDXjw+dWDGC8QnNslvMTaY5VQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-gaussian": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.2.tgz", - "integrity": "sha512-uP1up3fCIBzGexqs/+HMGBoZckEEcic09RNRj5Lq6EUVY8vFdKeBk3F+tAA+fstpA6yHhjPk1w7FZKX/tkECNw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.13.0.tgz", + "integrity": "sha512-0ctRqbCcLdy8y9IrSIH2McWNPLnEwjoe8qxtqoi51zRsM3z3mwjiTC2q8AWeF0SdIdWwV+YV/eP0494AJqjTsg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-invert": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.10.2.tgz", - "integrity": "sha512-zm1NB+AS0fTKW0gmFs1Tjgkj892gtnDicyxzmYeCLoQzPTr/1iPVf2EGidCS88+aw04sA5DOu0UX7637ib7TkA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.13.0.tgz", + "integrity": "sha512-k7TWx/la0MrTcT1dMtncV6I9IuGToRm9Q0ekzfb3k8bHzWRYX4SUtt/WrZ/I+/znD/fGorLtFI057v7mcLJc5A==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-mask": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.10.2.tgz", - "integrity": "sha512-4pVBAU6d/7EhfYs8sYuBGB3JMIuvrdiXbt6ESNs4CyDSbiDT4z1/f2sjWvNyLYlJ7cQJ+we50qqvq8vvNnb5lA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.13.0.tgz", + "integrity": "sha512-U3OdsgtMNpbCYc1lzzu96zdSgyz7BK9eD8IoFHdw4Ma8gCuM8kp9gdBJlKnzOh8eyYvssdCMZOWz9Xbxc5xH9A==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-normalize": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.10.2.tgz", - "integrity": "sha512-B2HXf6uaH8EAyZA5KvVYJOfv4AZpferIuDhOQSqDLKAEBBfEViwHk/Rn+nCUzGsAzQ/yiVtKAil68YcybaI6oQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.13.0.tgz", + "integrity": "sha512-yKOgZSvOxSHNlh+U9NOQH4Drgca0Dwb7DQRk3vj67gvHQC96JafIpGwN+9V4fP89lA3rkItbw6xgN6C/28HEUQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-print": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.10.2.tgz", - "integrity": "sha512-YXKBG5yNOr/DX958Omk1GzTrprRJ3YXWhJ6tzCbboxqXK6pErLDxFsa1mlngDGb/a43oGs63Myj7CuGf98/vaw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.13.0.tgz", + "integrity": "sha512-Tv7r/1t7z63oLeRuEWw9xbm0G5uuBE54986+BOu8OFaHBpV/BbVHrE7ouApA0mKVZqMZCVjhO6Ph8+uFzRjdOw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/utils": "^0.13.0", "load-bmfont": "^1.4.0" } }, "@jimp/plugin-resize": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.10.2.tgz", - "integrity": "sha512-F+pXSU5sbACqqArZfVeYYXrq7qMwZcMs97Z3V70qsLtvDSVyNFG5iYpJhFKJOj05O7a2G7FQ1Nq2h0UKJdlLJg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.13.0.tgz", + "integrity": "sha512-XOo0Skn7aq/aGxV9czFx6EaBUbAsAGCVbAS26fMM0AZ4YAWWUEleKTpHunEo92giIPhvlxeFFjQR2jQ9UcB3uQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-rotate": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.10.2.tgz", - "integrity": "sha512-bQ0RQuXS768G9l1HemULJ7puuevU5N3TpE1QV5NdzbKwjHidFAAavp8XFXOhd2Mj/Xh/3iFlMMEB7NG/McYoOA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.13.0.tgz", + "integrity": "sha512-BaNeh655kF9Rz01ZV+Bkc8hLsHpNu3QnzigruVDjGt9Paoig0EBr+Dgyjje+7eTLu20kyuyxwPUAxLSOiPiraQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-scale": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.10.2.tgz", - "integrity": "sha512-47GRG3joOGDBLHYyLR0tc3hEz/H8tgPcLZaNEAaIdyL+ckAWQIgnoytbqj7OEAFeMj5j+loNm+ahJVX7w/X/ug==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.13.0.tgz", + "integrity": "sha512-e/f7lvii+DmRMgYF+uBKQy437f+J66WbL0FcFEataCF/W9UkTIQGeXdECwJSPfqr81SxC5mGbSBbsdbMKChzAQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-shadow": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.10.2.tgz", - "integrity": "sha512-koksEMJZKjq8OiprLh+ffrRo/x/dXHCsfaKS4kf2EoFZEb6sZHeJgKLwozLky1DXBPiMryYSrNt8Cb6wzjd1zA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.13.0.tgz", + "integrity": "sha512-qObtH63dmfPLze5wE8XDRjDsBOUnAfEWib4YbjPXGBZVxeKD7+2oPGemsK56HqC/+rYzIynkbi4MUIV1Q0dGjA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugin-threshold": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.10.2.tgz", - "integrity": "sha512-RQzxB40KK50iUUNLF9M7G3dVKFmbe/T4EQVWMPxxX8NQPNbU0vjZzTW0vVYoTYno2vLxewQgV0Y3ydX/l08NLg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.13.0.tgz", + "integrity": "sha512-ACF7jk0ogso+2RK+0EsvBupVfE3IMq39wGFQWgpnHR9Tj12mSO279f6i/H8bcj1ZXmHot22nwLOG0wO4AlAaRg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1" + "@jimp/utils": "^0.13.0" } }, "@jimp/plugins": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.10.2.tgz", - "integrity": "sha512-z4Fhu97WZIussTzd1PJXUUuluushXlfCYzXifixf8fGAoVGZuMMJl6aqtuy4eUOgLyN8sXun0MzdWAahelqbfA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.13.0.tgz", + "integrity": "sha512-onu8GnSnFjLFuFVFq8+aTYFIDfH8kwZuBHeGaDyScPFFn6QMKsPl4TeLzQ5vwIPvcpkADuFFfuAshE4peutjjA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.10.2", - "@jimp/plugin-blur": "^0.10.2", - "@jimp/plugin-circle": "^0.10.2", - "@jimp/plugin-color": "^0.10.2", - "@jimp/plugin-contain": "^0.10.2", - "@jimp/plugin-cover": "^0.10.2", - "@jimp/plugin-crop": "^0.10.2", - "@jimp/plugin-displace": "^0.10.2", - "@jimp/plugin-dither": "^0.10.2", - "@jimp/plugin-fisheye": "^0.10.2", - "@jimp/plugin-flip": "^0.10.2", - "@jimp/plugin-gaussian": "^0.10.2", - "@jimp/plugin-invert": "^0.10.2", - "@jimp/plugin-mask": "^0.10.2", - "@jimp/plugin-normalize": "^0.10.2", - "@jimp/plugin-print": "^0.10.2", - "@jimp/plugin-resize": "^0.10.2", - "@jimp/plugin-rotate": "^0.10.2", - "@jimp/plugin-scale": "^0.10.2", - "@jimp/plugin-shadow": "^0.10.2", - "@jimp/plugin-threshold": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/plugin-blit": "^0.13.0", + "@jimp/plugin-blur": "^0.13.0", + "@jimp/plugin-circle": "^0.13.0", + "@jimp/plugin-color": "^0.13.0", + "@jimp/plugin-contain": "^0.13.0", + "@jimp/plugin-cover": "^0.13.0", + "@jimp/plugin-crop": "^0.13.0", + "@jimp/plugin-displace": "^0.13.0", + "@jimp/plugin-dither": "^0.13.0", + "@jimp/plugin-fisheye": "^0.13.0", + "@jimp/plugin-flip": "^0.13.0", + "@jimp/plugin-gaussian": "^0.13.0", + "@jimp/plugin-invert": "^0.13.0", + "@jimp/plugin-mask": "^0.13.0", + "@jimp/plugin-normalize": "^0.13.0", + "@jimp/plugin-print": "^0.13.0", + "@jimp/plugin-resize": "^0.13.0", + "@jimp/plugin-rotate": "^0.13.0", + "@jimp/plugin-scale": "^0.13.0", + "@jimp/plugin-shadow": "^0.13.0", + "@jimp/plugin-threshold": "^0.13.0", "timm": "^1.6.1" } }, "@jimp/png": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.10.2.tgz", - "integrity": "sha512-3r5q9Ns3Gz8pcI8oBdGTY7d0TkkW4atZ12bknB1sABc3UYX69arqmTvrULMYhWf0M6n3tKHdnmdW2cTlFWIAbw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.13.0.tgz", + "integrity": "sha512-9MVU0BLMQKJ6Kaiwjrq6dLDnDktZzeHtxz4qthRHaGOyHLx3RpxmbhaDuK9dDg6NASX3JuXznEhaOP4lqQODpQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/utils": "^0.13.0", "pngjs": "^3.3.3" } }, "@jimp/tiff": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.10.2.tgz", - "integrity": "sha512-uuJF6ZMXo0EDyooho9RhwAY9YGcgUju1mw53N9BtU7E9Y+AxKn7miaK2niROmN2/ufmLJO8vS9zjpgAxv+zgKQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.13.0.tgz", + "integrity": "sha512-8lLGgEmhVRRjzZfn/QgpM3+mijq5ORYqRHtLcqDgcQaUY/q/OU1CxLYX777pozyQ3KIq1O+jyyHZm2xu3RZkPA==", "requires": { "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1", "utif": "^2.0.1" } }, "@jimp/types": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.10.2.tgz", - "integrity": "sha512-XCgFhH8BR0ovxrEkDnKRXalEAUjo3vW9vwOFxfSrJR/YS/k0TsvYB6/+QAU/cGwcN8icmYdDyhq2yhJACAl13w==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.13.0.tgz", + "integrity": "sha512-qGq9qVHiRTgtIy061FSBr9l7OFrSiFLkKyQVnOBndEjwls2XLBKXkMmSD2U3oiHcNuf3ACsDSTIzK3KX/hDHvg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.10.2", - "@jimp/gif": "^0.10.2", - "@jimp/jpeg": "^0.10.2", - "@jimp/png": "^0.10.2", - "@jimp/tiff": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/bmp": "^0.13.0", + "@jimp/gif": "^0.13.0", + "@jimp/jpeg": "^0.13.0", + "@jimp/png": "^0.13.0", + "@jimp/tiff": "^0.13.0", "timm": "^1.6.1" } }, "@jimp/utils": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.10.2.tgz", - "integrity": "sha512-B3fBgkE7t7S4X1RXKY5vfx+8QdUvN0AIbG2rM7csYTsudOczTtzimlP7XxunYtOwCYBLVswRWpqn8PZcRLWu2w==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.13.0.tgz", + "integrity": "sha512-zA4573jE4FIpBKiYpPGo66JOAGdv/FS/N9fW9GpkbwJeTu12fV+r4R1ARSyt8UEKdE4DMBatBmQC0U2FGZijOA==", "requires": { "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" } }, @@ -368,6 +442,11 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -377,6 +456,41 @@ "negotiator": "0.6.2" } }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "ansi-styles": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", @@ -391,11 +505,51 @@ "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -406,16 +560,24 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" - }, "bl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", @@ -450,6 +612,30 @@ "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "bson": { @@ -476,15 +662,31 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+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-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -506,11 +708,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "complex.js": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", @@ -521,6 +718,16 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "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=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -549,27 +756,37 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "dblapi.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.4.0.tgz", - "integrity": "sha512-SqDYVcV1DBQnyhySTjd+Qvzu7jFr+4eKwl56fGpIti7OlXGF5dmDPeo3jQfRlOXTRn5/I5997MDIJukoDxE3Mg==" + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dbots": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dbots/-/dbots-4.0.0.tgz", + "integrity": "sha512-G2KuFaymsDSeOMijNyEWJzAMuImMkn1MF2Tqh6d6f+FhZTDR+EUrKYLtgwYsEKc6h0a1iq+M6KTtQt41BKVEkQ==", + "requires": { + "axios": "^0.19.0", + "promise.allsettled": "^1.0.2" + } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decimal.js": { @@ -577,11 +794,35 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, "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=" + }, "denque": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", @@ -597,6 +838,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "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": "11.6.4", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.6.4.tgz", @@ -609,26 +855,99 @@ "ws": "^6.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-walk": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -639,6 +958,168 @@ "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz", + "integrity": "sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", + "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -684,6 +1165,21 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "express-session": { @@ -701,11 +1197,24 @@ "uid-safe": "~2.1.5" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", @@ -713,11 +1222,38 @@ } } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -735,6 +1271,72 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "form-data": { @@ -767,10 +1369,75 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "fs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", - "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=" + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "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=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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" + } + }, + "gifwrap": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", + "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", + "requires": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } }, "global": { "version": "4.3.2", @@ -781,11 +1448,38 @@ "process": "~0.5.1" } }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "html-entities": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", @@ -801,69 +1495,259 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-q": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", + "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "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+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "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" + } + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "is-extglob": "^2.1.1" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "requires": { + "has-symbols": "^1.0.1" + } }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, "javascript-natural-sort": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" }, "jimp": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.10.2.tgz", - "integrity": "sha512-dt6n3P0LZyoqAiIUur+gJEKS55sCUUo19cKx8LTSZRqGizF4JN0jfRAnfnV4nxF+sINP2FN6SOi82gHcAMm1nQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.13.0.tgz", + "integrity": "sha512-N/iG8L7Qe+AcHhrgcL0m7PTP/14iybmSIuOqCDvuel9gcIKEzxbbGuPCJVMchwXzusc2E7h9UjO9LZDfXb/09w==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.10.2", - "@jimp/plugins": "^0.10.2", - "@jimp/types": "^0.10.2", - "core-js": "^3.4.1", + "@jimp/custom": "^0.13.0", + "@jimp/plugins": "^0.13.0", + "@jimp/types": "^0.13.0", "regenerator-runtime": "^0.13.3" } }, "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.0.tgz", + "integrity": "sha512-960VHmtN1vTpasX/1LupLohdP5odwAT7oK/VSm6mW0M58LbrBnowLAPWAZhWGhDAGjzbMnPXZxzB/QYgBwkN0w==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "kareem": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "load-bmfont": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", @@ -879,24 +1763,30 @@ "xtend": "^4.0.0" } }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "m3u8stream": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.5.tgz", - "integrity": "sha512-QZCzhcfUliZfsOboi68QkNcMejPKTEhxE+s1TApvHubDeR8ythm4ViWuYFqgUwZeoHe8q0nsPxOvA3lQvdSzyg==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.7.1.tgz", + "integrity": "sha512-z6ldnAdhbuWOL6LmMkwptSZGzj+qbRytMKLTbNicwF/bJMjf9U9lqD57RNQUFecvWadEkzy6PDjcNJFFgi19uQ==", "requires": { "miniget": "^1.6.1", "sax": "^1.2.4" } }, "mathjs": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-6.6.4.tgz", - "integrity": "sha512-fvmP89ujJbDAC8ths7FZh7PWdA71dfA5WJVAzJbQhSDCHK1aBk8WRf1XcTw51ERs+sKx9nYBGsRshqmb/oe8Ag==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-7.0.1.tgz", + "integrity": "sha512-ikFnvtvui8EA1KC+RsF7Sse34WA7EGsKnwwv7/lTRx04t25JtWpVWrs0ZcNKxygZVrOIpU9MRgbvXEFYFV3pOQ==", "requires": { "complex.js": "^2.0.11", "decimal.js": "^10.2.0", @@ -935,16 +1825,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "min-document": { @@ -956,15 +1846,40 @@ } }, "miniget": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.7.0.tgz", - "integrity": "sha512-yrgaDSMRzrfYTkudB4Y6xK8pCb7oAH2bvfv6iPY2m6CedZfs9yK4b/ofh0Vzv08hCYXH/HHkoS8an6fkWtOAQA==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.7.2.tgz", + "integrity": "sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -974,9 +1889,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" }, "moment-duration-format": { "version": "2.3.2", @@ -984,12 +1899,12 @@ "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" }, "mongodb": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.5.tgz", - "integrity": "sha512-GCjDxR3UOltDq00Zcpzql6dQo1sVry60OXJY3TDmFc2SWFY6c8Gn1Ardidc5jDirvJrx2GC3knGOImKphbSL3A==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", + "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==", "requires": { "bl": "^2.2.0", - "bson": "^1.1.1", + "bson": "^1.1.4", "denque": "^1.4.1", "require_optional": "^1.0.1", "safe-buffer": "^5.1.2", @@ -997,13 +1912,13 @@ } }, "mongoose": { - "version": "5.9.9", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.9.tgz", - "integrity": "sha512-pLkIkM7XQwfbQ+xK1l57Zv0DYPH190/I6Cv5+PbJGfAU0HvX0atMlp+vly8zcjNTEvTkVM80qA5eBYBvZyLYXw==", + "version": "5.9.18", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.18.tgz", + "integrity": "sha512-agZbIuQcN1gZ12BJn6KesA+bgsvoLVjCwhfPw88hggxX8O24SWK4EJwN35GEZKDej9AHUZKNAPgmdeXCVQxviA==", "requires": { - "bson": "~1.1.1", + "bson": "^1.1.4", "kareem": "2.3.1", - "mongodb": "3.5.5", + "mongodb": "3.5.8", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.7.0", "mquery": "3.2.2", @@ -1012,13 +1927,6 @@ "safe-buffer": "5.1.2", "sift": "7.0.1", "sliced": "1.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "mongoose-legacy-pluralize": { @@ -1050,42 +1958,117 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "needle": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "node-opus": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/node-opus/-/node-opus-0.3.3.tgz", - "integrity": "sha512-ZQniA8iJ6y/qOTmW6eyzM9m8odt4CIGV0NM9/U03/pYLhGyxy18QXO25WfrWd8XsUYx57tnxll2xxj54CN08uQ==", + "node-addon-api": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.1.tgz", + "integrity": "sha512-2WVfwRfIr1AVn3dRq4yRc2Hn35ND+mPJH6inC6bjpYCZVrpXPB4j3T6i//OGVfqVsR1t/X/axRulDsheq4F0LQ==" + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "requires": { - "bindings": "~1.2.1", - "commander": "^2.9.0", - "nan": "^2.14.0", - "ogg-packet": "^1.0.0" + "npm-normalize-package-bin": "^1.0.1" } }, - "ogg-packet": { + "npm-normalize-package-bin": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ogg-packet/-/ogg-packet-1.0.1.tgz", - "integrity": "sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A==", - "optional": true, + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "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" + } + }, + "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=" + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "ref-struct": "*" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "omggif": { @@ -1106,11 +2089,61 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-bmfont-ascii": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", @@ -1140,6 +2173,17 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "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=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1163,6 +2207,12 @@ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "prism-media": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.4.tgz", @@ -1178,6 +2228,24 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -1187,6 +2255,12 @@ "ipaddr.js": "1.9.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -1213,6 +2287,17 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -1227,27 +2312,6 @@ "util-deprecate": "~1.0.1" } }, - "ref": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ref/-/ref-1.3.5.tgz", - "integrity": "sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA==", - "optional": true, - "requires": { - "bindings": "1", - "debug": "2", - "nan": "2" - } - }, - "ref-struct": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ref-struct/-/ref-struct-1.1.0.tgz", - "integrity": "sha1-XV7mWtQc78Olxf60BYcmHkee3BM=", - "optional": true, - "requires": { - "debug": "2", - "ref": "1" - } - }, "regenerator-runtime": { "version": "0.13.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", @@ -1258,6 +2322,12 @@ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -1265,6 +2335,13 @@ "requires": { "resolve-from": "^2.0.0", "semver": "^5.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "resolve-from": { @@ -1272,6 +2349,14 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, + "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.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1302,9 +2387,9 @@ "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "send": { "version": "0.17.1", @@ -1326,6 +2411,21 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -1344,16 +2444,84 @@ "send": "0.17.1" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "sift": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", @@ -1373,11 +2541,65 @@ "memory-pager": "^1.0.2" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "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.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1386,6 +2608,19 @@ "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" + } + }, + "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=" + }, "superagent": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz", @@ -1413,19 +2648,14 @@ } }, "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" }, "qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" }, "readable-stream": { "version": "3.6.0", @@ -1452,6 +2682,78 @@ "has-flag": "^4.0.0" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", + "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "requires": { + "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" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "timm": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.2.tgz", @@ -1477,6 +2779,21 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1504,6 +2821,15 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "utif": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", @@ -1522,11 +2848,54 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -1570,14 +2939,19 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "ytdl-core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-2.1.0.tgz", - "integrity": "sha512-UmblkTLSV0v3y9I3oqrZkllyT0FnK1Owm7WftEkcTIlqnjip1mnyaLICz0P6+W3Ji/AtBFSwy/mLG2dlEvP6Vw==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-2.1.7.tgz", + "integrity": "sha512-ithllxxlt4zmJVTnYtT8/31QLv5MGlK3fSk29lx2S4eKc1BGh+ELKQEAkRJqWIf2P8TYBYrKwijx11xND4JcXw==", "requires": { "html-entities": "^1.3.1", - "m3u8stream": "^0.6.3", - "miniget": "^1.7.0", + "m3u8stream": "^0.7.1", + "miniget": "^1.7.2", "sax": "^1.1.3" } } diff --git a/package.json b/package.json index dd7212f..cd2c574 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,36 @@ { "name": "arunabot", - "version": "4.1.0", + "version": "4.2.0", "description": "A nova e melhorada aruna!", - "main": "main.js", + "main": "src/main.js", "scripts": { - "start": "node sharding.js", - "start-nonsharded": "node main.js" + "start": "node src/sharding.js", + "eslint": "eslint ./src", + "eslint:fix": "eslint ./src --fix" }, + "repository": { + "type": "git", + "url": "https://github.com/ArunaBot/Aruna.git" + }, + "author": "Lobo Metalurgico", + "license": "AGPL-3.0", "dependencies": { - "express": "^4.17.1", + "@discordjs/opus": "^0.3.2", + "chalk": "^4.1.0", + "dateformat": "^3.0.3", + "dbots": "^4.0.0", "discord.js": "^11.6.4", - "fs": "^0.0.2", - "mongoose": "^5.9.7", - "moment": "^2.24.0", - "moment-duration-format": "^2.2.2", + "express": "^4.17.1", "express-session": "^1.17.1", - "dotenv": "^8.2.0", - "ytdl-core": "^2.0.1", - "node-opus": "^0.3.2", - "jimp": "^0.10.1", + "jimp": "^0.13.0", + "mathjs": "^7.0.1", + "moment": "^2.26.0", + "moment-duration-format": "^2.3.2", + "mongoose": "^5.9.18", "superagent": "^5.2.2", - "mathjs": "^6.6.3", - "chalk": "^4.0.0", - "dblapi.js": "^2.4.0" + "ytdl-core": "^2.1.7" + }, + "devDependencies": { + "eslint": "^7.3.1" } -} \ No newline at end of file +} diff --git a/pm2.json b/pm2.json new file mode 100644 index 0000000..3be6d96 --- /dev/null +++ b/pm2.json @@ -0,0 +1,9 @@ +{ + "apps": [ + { + "name": "ArunaBot", + "script": "pnpm", + "args": "start" + } + ] +} \ No newline at end of file diff --git a/Commands/avatar.js b/src/Commands/avatar.js similarity index 81% rename from Commands/avatar.js rename to src/Commands/avatar.js index 8a0be2d..38ca2ea 100644 --- a/Commands/avatar.js +++ b/src/Commands/avatar.js @@ -16,16 +16,16 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); +const Discord = require('discord.js'); -exports.run = (aruna, message, args, prefix) => { +exports.run = (aruna, message, args) => { const user1 = message.guild.member( message.mentions.users.first() || aruna.users.get(args[0]) || message.author ); const user = user1.user; - let embed = new Discord.RichEmbed() + const embed = new Discord.RichEmbed() .setAuthor(`Avatar de ${user.username}`) .setDescription(`**Clique [aqui](${user.avatarURL}) para baixar a foto.**`) .setImage(user.avatarURL) @@ -33,8 +33,8 @@ exports.run = (aruna, message, args, prefix) => { message.channel.send(embed); }; exports.config = { - name: "avatar", - aliases: [""], - description: "Mostra o avatar próprio ou de um usuário", - category: `🎉 Entretenimento` + name: 'avatar', + aliases: [''], + description: 'Mostra o avatar próprio ou de um usuário', + category: '🎉 Entretenimento' }; diff --git a/src/Commands/badges.js b/src/Commands/badges.js new file mode 100644 index 0000000..2e5a965 --- /dev/null +++ b/src/Commands/badges.js @@ -0,0 +1,161 @@ +/* eslint-disable no-unused-vars */ +const Discord = require('discord.js'); +const { database, config } = require('../../Configs'); +const { premium } = require('../Utils/emojis'); + +exports.run = async (aruna, message, args) => { + const user = await database.Users.findOne({ _id: message.author.id }); + const guild = await database.Guilds.findOne({ _id: message.guild.id }); + + const errored = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setDescription('Você não tem permissão para executar esse comando!') + .setFooter(`Algo deu errado, ${message.author.username}`); + const error1 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor já é VIP!') + .setTimestamp(); + const error2 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor já é um PARCEIRO!') + .setTimestamp(); + const error3 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor já é um PARCEIRO+') + .setTimestamp(); + const error4 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor não é um PARCEIRO+') + .setTimestamp(); + const error5 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor não é um PARCEIRO') + .setTimestamp(); + const error6 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Esse servidor não é VIP') + .setTimestamp(); + const error8 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Erro Desconhecido!') + .setTimestamp(); + const error9 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Opção Inválida! Use apenas `set` ou `remove` como argumento primário!') + .setTimestamp(); + const error10 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Insira Algum Argumento!') + .setTimestamp(); + const error11 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Opção Inválida! Use apenas `partner`, `vip` ou `partner+` como argumento secundário!') + .setTimestamp(); + + if (user.SUPER !== true) return message.channel.send(errored); + + if (!args[0]) { + return message.channel.send(error10); + } else if (args[0].toLowerCase() !== 'set' && args[0].toLowerCase() !== 'remove') { + return message.channel.send(error9); + } else if (!args[1] || args[1] !== 'partner+' && args[1] !== 'partner' && args[1] !== 'vip') { + return message.channel.send(error11); + } + + const sucess = new Discord.RichEmbed() + .setColor([0, 255, 0]) + .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) + .setFooter('Sucesso!') + .setDescription(`The Badge \`${args[1]}\` has been \`${args[0]}ed\` with sucess!`) + .setTimestamp(); + + var vip = guild.isPremium; + var partner = guild.isPartner; + var partnerPlus = ''; + + if (vip == true && partner == true) { + partnerPlus = true; + } + + if (args[0] == 'set') { + if (args[1] == 'partner+') { + if (partnerPlus == true) { + return message.channel.send(error3); + } else if (vip == true) { + guild.isPartner = true; + await guild.save(); + return message.channel.send(sucess); + } else if (partner == true) { + guild.isPremium = true; + await guild.save(); + return message.channel.send(sucess); + } else { + guild.isPartner = true; + guild.isPremium = true; + await guild.save(); + return message.channel.send(sucess); + } + } else if (args[1] == 'partner') { + if (partner == true) { + return message.channel.send(error2); + } else { + guild.isPartner = true; + await guild.save(); + return message.channel.send(sucess); + } + } else if (args[1] == 'vip') { + if (vip == true) { + return message.channel.send(error1); + } else { + guild.isPremium = true; + await guild.save(); + return message.channel.send(sucess); + } + } else return message.channel.send(error8); + } else if (args[0] == 'remove') { + if (args[1] == 'partner+') { + if (partnerPlus == false) { + return message.channel.send(error4); + } else { + guild.isPartner = false; + guild.isPremium = false; + await guild.save(); + return message.channel.send(sucess); + } + } else if (args[1] == 'partner') { + if (partner == false) { + return message.channel.send(error5); + } else { + guild.isPartner = false; + await guild.save(); + return message.channel.send(sucess); + } + } else if (args[1] == 'vip') { + if (vip == false) { + return message.channel.send(error6); + } else { + guild.isPremium = false; + await guild.save(); + return message.channel.send(sucess); + } + } else return message.channel.send(error8); + } else return message.channel.send(error8); + + +}; + +exports.config = { + name: 'badge', + aliases: [], + category: '🧰 Administração' +}; \ No newline at end of file diff --git a/src/Commands/ban.js b/src/Commands/ban.js new file mode 100644 index 0000000..73bda26 --- /dev/null +++ b/src/Commands/ban.js @@ -0,0 +1,119 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +// eslint-disable-next-line no-unused-vars +const { date } = require('../Utils'); +const dateFormat = require('dateformat'); +const now = new Date(); + +exports.run = async (aruna, message, args) => { + + const buser = await aruna.fetchUser(message.mentions.users.first() || args[0]); + + const error1 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você não possui a permissão de `Banir Membros`!') + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Eu não possuo a permissão de `Banir Membros`!') + .setTimestamp(); + + const error3 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você deve inserir um usuário para ser punido!') + .setTimestamp(); + const error4 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Você não pode banir ${buser.username} pois este é o(a) dono(a) do servidor!`) + .setTimestamp(); + const error5 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Você não pode banir este usuário pois seu cargo é igual ou inferior ao de ${buser.username}.`) + .setTimestamp(); + const error6 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Eu não posso banir este usuário pois meu cargo é igual ou inferior ao de ${buser.username}`) + .setTimestamp(); + const error7 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Infelizmente não sei informar qual o erro. Sinto muito ${message.author.username} :(`) + .setTimestamp(); + + if (!message.member.hasPermission('BAN_MEMBERS')) + return message.channel.send(error1); + if (!message.guild.members.get(aruna.user.id).hasPermission('BAN_MEMBERS')) + return message.channel.send(error2); + + if (!buser) return message.channel.send(error3); + + const guildBuser = message.guild.member( + message.mentions.users.first() || message.guild.members.get(args[0]) + ); + + if (guildBuser) { + if (message.guild.owner.id == buser.id) + return message.channel.send(error4); + if (guildBuser.highestRole.position >= message.guild.members.get(message.author.id).highestRole.position && message.guild.owner.id !== message.author.id) + return message.channel.send(error5); + if (guildBuser.highestRole.position >= message.guild.members.get(aruna.user.id).highestRole.position) + return message.channel.send(error6); + } + + var reason = ''; + + if (!args.join(' ').slice(19)) { + reason = `Punido por: ${message.author.username}`; + } else { + reason = + `Punido por: ${message.author.username} com o Motivo: ` + + args.join(' ').slice(19); + } + + const embed = new Discord.RichEmbed() + .setAuthor('Banimento Efetuado com Sucesso!') + .setDescription(`Banimento efetuado por ${message.author.username}`) + .addField('Usuário Banido: ', `${buser} id ${buser.id}`, false) + .addField('Banido por: ', `<@${message.author.id}>`, false) + .addField('Data do Banimento: ', dateFormat(now, 'dd/mm/yyyy "às" HH:MM:ss'), false) + .addField('Motivo: ', `${reason}`, false) + .setTimestamp(); + + message.channel.send(embed).then(async msg => { + await message.guild.ban(buser, reason).catch(err => { + console.log(err); + msg.edit(error7); + }); + }); +}; + +exports.config = { + name: 'banir', + aliases: ['ban'], + category: '👮‍♂️ Moderação' +}; \ No newline at end of file diff --git a/src/Commands/bot.js b/src/Commands/bot.js new file mode 100644 index 0000000..15866f1 --- /dev/null +++ b/src/Commands/bot.js @@ -0,0 +1,77 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const { emojis } = require('../Utils'); +const Discord = require('discord.js'); +const pak = require('../../package.json'); +const { links } = require('../../Configs'); + +exports.run = (aruna, message) => { + + let totalSeconds = (aruna.uptime / 1000); + const days = Math.floor(totalSeconds / 86400); + const hours = Math.floor(totalSeconds / 3600); + totalSeconds %= 3600; + const minutes = Math.floor(totalSeconds / 60); + const seconds = Math.floor(totalSeconds % 60); + + var uptime = ''; + + if (days >= 1) { + uptime = `${days}d, ${hours}h, ${minutes}m`; + } else if (hours >= 1) { + uptime = `${hours}h, ${minutes}m, ${seconds}s`; + } else if (minutes >= 1) { + uptime = `${minutes}m, ${seconds}s`; + } else { + uptime = `${seconds}s`; + } + + const user = message.guild.member(aruna.user); + + const name = user.nickname !== null ? user.nickname : aruna.user.username; + + const embed = new Discord.RichEmbed() + .setAuthor(aruna.user.username, `${aruna.user.avatarURL}`) + .addField(`(${emojis.robot}) Nome na Guild`, `${name}`, true) + .addField('(📡) Versão', `${pak.version}`, true) + .addField('(🕰️) Uptime', `${uptime}`, true) + .addField('(📃) Canais', `${aruna.channels.size}`, true) + .addField('(🖥️) Servidores', `${aruna.guilds.size}`, true) + .addField('(🕹️) Usuários', `${aruna.users.size}`, true) + .addField( + 'Convite', + `${links.invites[0] ? `[Link](${links.invites[0]})` : 'INDISPONÍVEL'}`, + true + ) + .addField('Meu Site', `${links.website ? `[Link](${links.website})` : 'Em Breve™️'}`, true) + .addField( + 'Servidor de Suporte', + `${links.supportServers[0] ? `[Link](${links.supportServers[0]})` : 'INDISPONÍVEL'}`, + true + ) + .setThumbnail(`${aruna.user.displayAvatarURL}`); + message.channel.send(embed); +}; + +exports.config = { + name: 'bot', + aliases: ['botinfo'], + description: 'Lista as Principais informações do bot', + category: `${emojis.robot} Utilidades` +}; diff --git a/Commands/calc.js b/src/Commands/calc.js similarity index 64% rename from Commands/calc.js rename to src/Commands/calc.js index 3c70512..0a61666 100644 --- a/Commands/calc.js +++ b/src/Commands/calc.js @@ -16,21 +16,21 @@ along with this program. If not, see . */ -const emoji = require("../utils/emojis.js"); -const Discord = require("discord.js"); -const math = require("mathjs"); +const { emojis } = require('../Utils'); +const Discord = require('discord.js'); +const math = require('mathjs'); exports.run = (aruna, message, args) => { const error1 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir o cálculo a ser feito.`) + .setDescription('Você deve inserir o cálculo a ser feito.') .setTimestamp(); const error2 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) .setDescription( - `Desculpe, mas não consegui efetuar o cálculo. Tente inserir outra conta.` + 'Desculpe, mas não consegui efetuar o cálculo. Tente inserir outra conta.' ) .setTimestamp(); @@ -39,27 +39,27 @@ exports.run = (aruna, message, args) => { var response; try { - response = math.eval(args.join(" ")); + response = math.eval(args.join(' ')); } catch (e) { return message.channel.send(error2); } - let embed = new Discord.RichEmbed() - .setAuthor("Calculadora V2") - .addField( - `(${emoji.upload}) Entrada`, - `\`\`\`js\n${args.join(' ')}\`\`\`` - ) - .addField( - `(${emoji.dev}) Saida`, - `\`\`\`js\n${response}\`\`\`` - ) - .setColor([54, 57, 63]); - message.channel.send(embed); + const embed = new Discord.RichEmbed() + .setAuthor('Calculadora V2') + .addField( + `(${emojis.upload}) Entrada`, + `\`\`\`js\n${args.join(' ')}\`\`\`` + ) + .addField( + `(${emojis.dev}) Saida`, + `\`\`\`js\n${response}\`\`\`` + ) + .setColor([54, 57, 63]); + message.channel.send(embed); }; exports.config = { - name: "calc", - aliases: ["calculadora", "math", "matematica", "calcular", "calculator"], - category: `${emoji.robot} Utilidades` + name: 'calc', + aliases: ['calculadora', 'math', 'matematica', 'calcular', 'calculator'], + category: `${emojis.robot} Utilidades` }; diff --git a/Commands/clear.js b/src/Commands/clear.js similarity index 72% rename from Commands/clear.js rename to src/Commands/clear.js index 6990b24..c103c7f 100644 --- a/Commands/clear.js +++ b/src/Commands/clear.js @@ -19,58 +19,58 @@ function verify(messages, args, message) { if (args[0] == messages.size) return ( - "Foram deletadas `" + + 'Foram deletadas `' + messages.size + - "` mensagens por " + + '` mensagens por ' + `<@${message.author.id}>` ); else return ( `<@${message.author.id}> deletou apenas \`${messages.size}\`` + - " mensagens das " + + ' mensagens das ' + `\`${args[0]} requisitadas\`` + - " por não existirem outras ou serem mais antigas que 2 semanas." + ' por não existirem outras ou serem mais antigas que 2 semanas.' ); } -const Discord = require('discord.js') +const Discord = require('discord.js'); exports.run = async (client, message, args) => { const error1 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não possui a permissão de \`Gerenciar Mensagens\`!`) + .setDescription('Você não possui a permissão de `Gerenciar Mensagens`!') .setTimestamp(); const error2 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu não possuo a permissão de \`Gerenciar Mensagens\`!`) + .setDescription('Eu não possuo a permissão de `Gerenciar Mensagens`!') .setTimestamp(); const error3 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir a quantidade de mensagens a ser apagada!`) + .setDescription('Você deve inserir a quantidade de mensagens a ser apagada!') .setTimestamp(); const error4 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Eu só posso apagar entre 2 e 100 mensagens.`) + .setDescription('Eu só posso apagar entre 2 e 100 mensagens.') .setTimestamp(); if ( - !message.guild.members.get(client.user.id).hasPermission("MANAGE_MESSAGES") + !message.guild.members.get(client.user.id).hasPermission('MANAGE_MESSAGES') ) - return message.channel.send(error2) - if (!message.member.hasPermission("MANAGE_MESSAGES")) - return message.channel.send(error1) + return message.channel.send(error2); + if (!message.member.hasPermission('MANAGE_MESSAGES')) + return message.channel.send(error1); if (!args[0]) - return message.channel.send(error3) + return message.channel.send(error3); if (args[0] > 100 || args[0] <= 1) - return message.channel.send(error4) + return message.channel.send(error4); await message.delete(); await message.channel.bulkDelete(args[0]).then(messages => { @@ -80,7 +80,7 @@ exports.run = async (client, message, args) => { }); }; exports.config = { - name: "clear", + name: 'clear', aliases: [], - category: `👮‍♂️ Moderação` + category: '👮‍♂️ Moderação' }; diff --git a/Commands/config.js b/src/Commands/config.js similarity index 67% rename from Commands/config.js rename to src/Commands/config.js index 8db37fe..2f9cd45 100644 --- a/Commands/config.js +++ b/src/Commands/config.js @@ -1,3 +1,5 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,44 +18,45 @@ along with this program. If not, see . */ -const { database } = require("../configs"); -const emoji = require("../utils/emojis.js"); -const Discord = require("discord.js"); +const { database } = require('../../Configs'); +const Discord = require('discord.js'); exports.run = async (aruna, message, args) => { - var validOptions = ["rank", "ticket", "autorole"]; + var validOptions = ['rank', 'ticket', 'autorole']; const guild = await database.Guilds.findOne({ _id: message.guild.id }); + + const user = await database.Users.findOne({ _id: message.author.id }); const commandOff = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Este comando não está disponível no momento!`) + .setDescription('Este comando não está disponível no momento!') .setTimestamp(); const nopermission = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não possui a permissão de \`Gerenciar Servidor\``) + .setDescription('Você não possui a permissão de `Gerenciar Servidor`') .setTimestamp(); const error1 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) .setDescription( - `Insira um dos seguintes comandos para que seja efetuado o gerenciamento: ` + - "``" + + 'Insira um dos seguintes comandos para que seja efetuado o gerenciamento: ' + + '``' + validOptions + - "``" + '``' ) .setTimestamp(); const error2 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) .setDescription( - `Este comando ainda não pode ser ativado. Desculpe pelo incoveniente.` + 'Este comando ainda não pode ser ativado. Desculpe pelo incoveniente.' ) .setTimestamp(); - if (!message.member.hasPermission("MANAGE_GUILD")) + if (!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send(nopermission); if (!args || !args[0]) return message.channel.send(error1); @@ -62,11 +65,11 @@ exports.run = async (aruna, message, args) => { const command = args[0].toLowerCase(); - if (command === "rank") { + if (command === 'rank') { guild.verify = guild.rankEnable; - } else if (command === "ticket") { + } else if (command === 'ticket') { guild.verify = guild.ticketEnable; - } else if (command === "autoRole" || command === "autorole") { + } else if (command === 'autoRole' || command === 'autorole') { guild.verify = guild.autoRole; } @@ -85,14 +88,14 @@ exports.run = async (aruna, message, args) => { ) .setTimestamp(); - const dbcommand = await database.Commands.findOne({ name: `${command}` }); + const dbcommand = await database.Comandos.findOne({ name: `${command}` }); - if (!dbcommand || dbcommand.public !== true) + if (!dbcommand || dbcommand.public !== true && user.SUPER !== true) return message.channel.send(error2); - if (!args[1] || args[1] !== "ativar" && args[1] !== "desativar" && args[1] !== "enable" && args[1] !== "disable") { + if (!args[1] || args[1] !== 'ativar' && args[1] !== 'desativar' && args[1] !== 'enable' && args[1] !== 'disable') { if (guild.verify === false) { return message.channel.send(no); } else { @@ -100,53 +103,55 @@ exports.run = async (aruna, message, args) => { } } - const todo = args[1].toLowerCase() + const todo = args[1].toLowerCase(); const ativo = new Discord.RichEmbed() .setColor([0, 255, 0]) .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Sucesso!`) + .setFooter('Sucesso!') .setDescription(`O comando \`${command}\` foi ativado com sucesso!`) .setTimestamp(); const inativo = new Discord.RichEmbed() .setColor([0, 255, 0]) .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Sucesso!`) + .setFooter('Sucesso!') .setDescription(`O comando \`${command}\` foi desativado com sucesso!`) .setTimestamp(); - if (todo == "ativar" && guild.verify === false || todo == "enable" && guild.verify === true) { - if (command === "rank") { + if (todo == 'ativar' && guild.verify === false || todo == 'enable' && guild.verify === true) { + if (command === 'rank') { guild.rankEnable = true; guild.save(); - } else if (command === "ticket") { + } else if (command === 'ticket') { + const { activeticket } = require('../Utils'); + activeticket.run(aruna, message); guild.ticketEnable = true; guild.save(); - } else if (command === "autoRole" || command === "autorole") { + } else if (command === 'autoRole' || command === 'autorole') { guild.autoRole = true; guild.save(); } return message.channel.send(ativo); - } else if(guild.verify === false) return message.channel.send(yes); + } else if (guild.verify === false) return message.channel.send(yes); - if (todo == "desativar" && guild.verify === true || todo == "disable" && guild.verify === true) { - if (command === "rank") { + if (todo == 'desativar' && guild.verify === true || todo == 'disable' && guild.verify === true) { + if (command === 'rank') { guild.rankEnable = false; guild.save(); - } else if (command === "ticket") { + } else if (command === 'ticket') { guild.ticketEnable = false; guild.save(); - } else if (command === "autoRole" || command === "autorole") { + } else if (command === 'autoRole' || command === 'autorole') { guild.autoRole = false; guild.save(); } return message.channel.send(inativo); - } else if(guild.verify === true) return message.channel.send(no); + } else if (guild.verify === true) return message.channel.send(no); }; exports.config = { - name: "config", - aliases: ["configurar", "configurações"], - category: `⚙️ Configurações` + name: 'config', + aliases: ['configurar', 'configurações'], + category: '⚙️ Configurações' }; diff --git a/Commands/dice.js b/src/Commands/dice.js similarity index 81% rename from Commands/dice.js rename to src/Commands/dice.js index 4d5cf51..2cbc316 100644 --- a/Commands/dice.js +++ b/src/Commands/dice.js @@ -16,49 +16,49 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); +const Discord = require('discord.js'); exports.run = async (aruna, message, args) => { const error1 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir o tipo do dado que devo girar!`) + .setDescription('Você deve inserir o tipo do dado que devo girar!') .setTimestamp(); const error2 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Só aceito até d100.`) + .setDescription('Só aceito até d100.') .setTimestamp(); const error3 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Essa quantidade de dados é absurda!`) + .setDescription('Essa quantidade de dados é absurda!') .setTimestamp(); const error4 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Acho que esse número nem existe!`) + .setDescription('Acho que esse número nem existe!') .setTimestamp(); const error5 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Insira algo como 1d6 por favor`) + .setDescription('Insira algo como 1d6 por favor') .setTimestamp(); const error6 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Todos sabemos que o resultado do d0 é 0!`) + .setDescription('Todos sabemos que o resultado do d0 é 0!') .setTimestamp(); const error7 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`0 não é uma quantidade de dados que se possa girar!`) + .setDescription('0 não é uma quantidade de dados que se possa girar!') .setTimestamp(); if (!args[0]) return message.channel.send(error5); @@ -66,7 +66,7 @@ exports.run = async (aruna, message, args) => { const split = message.content .slice(5) .trim() - .split("d" || "D"); + .split('d' || 'D'); if (!split) return message.channel.send(error5); @@ -82,14 +82,14 @@ exports.run = async (aruna, message, args) => { if (number > 50) return message.channel.send(error3); - if(dice == 0) return message.channel.send(error6) + if (dice == 0) return message.channel.send(error6); - if(number == 0) return message.channel.send(error7) + if (number == 0) return message.channel.send(error7); - var diceStr = "" + var diceStr = ''; - if(number == 1) diceStr = "dado" - else diceStr = "dados" + if (number == 1) diceStr = 'dado'; + else diceStr = 'dados'; const error8 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) @@ -97,18 +97,19 @@ exports.run = async (aruna, message, args) => { .setDescription(`Todos sabemos que o resultado de ${number} ${diceStr} de 1 lado é ${number}!`) .setTimestamp(); - if(dice == 1) return message.channel.send(error8) + if (dice == 1) return message.channel.send(error8); var result = []; var loop = number; + var embed = ''; var idVar = setInterval(() => { if (loop <= 0) { if (number > 1) { - var embed = new Discord.RichEmbed() + embed = new Discord.RichEmbed() .setAuthor( `Resultado dos ${number} dados de ${dice} lados girados por ${message.author.username}`, message.author.avatarURL @@ -117,7 +118,7 @@ exports.run = async (aruna, message, args) => { .setFooter(`Dados de ${message.author.username}`) .setTimestamp(); } else { - var embed = new Discord.RichEmbed() + embed = new Discord.RichEmbed() .setAuthor( `Resultado do dado de ${dice} lados girado por ${message.author.username}`, message.author.avatarURL @@ -143,7 +144,7 @@ exports.run = async (aruna, message, args) => { }, 0,1); }; exports.config = { - name: "dice", - aliases: ["dado"], - category: `🎉 Entretenimento` + name: 'dice', + aliases: ['dado'], + category: '🎉 Entretenimento' }; diff --git a/src/Commands/eval.js b/src/Commands/eval.js new file mode 100644 index 0000000..6a68055 --- /dev/null +++ b/src/Commands/eval.js @@ -0,0 +1,76 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +const { database, config } = require('../../Configs'); + +exports.run = (aruna, message, args) => { + database.Users.findOne({ _id: message.author.id }, function(erro, user) { + + const errored = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setDescription('Você não tem permissão para executar esse comando!') + .setFooter(`Algo deu errado, ${message.author.username}`); + + if (user.SUPER !== true) return message.channel.send(errored); + const util = require('util'); + const code = args.join(' '); + const embed = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setDescription('Você precisa digitar um código!') + .setFooter(`Algo deu errado, ${message.author.username}`); + if (!code) return message.channel.send(embed); + + try { + const ev = eval(code); + let str = util.inspect(ev, { depth: 1 }); + + str = `${str.replace( + new RegExp(`${aruna.token}|${process.env.TOKEN}|${config.token}`, 'g'), + 'Erro! Você não pode exibir esta informação!' + )}`; + + if (str.length > 1800) { + str = str.substr(0, 1800); + str = str + '...'; + } + const embed = new Discord.RichEmbed() + .setAuthor('Console') + .addField( + '(<:uploaduisvgrepocom:637027335173832727>) Entrada', + `\`\`\`js\n${code}\`\`\`` + ) + .addField( + '(<:developmentsvgrepocom:637027334553337896>) Saida', + `\`\`\`js\n${str}\`\`\`` + ) + .setColor([54, 57, 63]); + message.channel.send(embed); + } catch (err) { + message.channel.send(err.stack, { code: 'js' }); + } + }).catch(e => { + console.log(e); + }); +}; + +exports.config = { + name: 'eval', + aliases: [], + category: '🧰 Administração' +}; diff --git a/Commands/flip.js b/src/Commands/flip.js similarity index 70% rename from Commands/flip.js rename to src/Commands/flip.js index 37c934c..ccda752 100644 --- a/Commands/flip.js +++ b/src/Commands/flip.js @@ -16,19 +16,19 @@ along with this program. If not, see . */ -exports.run = async (aruna, message, args) => { - var add = Math.round(Math.random()); - if(add == 0){ - message.channel.send('Cara!') - } else if (add == 1){ - message.channel.send('Coroa!') - } else { - message.reply('Erro!') - } -} +exports.run = async (aruna, message) => { + var add = Math.round(Math.random()); + if (add == 0){ + message.channel.send('Cara!'); + } else if (add == 1){ + message.channel.send('Coroa!'); + } else { + message.reply('Erro!'); + } +}; exports.config = { - name: "flip", - aliases: ["moeda", "girar"], - category: `🎉 Entretenimento` + name: 'flip', + aliases: ['moeda', 'girar'], + category: '🎉 Entretenimento' }; \ No newline at end of file diff --git a/src/Commands/git.js b/src/Commands/git.js new file mode 100644 index 0000000..8d025e6 --- /dev/null +++ b/src/Commands/git.js @@ -0,0 +1,38 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const { emoji } = require('../Utils'); +const pkg = require('../../package.json'); +const Discord = require('discord.js'); + +exports.run = async (aruna, message) => { + const embed = new Discord.RichEmbed().setAuthor( + `Olá, ${message.author.username}` + ) + .setDescription(`Fico feliz que tenha gostado de mim e que queira contribuir com meu desenvolvimento :) +\nPara ver meu repositório e poder ajudar, basta clicar [aqui](${pkg.repository.url}), dar "fork" no repositório, editar minha branch "Unstable" e fazer um pull request no meu repositório principal e pronto! Você já terá contriubuído comigo :) +\nNovamente, obrigado pelo interesse e nos vemos no nosso git!`); + message.channel.send(embed); +}; + +exports.config = { + name: 'github', + aliases: ['git', 'repo', 'repositório', 'repositorio'], + category: `${emoji.robot} Utilidades` +}; \ No newline at end of file diff --git a/Commands/help.js b/src/Commands/help.js similarity index 64% rename from Commands/help.js rename to src/Commands/help.js index 5e699e7..4db9583 100644 --- a/Commands/help.js +++ b/src/Commands/help.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,9 +17,9 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); -const { database } = require("../configs/"); -const emoji = require("../utils/emojis.js"); +const Discord = require('discord.js'); +const { database } = require('../../Configs'); +const { emoji } = require('../Utils'); exports.run = async (aruna, message) => { const embed = new Discord.RichEmbed(message.author); @@ -28,21 +29,26 @@ exports.run = async (aruna, message) => { .setColor([255, 0, 0]) .setFooter(`Algo deu errado, ${message.author.username}`) .setDescription( - `Verifique se tenho permissão para lhe enviar mensagens no privado pois, é por lá que envio os comandos.` + 'Verifique se tenho permissão para lhe enviar mensagens no privado pois, é por lá que envio os comandos.' ) .setTimestamp(); const sucesso = new Discord.RichEmbed() .setColor([0, 255, 0]) .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Comandos Enviados`) + .setFooter('Comandos Enviados') .setDescription( - `Os comandos foram enviados em seu privado com sucesso!` + 'Os comandos foram enviados em seu privado com sucesso!' ) .setTimestamp(); - let guildDB = await database.Guilds.findOne({ _id: message.guild.id }); + const guildDB = await database.Guilds.findOne({ _id: message.guild.id }); + const userDB = await database.Users.findOne({ _id: message.author.id }); - const categories = aruna.commands + var prefix = guildDB.prefix; + + var categories = ''; + + categories = aruna.commands .map(c => c.config.category) .filter((v, i, a) => a.indexOf(v) === i); categories @@ -51,27 +57,32 @@ exports.run = async (aruna, message) => { const commands = aruna.commands .filter(c => c.config.category === category) .sort((a, b) => a.config.name.localeCompare(b.config.name)) - .map(c => guildDB.prefix + c.config.name) - .join(", "); - embed.addField(`${category}`, "```" + commands + "```", false); - embed.setColor("#004080"); + .map(c => prefix + c.config.name) + .join(', '); + if (category == '🧰 Administração' && userDB.SUPER == false) { + null; + } else { + embed.addField(`${category}`, '```' + commands + '```', false); + } + embed.setColor('#004080'); embed.setAuthor( `${aruna.user.username}`, `${aruna.user.displayAvatarURL}` ); - embed.setFooter("Desenvolvida por Lobo Metalurgico#7237"); + embed.setFooter(`Comando Solicitado por ${message.author.username}#${message.author.discriminator}`, message.author.avatarURL); embed.setTimestamp(); }); message.channel.send(sucesso).then(msg => { message.author.send(embed).catch(err => { + console.log(err); msg.edit(error1); }); }); }; exports.config = { - name: "help", - aliases: ["ajuda", "comandos", "commands"], + name: 'help', + aliases: ['ajuda', 'comandos', 'commands'], category: `${emoji.robot} Utilidades` }; diff --git a/Commands/invite.js b/src/Commands/invite.js similarity index 75% rename from Commands/invite.js rename to src/Commands/invite.js index 9dce203..edf4e7c 100644 --- a/Commands/invite.js +++ b/src/Commands/invite.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,22 +17,22 @@ along with this program. If not, see . */ -const emoji = require("../utils/emojis.js"); -const Discord = require("discord.js"); +const { emoji } = require('../Utils'); +const { links } = require('../../Configs'); +const Discord = require('discord.js'); exports.run = async (aruna, message) => { const embed = new Discord.RichEmbed().setAuthor( `Olá, ${message.author.username}` ) .setDescription(`Fico feliz que tenha gostado de mim e queira me adicionar :) -\nPara isso, basta clicar [aqui]( -https://discordapp.com/oauth2/authorize?client_id=593303574725787657&scope=bot&permissions=2146954751), selecionar o servidor na lista, confirmar o reCaptcha e pronto, eu estarei em seu servidor! +\nPara isso, basta clicar [aqui](${links.invites[0]}), selecionar o servidor na lista, confirmar o reCaptcha e pronto! Eu estarei em seu servidor! \nNovamente, obrigado pelo interesse e nos vemos em seu servidor!`); message.channel.send(embed); }; exports.config = { - name: "invite", - aliases: ["convidar", "convite"], + name: 'invite', + aliases: ['convidar', 'convite'], category: `${emoji.robot} Utilidades` }; diff --git a/src/Commands/kick.js b/src/Commands/kick.js new file mode 100644 index 0000000..4cd322a --- /dev/null +++ b/src/Commands/kick.js @@ -0,0 +1,118 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +// eslint-disable-next-line no-unused-vars +const { date } = require('../Utils'); +const dateFormat = require('dateformat'); +const now = new Date(); + +exports.run = async (aruna, message, args) => { + + const kuser = await aruna.fetchUser(message.mentions.users.first() || args[0]); + + const error1 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você não possui a permissão de `Expulsar Membros`!') + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Eu não possuo a permissão de `Expulsar Membros`!') + .setTimestamp(); + + const error3 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você deve inserir um usuário para ser punido!') + .setTimestamp(); + const error4 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Você não pode banir ${kuser.username} pois este é o(a) dono(a) do servidor!`) + .setTimestamp(); + const error5 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Você não pode banir este usuário pois seu cargo é igual ou inferior ao de ${kuser.username}.`) + .setTimestamp(); + const error6 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Eu não posso banir este usuário pois meu cargo é igual ou inferior ao de ${kuser.username}`) + .setTimestamp(); + const error7 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Infelizmente não sei informar qual o erro. Sinto muito ${message.author.username} :(`) + .setTimestamp(); + + if (!message.member.hasPermission('KICK_MEMBERS')) + return message.channel.send(error1); + if (!message.guild.members.get(aruna.user.id).hasPermission('KICK_MEMBERS')) + return message.channel.send(error2); + + if (!kuser) return message.channel.send(error3); + + const guildBuser = message.guild.member( + message.mentions.users.first() || message.guild.members.get(args[0]) + ); + + if (guildBuser) { + if (message.guild.owner.id == kuser.id) + return message.channel.send(error4); + if (guildBuser.highestRole.position >= message.guild.members.get(message.author.id).highestRole.position && message.guild.owner.id !== message.author.id) + return message.channel.send(error5); + if (guildBuser.highestRole.position >= message.guild.members.get(aruna.user.id).highestRole.position) + return message.channel.send(error6); + } + + var reason = ''; + if (!args.join(' ').slice(19)) { + reason = `Punido por: ${message.author.username}`; + } else { + reason = + `Punido por: ${message.author.username} com o Motivo: ` + + args.join(' ').slice(19); + } + + const embed = new Discord.RichEmbed() + .setAuthor('Expulsão Efetuada com Sucesso!') + .setDescription(`Expulsão efetuada por ${message.author.username}`) + .addField('Usuário Expulso: ', `${kuser} id ${kuser.id}`, false) + .addField('Expulso por: ', `<@${message.author.id}>`, false) + .addField('Data de Expulsão: ', dateFormat(now, 'dd/mm/yyyy "às" HH:MM:ss'), false) + .addField('Motivo: ', `${reason}`, false) + .setTimestamp(); + + message.channel.send(embed).then(async msg => { + await message.guild.ban(kuser, reason).catch(err => { + console.log(err); + msg.edit(error7); + }); + }); +}; + +exports.config = { + name: 'kickar', + aliases: ['kick', 'expulsar'], + category: '👮‍♂️ Moderação' +}; \ No newline at end of file diff --git a/src/Commands/maintenance.js b/src/Commands/maintenance.js new file mode 100644 index 0000000..9900c36 --- /dev/null +++ b/src/Commands/maintenance.js @@ -0,0 +1,20 @@ +/* eslint-disable no-unused-vars */ +const Discord = require('discord.js'); +const { database, config } = require('../../Configs'); + +exports.run = (aruna, message, args) => { + const user = database.Users.findOne({ _id: message.author.id }); + + const errored = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setDescription('Você não tem permissão para executar esse comando!') + .setFooter(`Algo deu errado, ${message.author.username}`); + + if (user.SUPER !== true) return message.channel.send(errored); +}; + +exports.config = { + name: 'manutenção', + aliases: [], + category: '🧰 Administração' +}; \ No newline at end of file diff --git a/Commands/ping.js b/src/Commands/ping.js similarity index 71% rename from Commands/ping.js rename to src/Commands/ping.js index ee2a288..becf0c9 100644 --- a/Commands/ping.js +++ b/src/Commands/ping.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,27 +17,27 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); -const emoji = require("../utils/emojis.js"); +const Discord = require('discord.js'); +const { emoji } = require('../Utils'); exports.run = async (aruna, message) => { - let embed = new Discord.RichEmbed() + const embed = new Discord.RichEmbed() .setAuthor(`${aruna.user.username}`, `${aruna.user.displayAvatarURL}`) - .setColor("#f5ebeb") - .setDescription(`Calculando...`); + .setColor('#f5ebeb') + .setDescription('Calculando...'); message.channel.send(embed).then(async msg => { - let latencia = Math.round(message.createdTimestamp); - let api = Math.round(aruna.ping); - //let heartbeat = Date.now() - message.createdTimestamp; - let embed2 = new Discord.RichEmbed().setColor("#33def5") + // const latencia = Math.round(message.createdTimestamp); + const api = Math.round(aruna.ping); + // let heartbeat = Date.now() - message.createdTimestamp; + const embed2 = new Discord.RichEmbed().setColor('#33def5') .setDescription(`:hourglass: | Tempo de resposta: **${msg.createdTimestamp - message.createdTimestamp}** ms :satellite: | Api: **${api}** ms`); msg.edit(embed2); }); }; exports.config = { - name: "ping", - aliases: ["pong"], + name: 'ping', + aliases: ['pong'], category: `${emoji.robot} Utilidades` }; diff --git a/Commands/prefix.js b/src/Commands/prefix.js similarity index 79% rename from Commands/prefix.js rename to src/Commands/prefix.js index 51a5936..7900699 100644 --- a/Commands/prefix.js +++ b/src/Commands/prefix.js @@ -16,8 +16,8 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); -const { database, config } = require("../configs"); +const Discord = require('discord.js'); +const { database, config } = require('../../Configs'); exports.run = async (aruna, message, args) => { const server = await database.Guilds.findOne({ _id: message.guild.id }); @@ -25,28 +25,28 @@ exports.run = async (aruna, message, args) => { const nopermission = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você não possui a permissão de \`Gerenciar Servidor\``) + .setDescription('Você não possui a permissão de `Gerenciar Servidor`') .setTimestamp(); const error = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setDescription( - `Insira se você deseja definir um prefixo (set) ou se deseja voltar ao padrão (remove).` + 'Insira se você deseja definir um prefixo (set) ou se deseja voltar ao padrão (remove).' ) .setTimestamp(); const error2 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Você deve inserir o prefixo desejado!`) + .setDescription('Você deve inserir o prefixo desejado!') .setTimestamp(); const error3 = new Discord.RichEmbed() .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`O prefixo atual já é o prefixo padrão!`) + .setDescription('O prefixo atual já é o prefixo padrão!') .setTimestamp(); const remove = new Discord.RichEmbed() .setColor([0, 255, 0]) .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Sucesso!`) + .setFooter('Sucesso!') .setDescription( `Prefixo redefinido para \`${config.prefix}\` com sucesso!` ) @@ -54,19 +54,19 @@ exports.run = async (aruna, message, args) => { const definido = new Discord.RichEmbed() .setColor([0, 255, 0]) .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Sucesso!`) + .setFooter('Sucesso!') .setDescription(`Prefixo definido para \`${args[1]}\` com sucesso!`) .setTimestamp(); - if (!message.member.hasPermission("MANAGE_GUILD")) + if (!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send(nopermission); if (!args[0]) return message.channel.send(error); - if (args[0] !== "set" && args[0] !== "remove") + if (args[0] !== 'set' && args[0] !== 'remove') return message.channel.send(error); - if (args[0] === "remove") { + if (args[0] === 'remove') { if (server.prefix === config.prefix) return message.channel.send(error3); @@ -75,7 +75,7 @@ exports.run = async (aruna, message, args) => { message.channel.send(remove); } - if (args[0] === "set") { + if (args[0] === 'set') { if (!args[1]) return message.channel.send(error2); server.prefix = args[1]; @@ -85,7 +85,7 @@ exports.run = async (aruna, message, args) => { }; exports.config = { - name: "prefix", - aliases: ["prefixo", "pref"], - category: `⚙️ Configurações` + name: 'prefix', + aliases: ['prefixo', 'pref'], + category: '⚙️ Configurações' }; diff --git a/Commands/rank.js b/src/Commands/rank.js similarity index 75% rename from Commands/rank.js rename to src/Commands/rank.js index c98a4ff..86c4633 100644 --- a/Commands/rank.js +++ b/src/Commands/rank.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,9 +17,9 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); -const { database } = require("../configs"); -const utils = require("../utils/utils.js"); +const Discord = require('discord.js'); +const { database } = require('../../Configs'); +const { utils } = require('../Utils'); exports.run = async (aruna, message, args) => { const guild = await database.Guilds.findOne({ _id: message.guild.id }); @@ -49,27 +50,29 @@ exports.run = async (aruna, message, args) => { let level = rank.level; if (level === null) level = 0; - const embed2 = new Discord.RichEmbed() + /* + const embed2 = new Discord.RichEmbed() .setColor([54, 57, 63]) - .setAuthor("RANK: " + userid.user.username, userid.user.avatarURL) - .addField("Nível", level, true) - .addField("Xp Atual", xp, true) + .setAuthor('RANK: ' + userid.user.username, userid.user.avatarURL) + .addField('Nível', level, true) + .addField('Xp Atual', xp, true) .setTimestamp(); + */ - let need = utils.need(level); + const need = utils.need(level); const embed = new Discord.RichEmbed() .setColor([54, 57, 63]) - .setAuthor("RANK: " + userid.user.username, userid.user.avatarURL) - .addField("Nível", level, true) - .addField("Xp Atual", xp, true) - .addField("XP Necessário", need, true) + .setAuthor('RANK: ' + userid.user.username, userid.user.avatarURL) + .addField('Nível', level, true) + .addField('Xp Atual', xp, true) + .addField('XP Necessário', need, true) .setTimestamp(); message.channel.send(embed); }; exports.config = { - name: "rank", - aliases: ["perfil"], - category: `🎉 Entretenimento` + name: 'rank', + aliases: ['perfil'], + category: '🎉 Entretenimento' }; diff --git a/Commands/say.js b/src/Commands/say.js similarity index 91% rename from Commands/say.js rename to src/Commands/say.js index 5571aad..3e81dbd 100644 --- a/Commands/say.js +++ b/src/Commands/say.js @@ -18,13 +18,13 @@ exports.run = async (aruna, message, prefix, comando) => { var content = message.content.slice(comando.length).trim(); - var content = content.slice(4).trim(); + content = content.slice(4).trim(); await message.delete(); await message.channel.send(content); }; exports.config = { - name: "say", + name: 'say', aliases: [], - category: `🎉 Entretenimento` + category: '🎉 Entretenimento' }; \ No newline at end of file diff --git a/src/Commands/serverinfo.js b/src/Commands/serverinfo.js new file mode 100644 index 0000000..56c2ccf --- /dev/null +++ b/src/Commands/serverinfo.js @@ -0,0 +1,116 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +// eslint-disable-next-line no-unused-vars +const { emoji, date } = require('../Utils'); +const { database } = require('../../Configs'); +const dateFormat = require('dateformat'); + +const status = { + online: `${emoji.online} Online`, + idle: `${emoji.idle} Ausente`, + dnd: `${emoji.dnd} Não Pertube`, + offline: `${emoji.offline} Offline` +}; + +exports.run = async (aruna, message) => { + const guildDB = await database.Guilds.findOne({ _id: message.guild.id }); + var pType = ''; + + if (guildDB.isPartner == true && guildDB.isPremium == true){ + pType = emoji.partnerPlus; + } else if (guildDB.isPartner == true) { + pType = emoji.partner; + } else if (guildDB.isPremium == true){ + pType = emoji.premium; + } else { + pType = emoji.discord; + } + + var region = message.guild.region; + + if (region === 'brazil') region = ':flag_br: Brasil'; + if (region === 'europe') region = ' :flag_eu: Europa'; + if (region === 'hongkong') region = ':flag_hk: Hong Kong'; + if (region === 'india') region = ':flag_in: India'; + if (region === 'japan') region = ':flag_jp: Japão'; + if (region === 'russia') region = ':flag_ru: Rússia'; + if (region === 'singapore') region = ':flag_br: Singapura'; + if ( + region === 'us-central' || + region === 'us-east' || + region === 'us-south' || + region === 'us-west' + ) + region = ':flag_us: Estados Unidos'; + + const embed = new Discord.RichEmbed() + .setColor([0, 23, 132]) + .setTitle(`${pType} ${message.guild.name}`) + .setThumbnail( + `https://cdn.discordapp.com/icons/${message.guild.id}/${message.guild.icon}.png` + ) + .addField(':computer: ID da Guild', message.guild.id, true) + .addField(':crown: Dono', `${message.guild.owner}`, true) + .addField(':earth_americas: Região', `${region}`, true) + .addField(':date: Data de Criação', `${dateFormat(message.guild.createdTimestamp, 'dd/mm/yyyy "às" HH:MM:ss')}`, true) + .addField(':desktop: Shard ID', aruna.shard.id, true) + .addField(':dizzy: Entrei Em', dateFormat(message.guild.member(aruna.user).joinedTimestamp, 'dd/mm/yyyy "às" HH:MM:ss'), true) + .addField( + `:speech_balloon: Canais (${message.guild.channels.filter( + chn => chn.type === 'text' + ).size + + message.guild.channels.filter(chn => chn.type === 'voice').size})`, + `:pencil: Texto: ${ + message.guild.channels.filter(chn => chn.type === 'text').size + } \n :speaking_head: Voz: ${ + message.guild.channels.filter(chn => chn.type === 'voice').size + }`, + false + ) + .addField( + `:busts_in_silhouette: ${message.guild.members.size} Membros (Sendo ${message.guild.members.filter(m => m.user.bot).size} Bots e ${message.guild.members.filter(m => !m.user.bot).size} Humanos)`, + `${status['online']}: ${ + message.guild.members.filter(m => m.presence.status === 'online').size + }\n${status['idle']}: ${ + message.guild.members.filter(m => m.presence.status === 'away').size + }\n${status['dnd']}: ${ + message.guild.members.filter(m => m.presence.status === 'dnd').size + }\n${status['offline']}: ${ + message.guild.members.filter(m => m.presence.status === 'offline').size + }`, + false + ) + .addField(`${emoji.nitro} Informações sobre Impulsos`, + `${emoji.nitro} » Nível do Impulso: ${message.guild.premiumTier} + ${emoji.nitro} » Quantidade de Impulsos: ${message.guild.premiumSubscriptionCount}`, + false + ) + .setFooter(`Comando Solicitado por ${message.author.username}#${message.author.discriminator}`, message.author.avatarURL) + .setTimestamp(); + + message.reply(embed); +}; + +exports.config = { + name: 'serverinfo', + aliases: ['si'], + category: `${emoji.robot} Utilidades` +}; diff --git a/src/Commands/ship.js b/src/Commands/ship.js new file mode 100644 index 0000000..26010e7 --- /dev/null +++ b/src/Commands/ship.js @@ -0,0 +1,104 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +const Jimp = require('jimp'); + +exports.run = async (client, message) => { + const error1 = new Discord.RichEmbed() + .setAuthor('Oops!', message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você deve mencionar um segundo usuário!') + .setTimestamp(); + + var porcentagem = 0; + var aleatorio = Math.round(Math.random() * 100); + + porcentagem = aleatorio; + + const user1 = message.mentions.users.first() || message.author; + const user2 = message.mentions.users.array()[1]; + + if (!user2) return message.channel.send(error1); + + const richard_lindu = await Jimp.read(user1.avatarURL); + const richard_dmais = await Jimp.read(user2.avatarURL); + + await richard_lindu.resize(115, 115); + await richard_dmais.resize(115, 115); + + const eu_amo_o_richard = await Jimp.read( + 'https://cdn.discordapp.com/attachments/486016051851689994/509883077707694100/ships.png' + ); + + await eu_amo_o_richard.composite(richard_lindu, 1, 1); + await eu_amo_o_richard + .composite(richard_dmais, 229, 1) + .write(`./tmp/img/${user1.id}${user2.id}.png`); + + const aido = new Array(); + aido[1] = 'Msg 1'; + aido[2] = 'Msg 2'; + + var mensagem = + porcentagem <= 10 + ? `${porcentagem}% [----------] Nada é impossível, apenas improvável.` + : porcentagem <= 20 + ? `${porcentagem}% [█---------] Um dia talvez. ` + : porcentagem <= 30 + ? `${porcentagem}% [██--------] Bem, olhando por esse ângulo... ` + : porcentagem <= 40 + ? `${porcentagem}% [███-------] Possível, é. Díficil? De fato.` + : porcentagem <= 50 + ? `${porcentagem}% [████------] Numa galáxia não tão distante...` + : porcentagem <= 60 + ? `${porcentagem}% [█████-----] Até que formariam um belo casal. ` + : porcentagem <= 70 + ? `${porcentagem}% [██████----] Esse casal está perto de ser muito bom! ` + : porcentagem <= 80 + ? `${porcentagem}% [███████---] Casal de primeira! ` + : porcentagem <= 90 + ? `${porcentagem}% [████████--] Já poderiam estar casados! 💍 ` + : porcentagem <= 100 + ? `${porcentagem}% [█████████-] Casal perfeito, só um terremoto os separa! 💍` + : `${porcentagem}% [██████████] Casal perfeito, ninguém os separa! 💍`; + + console.log(porcentagem); + console.log(mensagem); + message.channel.send({ + embed: { + description: `${user1} + ${user2}\n\n**${mensagem}**`, + color: 111119, + image: { + url: 'attachment://file.jpg' + } + }, + files: [ + { + attachment: './tmp/img/' + user1.id + user2.id + '.png', + name: 'file.jpg' + } + ] + }); +}; + +exports.config = { + name: 'ship', + aliases: ['shipar', 'shipp', 'casal'], + category: '🎉 Entretenimento' +}; diff --git a/Commands/suporte.js b/src/Commands/suporte.js similarity index 90% rename from Commands/suporte.js rename to src/Commands/suporte.js index 037cb57..1db4be4 100644 --- a/Commands/suporte.js +++ b/src/Commands/suporte.js @@ -16,8 +16,8 @@ along with this program. If not, see . */ -const emoji = require("../utils/emojis.js"); -const Discord = require("discord.js"); +const Discord = require('discord.js'); +const { emoji } = require('../Utils'); exports.run = async (aruna, message) => { const embed = new Discord.RichEmbed().setAuthor( @@ -30,7 +30,7 @@ https://discord.gg/NqbBgEf) e venha conversar com meus desenvolvedores!`); }; exports.config = { - name: "suporte", - aliases: ["support"], + name: 'suporte', + aliases: ['support'], category: `${emoji.robot} Utilidades` }; diff --git a/src/Commands/ticket.js b/src/Commands/ticket.js new file mode 100644 index 0000000..e3b94d6 --- /dev/null +++ b/src/Commands/ticket.js @@ -0,0 +1,97 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +const { database } = require('../../Configs'); +const { emoji } = require('../Utils'); + +exports.run = async (aruna, message, args) => { + const user = await database.Users.findOne({ _id: message.author.id }); + const guild = await database.Guilds.findOne({ _id: message.guild.id }); + const ticket = await database.Tickets.findOne({ + _id: `${message.author.id}-${message.guild.id}` + }); + + const prefix = guild.prefix; + + const noperm = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Este comando não está disponível no momento!') + .setTimestamp(); + + const error = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription( + 'Insira `criar` para criar um ticket ou `fechar` para fechar o ticket.' + ) + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription( + `Este comando não está ativado em seu servidor. Peça para algum ADM ativar com o comando \`${prefix}config\`` + ) + .setTimestamp(); + const error4 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription( + `Você não possui tickets abertos. Para abrir, use o comando \`\`${guild.prefix}ticket criar\`\`` + ) + .setTimestamp(); + + if (user.SUPER !== true) return message.channel.send(noperm); + + if (guild.ticketEnable !== true) return message.channel.send(error2); + + if (!args[0]) return message.channel.send(error); + + const mode = args[0].toLowerCase(); + + if (mode == 'criar' || mode == 'create' || mode == 'new') { + if (ticket) { + const error3 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription( + `Você já possui um ticket aberto! Para visualiza-lo, acesse o canal <#${ticket.channel}>.` + ) + .setTimestamp(); + return message.channel.send(error3); + } + + // eslint-disable-next-line no-unused-vars + const m = await message.channel.send( + 'Criando Ticket. Por favor, aguarde um momento...' + ); + + + } else if (mode == 'fechar' || mode == 'close') { + if (!ticket) return message.channel.send(error4); + } else return message.channel.send(error); +}; + +exports.config = { + name: 'ticket', + aliases: [], + category: `${emoji.robot} Utilidades` +}; diff --git a/src/Commands/unban.js b/src/Commands/unban.js new file mode 100644 index 0000000..b7c94bd --- /dev/null +++ b/src/Commands/unban.js @@ -0,0 +1,84 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); + +exports.run = async (aruna, message, args) => { + + const unbuser = await aruna.fetchUser(args[0]); + + const error1 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você não possui a permissão de `Banir Membros`!') + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Eu não possuo a permissão de `Banir Membros`!') + .setTimestamp(); + + const error3 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription('Você deve inserir o id do usuário que será desbanido!') + .setTimestamp(); + const error4 = new Discord.RichEmbed() + .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + .setFooter(`Algo deu errado, ${message.author.username}`) + .setDescription(`Infelizmente não sei informar qual o erro. Sinto muito ${message.author.username} :(`) + .setTimestamp(); + + if (!message.member.hasPermission('BAN_MEMBERS')) + return message.channel.send(error1); + if (!message.guild.members.get(aruna.user.id).hasPermission('BAN_MEMBERS')) + return message.channel.send(error2); + + if (!unbuser) return message.channel.send(error3); + + var reason = ''; + if (!args.join(' ').slice(19)) { + reason = `Desbanido por: ${message.author.username}`; + } else { + reason = + `Desbanido por: ${message.author.username} com o Motivo: ` + + args.join(' ').slice(19); + } + + const embed = new Discord.RichEmbed() + .setAuthor('Desbanimento Efetuado!') + .setDescription(`Desbanimento efetuado por ${message.author.username}`) + .addField('Usuário Desbanido: ', `${unbuser.id}`, false) + .addField('Desbanido por: ', `<@${message.author.id}>`, false) + .addField('Motivo: ', `${reason}`, false) + .setTimestamp(); + + message.channel.send(embed).then(async msg => { + await message.guild.unban(unbuser, reason).catch(err => { + console.log(err); + msg.edit(error4); + }); + }); +}; + +exports.config = { + name: 'desbanir', + aliases: ['unban'], + category: '👮‍♂️ Moderação' +}; \ No newline at end of file diff --git a/src/Commands/userinfo.js b/src/Commands/userinfo.js new file mode 100644 index 0000000..b9a09d1 --- /dev/null +++ b/src/Commands/userinfo.js @@ -0,0 +1,158 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +// eslint-disable-next-line no-unused-vars +const { emoji, date } = require('../Utils'); +const Discord = require('discord.js'); +const dateFormat = require('dateformat'); + +exports.run = (aruna, message, args) => { + + const mentionedUser = message.guild.member( + message.mentions.users.first() || + aruna.users.get(args[0]) || + message.author + ); + + const userNickName = + mentionedUser.nickname !== null + ? `${mentionedUser.nickname}` + : 'Sem apelido'; + const userDaysDiscord = Math.round( + Math.abs( + (mentionedUser.user.createdAt.getTime() - new Date().getTime()) / + (24 * 60 * 60 * 1000) + ) + ); + const userDaysGuild = Math.round( + Math.abs( + (mentionedUser.joinedAt.getTime() - new Date().getTime()) / + (24 * 60 * 60 * 1000) + ) + ); + let userStatus; + if (mentionedUser.presence.status === 'dnd') userStatus = 'Não Pertube'; + if (mentionedUser.presence.status === 'idle') userStatus = 'Ausente'; + if (mentionedUser.presence.status === 'stream') userStatus = 'Transmitindo'; + if (mentionedUser.presence.status === 'offline') userStatus = 'Offline'; + if (mentionedUser.presence.status === 'online') userStatus = 'Disponível'; + + let userStatusEmoji; + if (mentionedUser.presence.status === 'dnd') userStatusEmoji = emoji.dnd; + if (mentionedUser.presence.status === 'idle') userStatusEmoji = emoji.idle; + if (mentionedUser.presence.status === 'stream') + userStatusEmoji = emoji.stream; + if (mentionedUser.presence.status === 'offline') + userStatusEmoji = emoji.offline; + if (mentionedUser.presence.status === 'online') + userStatusEmoji = emoji.online; + + let userAdminServer; + if (mentionedUser.hasPermission('ADMINISTRATOR') === true) + userAdminServer = 'Sim'; + if (mentionedUser.hasPermission('ADMINISTRATOR') === false) + userAdminServer = 'Não'; + + let userAvatar = mentionedUser.user.displayAvatarURL; + if (userAvatar.endsWith('.gif')) { + userAvatar = `${mentionedUser.user.displayAvatarURL}?size=2048`; + } + + var stringtime1 = ''; + if (userDaysDiscord == 1) stringtime1 = 'dia'; + else stringtime1 = 'dias'; + + var stringtime2 = ''; + if (userDaysGuild == 1) stringtime2 = 'dia'; + else stringtime2 = 'dias'; + + const premium = message.guild.member(message.author).premiumSinceTimestamp; + var userBoost = ''; + if (premium !== null) { + userBoost = `${emoji.nitro} Impulsionando Desde: ${dateFormat(message.guild.member(message.author).premiumSinceTimestamp, 'dd/mm/yyyy "às" HH:MM:ss')}\n`; + } + const accountCreated = dateFormat(mentionedUser.user.createdTimestamp, 'dd/mm/yyyy "às" HH:MM:ss'); + const joinedIn = dateFormat(mentionedUser.joinedTimestamp, 'dd/mm/yyyy "às" HH:MM:ss'); + + const embed = new Discord.RichEmbed() + .setAuthor(`${mentionedUser.user.username}`, `${userAvatar}`) + .addField('Informações do Usuário', ` + 🙋 **Nome:** \`${mentionedUser.user.username}\` + + ${emoji.menu} **Tag Completa:** \`${mentionedUser.user.tag}\` + + **Id:** \`${mentionedUser.user.id}\` + + ${userStatusEmoji} **Status:** \`${userStatus}\` + + ${emoji.pass} **Criou a Conta Em:** \`${accountCreated}\` (${userDaysDiscord} ${stringtime1} atrás)`, false) + + .addField('Informações do Membro', ` + (${emoji.discord}) **Apelido:** \`${userNickName}\` + + (👮) **É Administrador:** \`${userAdminServer}\` + ${userBoost} + (:date:) **Entrou Em:** \`${joinedIn}\` (${userDaysGuild} ${stringtime2} atrás)`, false) + .setFooter(`Informações Solicitadas por ${message.author.tag}`, message.author.avatarURL) + .setThumbnail(userAvatar) + .setColor('#56eaf5') + .setTimestamp(); + + /* let embed2 = new Discord.RichEmbed() + .setAuthor(`${mentionedUser.user.username}`, `${userAvatar}`) + .addField(`(${emoji.passport}) Permissões`, `${userPerms}`) + .setFooter("Criada pelo Lobo Metalurgico") + .setThumbnail(userAvatar) + .setColor("#56eaf5") + .setTimestamp();*/ + + message.channel.send(embed); + + /* .then(msg => { + msg.react("638067652337729597"); + const collector = msg.createReactionCollector( + (r, u) => + r.emoji.name === "passport" && + (u.id !== aruna.user.id && u.id === message.author.id) + ); + collector.on("collect", r => { + switch (r.emoji.name) { + case "passport": + msg.edit(embed2).then(msg2 => { + msg2.react("⬅"); + const collector2 = msg.createReactionCollector( + (r, u) => + r.emoji.name === "⬅" && + (u.id !== aruna.user.id && u.id === message.author.id) + ); + collector2.on("collect", r => { + switch (r.emoji.name) { + case "⬅": + msg.edit(embed); + } + }); + }); + } + }); + });*/ +}; +exports.config = { + name: 'userinfo', + aliases: ['ui'], + category: `${emoji.robot} Utilidades` +}; diff --git a/events/guildCreate.js b/src/Events/guildCreate.js similarity index 91% rename from events/guildCreate.js rename to src/Events/guildCreate.js index 509d53f..d5a04f1 100644 --- a/events/guildCreate.js +++ b/src/Events/guildCreate.js @@ -16,10 +16,10 @@ along with this program. If not, see . */ -var { database } = require("../configs"); +var { database } = require('../../Configs'); exports.run = async (aruna, guild) => { var saveG = await new database.Guilds({ _id: guild.id }); await saveG.save(); - console.log('New Server Entry! :)') + console.log('New Server Entry! :)'); }; diff --git a/events/guildDelete.js b/src/Events/guildDelete.js similarity index 84% rename from events/guildDelete.js rename to src/Events/guildDelete.js index 6d6c3cd..10feed8 100644 --- a/events/guildDelete.js +++ b/src/Events/guildDelete.js @@ -16,9 +16,9 @@ along with this program. If not, see . */ -var { database } = require("../configs"); +var { database } = require('../../Configs'); exports.run = async (aruna, guild) => { - var saveG = await database.Guilds.findOneAndDelete({ _id: guild.id }); - console.log('Server Removed :(') + await database.Guilds.findOneAndDelete({ _id: guild.id }); + console.log('Server Removed :('); }; \ No newline at end of file diff --git a/events/guildMemberAdd.js b/src/Events/guildMemberAdd.js similarity index 78% rename from events/guildMemberAdd.js rename to src/Events/guildMemberAdd.js index 4db46e0..9cd587a 100644 --- a/events/guildMemberAdd.js +++ b/src/Events/guildMemberAdd.js @@ -16,12 +16,12 @@ along with this program. If not, see . */ -const Discord = require("discord.js"); -var { database } = require("../configs"); +const Discord = require('discord.js'); +var { database } = require('../../Configs'); const serverStatsPrincipal = { - guildID: "660610178009530380", - oldGuildID: "610206821763776522" + guildID: '660610178009530380', + oldGuildID: '610206821763776522' }; exports.run = async (aruna, member) => { @@ -34,19 +34,19 @@ exports.run = async (aruna, member) => { } if (member.guild.id == serverStatsPrincipal.guildID) { - member.addRole(`660612149009448988`, "AutoRole"); + member.addRole('660612149009448988', 'AutoRole'); const isOld = aruna.guilds - .get("610206821763776522") + .get('610206821763776522') .members.get(member.user.id); if (isOld) { - isOld.kick("Entrou no novo Servidor"); + isOld.kick('Entrou no novo Servidor'); } } else if (member.guild.id == serverStatsPrincipal.oldGuildID) { const changingMessage = new Discord.RichEmbed() .setAuthor(`Oops, ${member.user.username}`, member.user.avatarURL) - .setFooter(`Nos Vemos Em Breve :)`) + .setFooter('Nos Vemos Em Breve :)') .setDescription( - "Olá! No momento estamos trocando de servidor. Por favor, peço que entre no nosso novo servidor clicando **[aqui](https://discord.gg/NqbBgEf)** :)" + 'Olá! No momento estamos trocando de servidor. Por favor, peço que entre no nosso novo servidor clicando **[aqui](https://discord.gg/NqbBgEf)** :)' ) .setTimestamp(); member.send(changingMessage); diff --git a/src/Events/message.js b/src/Events/message.js new file mode 100644 index 0000000..f0f95be --- /dev/null +++ b/src/Events/message.js @@ -0,0 +1,156 @@ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const Discord = require('discord.js'); +var { database, config, links } = require('../../Configs'); +const { utils, cooldown } = require('../Utils'); + +exports.run = async (aruna, message) => { + if (message.author.bot) return; + + const emojiError = 'Para meu funcionamento, preciso da permissão de `Usar Emojis Externos`. Por favor, solicite para algum administrador que ative isso para que eu possa funcionar :)'; + const linkError = 'Para meu funcionamento, preciso da permissão de `Enviar Links`. Por favor, solicite para algum administrador que ative isso para que eu possa funcionar :)'; + const dmError = 'Desculpe, mas ainda não funciono em mensagens diretas :('; + + if (message.channel.type == 'dm') { + return message.reply(dmError); + } + + database.Guilds.findOne({ _id: message.guild.id }, function( + servro, + servidor + ) { + database.Users.findOne({ _id: message.author.id }, async function( + erro, + usuario + ) { + if (!servidor) { + console.log('No Server!'); + var saveG = await new database.Guilds({ + _id: message.guild.id + }); + await saveG.save(); + servidor = await database.Guilds.findOne({ _id: message.guild.id }); + } + + if (!usuario) { + console.log('No User!'); + var saveU = await new database.Users({ _id: message.author.id }); + await saveU.save(); + usuario = await database.Users.findOne({ _id: message.author.id }); + } + + var prefix = servidor.prefix || config.prefix; + + const mention = [`<@${aruna.user.id}>`, `<@!${aruna.user.id}>`]; + + mention.find(mention => { + if (!message.guild.members.get(aruna.user.id).hasPermission('USE_EXTERNAL_EMOJIS')) { + return message.reply(emojiError); + } else if (!message.guild.members.get(aruna.user.id).hasPermission('EMBED_LINKS')) { + return message.reply(linkError); + } else if (message.content === mention) { + const embed = new Discord.RichEmbed() + .setAuthor('Quem me chama?') + .setDescription( + `Ah, olá ${message.author.username}, como está? Eu sou a ${aruna.user.username}.\n + Bom, caso queira saber minha função, ela é ajudar seu servidor de várias formas criativas e diferentes!\n + Talvez você não saiba meu prefixo neste servidor e por isso me chamou. Se essa for sua dúvida, ele é \`\`${prefix}\`\`.\n\n + Se você tiver alguma sugestão ou tiver encontrado algum parafuso meu perdido por aí, entre no meu [servidor de suporte](${links.supportServers[0]}) para falar com meu criador.\n\n + Se quiser me adicionar em seu servidor, basta clicar [aqui](${links.invites[0]})!\n\n + E por fim, obrigada por me chamar. Foi ótimo te explicar quem sou <3` + ) + .setColor('#8400ff') + .setTimestamp(); + return message.channel.send(embed); + } + }); + + if (servidor.rankEnable === true) { + const rank = await database.Rank.findOne({ + _id: `${message.author.id}-${message.guild.id}` + }); + + if (!rank) { + var saveR = new database.Rank({ + _id: `${message.author.id}-${message.guild.id}`, + user: message.author.id, + xp: 0, + level: 0, + guild: message.guild.id + }); + + saveR.save(); + } + const db = database; + + const xpsystem = require('../utils/rankSystem.js'); + xpsystem.run(aruna, message, db, cooldown, utils, Discord); + } + + if (message.content.startsWith(prefix)) { + if (message.content === prefix) return; + + const args = message.content + .slice(prefix.length) + .trim() + .split(/ +/g); + const comando = args.shift().toLowerCase(); + const ma = message.content.split(' '); + const cmd = ma[0]; + const commandFile = + aruna.commands.get(cmd.slice(prefix.length).toLowerCase()) || + aruna.commands.get(aruna.aliases.get(cmd.slice(prefix.length).toLowerCase())); + + if (commandFile) { + if (!message.guild.members.get(aruna.user.id).hasPermission('USE_EXTERNAL_EMOJIS')) { + return message.reply(emojiError); + } else if (!message.guild.members.get(aruna.user.id).hasPermission('EMBED_LINKS')) { + return message.reply(linkError); + } + commandFile.run(aruna, message, args, prefix, comando); + } else if (!commandFile) { + const alts = + aruna.commands + .filter(c => + c.config.name.startsWith(cmd.slice(prefix.length).toLowerCase()) + ) + .map(a => '`' + a.config.name + '`') + .join(', ') || undefined; + + if (alts !== undefined) { + message.reply( + 'Oops, não encontrei o comando ' + + '`' + + comando + + '`' + + '. Você quis dizer algo como ' + + alts + + '?' + ); + } + } + } + }).catch(e => { + console.log(e); + }); + }).catch(e => { + console.log(e); + }); +}; diff --git a/src/Events/ready.js b/src/Events/ready.js new file mode 100644 index 0000000..9bc5ea7 --- /dev/null +++ b/src/Events/ready.js @@ -0,0 +1,124 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable max-len */ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +const pkg = require('../../package.json'); +const chalk = require('chalk'); +const { apiKeys, database } = require('../../Configs'); + +exports.run = async (aruna) => { + log('Conectado!'); + + let totalSeconds = (aruna.uptime / 1000); + const days = Math.floor(totalSeconds / 86400); + const hours = Math.floor(totalSeconds / 3600); + totalSeconds %= 3600; + const minutes = Math.floor(totalSeconds / 60); + const seconds = Math.floor(totalSeconds % 60); + + var uptime = ''; + + if (days >= 1) { + uptime = `${days}d, ${hours}h, ${minutes}m`; + } else if (hours >= 1) { + uptime = `${hours}h, ${minutes}m, ${seconds}s`; + } else if (minutes >= 1) { + uptime = `${minutes}m, ${seconds}s`; + } else { + uptime = `${seconds}s`; + } + + const status = [ + { + name: 'Muppet Show', + type: 'watching' + }, + { + name: 'M83 - Midnight City', + type: 'listening' + }, + { + name: `Faz ${uptime}`, + type: 'playing' + }, + { + name: 'Netflix', + type: 'watching' + }, + { + name: `Versão ${pkg.version}`, + type: 'streaming', + url: 'https://www.twitch.tv/lobometalurgico' + }, + { + name: `Seu Shard é o ${aruna.shard.id}!`, + type: 'watching' + } + ]; + async function setStatus() { + var maintenance = await database.System.findOne({ _id: 1 }); + var inMaintenance = maintenance.maintenance; + if (inMaintenance === true){ + aruna.user.setPresence({ game: { name: `🚫AVISO: MANUTENÇÃO PROGRAMADA PARA ${maintenance.date}! FICAREI INDISPONÍVEL POR ${maintenance.time}!🚫`}}); + } else { + const randomStatus = status[Math.floor(Math.random() * status.length)]; + aruna.user.setPresence({ game: randomStatus }); + } + } + setStatus(); + setInterval(() => { + setStatus(); + }, 15000); + + function logPrefix() { + return `${chalk.gray('[')}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : 'ARUNA'}${chalk.gray(']')}`; + } + + function log(...a) { + return console.log(logPrefix(), ...a); + } + + function warn(...a) { + return console.warn(logPrefix(), chalk.yellow(...a)); + } + + function error(...a) { + return console.error(logPrefix(), chalk.red(...a)); + } + + function debug(...a) { + return console.debug(logPrefix(), chalk.magenta(...a)); + } + + function isSharded() { + return !!aruna.shard; + } + + if (apiKeys) { + const client = aruna; + const dbots = require('dbots'); + const poster = new dbots.Poster({ + client, + apiKeys, + clientLibrary: 'discord.js' + }); + + poster.startInterval(); + } +}; \ No newline at end of file diff --git a/utils/activeTicket.js b/src/Utils/activeTicket.js similarity index 67% rename from utils/activeTicket.js rename to src/Utils/activeTicket.js index 0d52d74..874c9e6 100644 --- a/utils/activeTicket.js +++ b/src/Utils/activeTicket.js @@ -1,3 +1,4 @@ +/* eslint-disable no-redeclare */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,23 +17,23 @@ along with this program. If not, see . */ -const { database } = require("../configs"); +const { database } = require('../../Configs'); -exports.run = async (aruna, message, args) => { +exports.run = async (aruna, message) => { const guild = await database.Guilds.findsOne({ _id: message.guild.id }); if (guild.ticketSupportID == null) { try { var supportRole = await message.guild .createRole({ - name: "Suporte", - permissions: ["VIEW_CHANNEL", "SEND_MESSAGES", "CONNECT", "SPEAK"] + name: 'Suporte', + permissions: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'] }) .then(async roleId => { await message.channel.send( - "Foi criado o cargo <@&" + + 'Foi criado o cargo <@&' + roleId.id + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." + '> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente.' ); guild.ticketSupportID = roleId.id; }); @@ -45,14 +46,14 @@ exports.run = async (aruna, message, args) => { try { var supportRole = await message.guild .createRole({ - name: "Suporte", - permissions: ["VIEW_CHANNEL", "SEND_MESSAGES", "CONNECT", "SPEAK"] + name: 'Suporte', + permissions: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'] }) .then(async roleId => { await message.channel.send( - "Foi criado o cargo <@&" + + 'Foi criado o cargo <@&' + roleId.id + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." + '> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente.' ); guild.ticketSupportID = roleId.id; }); @@ -61,15 +62,15 @@ exports.run = async (aruna, message, args) => { } } } - let ticketCategory = message.guild.channels.find(`name`, "Tickets"); + let ticketCategory = message.guild.channels.find('name', 'Tickets'); if (!ticketCategory) { try { - ticketCategory = await message.guild.createChannel(`Tickets`, "category"); + ticketCategory = await message.guild.createChannel('Tickets', 'category'); message.channel.send( - "Foi criado a categoria " + + 'Foi criado a categoria ' + ticketCategory.name + - " como categoria que conterá os tickets. Seu nome não pode ser alterado." + ' como categoria que conterá os tickets. Seu nome não pode ser alterado.' ); } catch (e) { console.log(e.stack); @@ -79,15 +80,15 @@ exports.run = async (aruna, message, args) => { if (guild.ticketLogID == null) { try { var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ + .createChannel('ticket-log', 'text', [ { id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] + deny: ['VIEW_CHANNEL'] }, { id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] + allow: ['VIEW_CHANNEL'], + deny: ['SEND_MESSAGES'] } ]) .then(async ticketId => { @@ -96,9 +97,9 @@ exports.run = async (aruna, message, args) => { await ticketId.setParent(ticketCategory); }); message.channel.send( - "Foi criado o canal " + + 'Foi criado o canal ' + ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." + ' como canal de log dos tickets. Seu nome pode ser alterado livremente.' ); } catch (e) { console.log(e.stack); @@ -108,15 +109,15 @@ exports.run = async (aruna, message, args) => { if (!aruna.channels.get(ticketLog)) { try { var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ + .createChannel('ticket-log', 'text', [ { id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] + deny: ['VIEW_CHANNEL'] }, { id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] + allow: ['VIEW_CHANNEL'], + deny: ['SEND_MESSAGES'] } ]) .then(ticketId => { @@ -125,9 +126,9 @@ exports.run = async (aruna, message, args) => { ticketId.setParent(ticketCategory); }); message.channel.send( - "Foi criado o canal " + + 'Foi criado o canal ' + ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." + ' como canal de log dos tickets. Seu nome pode ser alterado livremente.' ); } catch (e) { console.log(e.stack); @@ -142,14 +143,14 @@ exports.run = async (aruna, message, args) => { try { var supportRole = await message.guild .createRole({ - name: "Suporte", - permissions: ["VIEW_CHANNEL", "SEND_MESSAGES", "CONNECT", "SPEAK"] + name: 'Suporte', + permissions: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'] }) .then(async roleId => { await message.channel.send( - "Foi criado o cargo <@&" + + 'Foi criado o cargo <@&' + roleId.id + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." + '> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente.' ); guild2.ticketSupportID = roleId.id; }); @@ -162,14 +163,14 @@ exports.run = async (aruna, message, args) => { try { var supportRole = await message.guild .createRole({ - name: "Suporte", - permissions: ["VIEW_CHANNEL", "SEND_MESSAGES", "CONNECT", "SPEAK"] + name: 'Suporte', + permissions: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'CONNECT', 'SPEAK'] }) .then(async roleId => { await message.channel.send( - "Foi criado o cargo <@&" + + 'Foi criado o cargo <@&' + roleId.id + - "> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente." + '> como cargo de suporte. Seu nome, cor e permissão podem ser alterados livremente.' ); guild2.ticketSupportID = roleId.id; }); @@ -182,15 +183,15 @@ exports.run = async (aruna, message, args) => { if (guild.ticketLogID == null) { try { var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ + .createChannel('ticket-log', 'text', [ { id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] + deny: ['VIEW_CHANNEL'] }, { id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] + allow: ['VIEW_CHANNEL'], + deny: ['SEND_MESSAGES'] } ]) .then(async ticketId => { @@ -199,9 +200,9 @@ exports.run = async (aruna, message, args) => { await ticketId.setParent(ticketCategory); }); message.channel.send( - "Foi criado o canal " + + 'Foi criado o canal ' + ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." + ' como canal de log dos tickets. Seu nome pode ser alterado livremente.' ); } catch (e) { console.log(e.stack); @@ -211,15 +212,15 @@ exports.run = async (aruna, message, args) => { if (!aruna.channels.get(ticketLog)) { try { var ticketLog = await message.guild - .createChannel(`ticket-log`, "text", [ + .createChannel('ticket-log', 'text', [ { id: message.guild.defaultRole.id, - deny: ["VIEW_CHANNEL"] + deny: ['VIEW_CHANNEL'] }, { id: message.guild.roles.get(supportRole), - allow: ["VIEW_CHANNEL"], - deny: ["SEND_MESSAGES"] + allow: ['VIEW_CHANNEL'], + deny: ['SEND_MESSAGES'] } ]) .then(ticketId => { @@ -228,9 +229,9 @@ exports.run = async (aruna, message, args) => { ticketId.setParent(ticketCategory); }); message.channel.send( - "Foi criado o canal " + + 'Foi criado o canal ' + ticketLog + - " como canal de log dos tickets. Seu nome pode ser alterado livremente." + ' como canal de log dos tickets. Seu nome pode ser alterado livremente.' ); } catch (e) { console.log(e.stack); diff --git a/utils/cooldown.js b/src/Utils/cooldown.js similarity index 85% rename from utils/cooldown.js rename to src/Utils/cooldown.js index 6ee4aa6..bbb4df0 100644 --- a/utils/cooldown.js +++ b/src/Utils/cooldown.js @@ -16,22 +16,22 @@ along with this program. If not, see . */ -let array = []; +const array = []; function add(id) { - array.push(id); + array.push(id); } function remove(id) { - array.splice(array.indexOf(id), 1) + array.splice(array.indexOf(id), 1); } function is(id) { - return array.includes(id); + return array.includes(id); } module.exports = { - add: add, - remove: remove, - is: is -} \ No newline at end of file + add: add, + remove: remove, + is: is +}; \ No newline at end of file diff --git a/src/Utils/date.js b/src/Utils/date.js new file mode 100644 index 0000000..ce05b16 --- /dev/null +++ b/src/Utils/date.js @@ -0,0 +1,15 @@ +/* eslint-disable max-len */ +var dateFormat = require('dateformat'); +dateFormat.i18n = { + dayNames: [ + 'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab', + 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado' + ], + monthNames: [ + 'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez', + 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' + ], + timeNames: [ + 'a', 'p', 'am', 'pm', 'A', 'P', 'AM', 'PM' + ] +}; \ No newline at end of file diff --git a/src/Utils/emojis.js b/src/Utils/emojis.js new file mode 100644 index 0000000..4ddc5ee --- /dev/null +++ b/src/Utils/emojis.js @@ -0,0 +1,42 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +module.exports = { + robot: '<:robotpngrepocom:637026750336860173>', + aruna: '<:images4:625367765146140674>', + crown: '<:crownpngrepocom:637026749456187393>', + online: '<:online:637026750408294460>', + offline: '<:offline:637026750295048223>', + dnd: '<:dnd:637026749401530369>', + idle: '<:idle:637026749540204586>', + streamming: '<:stream:637026750538317873>', + discord: '<:discord:728820560317906964>', + menu: '<:menu:638183751368704030>', + pass: '<:pass:638073603644063774>', + boss: '<:bosspngrepocom:637026749225631746>', + customer: '<:customerservicepngrepocom:637026749741531146>', + picture: '<:pictureimagepngrepocom:637026750429265946>', + passport: '<:passport:638067652337729597>', + error: '<:errorsvgrepocom:637027333986975770>', + upload: '<:uploaduisvgrepocom:637027335173832727>', + dev: '<:developmentsvgrepocom:637027334553337896>', + nitro: '<:nitro:728819044211359746>', + partner: '<:partner:728849144734810163>', + partnerPlus: '<:partnerPlus:728845414274564146>', + premium: '<:vip:728816348892889118>' +}; diff --git a/src/Utils/index.js b/src/Utils/index.js new file mode 100644 index 0000000..3805416 --- /dev/null +++ b/src/Utils/index.js @@ -0,0 +1,27 @@ +/* + This File is part of ArunaBot + Copyright (C) LoboMetalurgico (and contributors) 2019-2020 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +module.exports = { + utils: require('./utils.js'), + ranksystem: require('./rankSystem.js'), + emojis: require('./emojis.js'), + emoji: require('./emojis.js'), + activeticket: require('./activeTicket.js'), + cooldown: require('./cooldown.js'), + date: require('./date.js') +}; \ No newline at end of file diff --git a/utils/rankSystem.js b/src/Utils/rankSystem.js similarity index 88% rename from utils/rankSystem.js rename to src/Utils/rankSystem.js index e4b9771..87708d9 100644 --- a/utils/rankSystem.js +++ b/src/Utils/rankSystem.js @@ -17,7 +17,7 @@ */ exports.run = async (aruna, message, database, cooldown, utils, Discord) => { - let user = message.author; + const user = message.author; const rank = await database.Rank.findOne({ user: user.id, @@ -58,19 +58,19 @@ exports.run = async (aruna, message, database, cooldown, utils, Discord) => { level = rank2.level; - let embed = new Discord.RichEmbed() - .setAuthor("Novo Nível!") + const embed = new Discord.RichEmbed() + .setAuthor('Novo Nível!') .setDescription( `Parabéns <@${message.author.id}>` + - ", agora você está no **Nível " + + ', agora você está no **Nível ' + rank2.level + - "**!" + '**!' ) .setColor([15, 15, 250]) .setTimestamp(); message.channel.send(embed); - const args = ""; - let exiberank = require(`../cmds/rank.js`); + const args = ''; + const exiberank = require('../cmds/rank.js'); exiberank.run(aruna, message, args); } } diff --git a/utils/utils.js b/src/Utils/utils.js similarity index 71% rename from utils/utils.js rename to src/Utils/utils.js index 3a41fb2..0d8d1fe 100644 --- a/utils/utils.js +++ b/src/Utils/utils.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -17,11 +18,11 @@ */ function need(level) { - var xp = [50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 850, 900, 950, - 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, 1550, 1600, 1650, 1700, 1750, 1800, 1850, 1900, 1950, 2000, 2050, 9999999999999999999] - return xp[level] -}; + var xp = [50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 850, 900, 950, + 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, 1550, 1600, 1650, 1700, 1750, 1800, 1850, 1900, 1950, 2000, 2050, 9999999999999999999]; + return xp[level]; +} module.exports = { - need:need -} \ No newline at end of file + need:need +}; \ No newline at end of file diff --git a/main.js b/src/main.js similarity index 61% rename from main.js rename to src/main.js index e6fcc21..287a591 100644 --- a/main.js +++ b/src/main.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,57 +17,58 @@ along with this program. If not, see . */ -require("events").EventEmitter.defaultMaxListeners = 999; +require('events').EventEmitter.defaultMaxListeners = 999; -var oficialMode = 0; - -if (process.env.OFICIAL_MODE === true) oficialMode = ""; -else oficialMode = "(BETA)"; +const express = require('express'); +const http = require('http'); +const app = express(); +app.get('/', (request, response) => { + console.log(Date.now() + ' Ping Received'); + response.sendStatus(200); +}); +app.listen(process.env.PORT); +setInterval(() => { + http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`); +}, 280000); -const Discord = require("discord.js"); -const fs = require("fs"); -const { config } = require("./configs") -const pkg = require("./package.json"); -const chalk = require("chalk"); +const Discord = require('discord.js'); +const fs = require('fs'); +const { config } = require('../Configs'); +const chalk = require('chalk'); const aruna = new Discord.Client(); aruna.commands = new Discord.Collection(); aruna.aliases = new Discord.Collection(); -fs.readdir("./events/", (erro, files) => { +fs.readdir('./src/Events/', (erro, files) => { if (erro) return error(`[ERROR] => ${erro}`); files.forEach(file => { - let eventFunction = require(`./events/${file}`); + const eventFunction = require(`./Events/${file}`); log(`[EVENT] => ${file}`); - let eventName = file.split(".")[0]; + const eventName = file.split('.')[0]; aruna.on(eventName, (...args) => eventFunction.run(aruna, ...args)); }); }); -fs.readdir("./Commands/", (err, files) => { +fs.readdir('./src/Commands/', (err, files) => { if (err) return error(`[ERROR] => ${err}`); - let jsfile = files.filter(f => f.split(".").pop() === "js"); + const jsfile = files.filter(f => f.split('.').pop() === 'js'); if (jsfile.length <= 0) { - return warn("[COMMANDS] Not Found!"); + return warn('[COMMANDS] Not Found!'); } - jsfile.forEach((f, i) => { - let pull = require(`./Commands/${f}`); + jsfile.forEach(f => { + const pull = require(`./Commands/${f}`); aruna.commands.set(pull.config.name, pull); log(`[COMMAND] => ${f}`); pull.config.aliases.forEach(alias => { aruna.aliases.set(alias, pull.config.name); }); - aruna.on("ready", () => { - aruna.channels - .get(`660612304282583043`) - .setName(`🧩Comandos: ${jsfile.length}`); - }); }); }); function logPrefix() { - return `${chalk.gray("[")}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : "ARUNA"}${chalk.gray("]")}`; + return `${chalk.gray('[')}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : 'ARUNA'}${chalk.gray(']')}`; } function log(...a) { @@ -81,6 +83,7 @@ function error(...a) { return console.error(logPrefix(), chalk.red(...a)); } +// eslint-disable-next-line no-unused-vars function debug(...a) { return console.debug(logPrefix(), chalk.magenta(...a)); } @@ -89,4 +92,4 @@ function isSharded() { return !!aruna.shard; } -aruna.login(config.token); +aruna.login(config.token); \ No newline at end of file diff --git a/sharding.js b/src/sharding.js similarity index 67% rename from sharding.js rename to src/sharding.js index ec751df..3f70c28 100644 --- a/sharding.js +++ b/src/sharding.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -15,23 +16,22 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ - -const Discord = require("discord.js"); -const chalk = require("chalk"); -const { config } = require("./configs"); -const pkg = require("./package.json"); +const Discord = require('discord.js'); +const chalk = require('chalk'); +const { config } = require('../Configs'); +const pkg = require('../package.json'); const manager = new Discord.ShardingManager(`./${pkg.main}`, { token: config.token, totalShards: config.sharding.totalShards }); -const logPrefix = `${chalk.gray("[")}${chalk.yellow("SHARD MASTER")}${chalk.gray("]")}`; +const logPrefix = `${chalk.gray('[')}${chalk.yellow('SHARD MASTER')}${chalk.gray(']')}`; -manager.on("launch", shard => console.log(`${logPrefix} ${shard.id} (${shard.id + 1}/${manager.totalShards}) iniciado(s)`)); -process.on("exit", code => console.log(`${logPrefix} ${chalk.red("Foi forçado o encerramento de um processo.")} Código de Saída:`, code)); +manager.on('launch', shard => console.log(`${logPrefix} ${shard.id} (${shard.id + 1}/${manager.totalShards}) iniciado(s)`)); +process.on('exit', code => console.log(`${logPrefix} ${chalk.red('Foi forçado o encerramento de um processo.')} Código de Saída:`, code)); console.log(`${logPrefix} Começando a gerar shards...`); manager.spawn(config.sharding.totalShards, config.sharding.delay).then(() => { - console.log(`${logPrefix} ${chalk.green("Finalizando a geração dos Shards!")}`); + console.log(`${logPrefix} ${chalk.green('Finalizando a geração dos Shards!')}`); }); \ No newline at end of file diff --git a/utils/emojis.js b/utils/emojis.js deleted file mode 100644 index 794bbd0..0000000 --- a/utils/emojis.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - This File is part of ArunaBot - Copyright (C) LoboMetalurgico (and contributors) 2019-2020 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -module.exports = { - robot: "<:robotpngrepocom:637026750336860173>", - aruna: "<:images4:625367765146140674>", - crown: '<:crownpngrepocom:637026749456187393>', - online: "<:online:637026750408294460>", - offline: "<:offline:637026750295048223>", - dnd: "<:dnd:637026749401530369>", - idle: "<:idle:637026749540204586>", - streamming: "<:stream:637026750538317873>", - discord: "<:discordpngrepocom:637027162892926986>", - menu: "<:menu:638183751368704030>", - pass: "<:pass:638073603644063774>", - boss: "<:bosspngrepocom:637026749225631746>", - customer: "<:customerservicepngrepocom:637026749741531146>", - picture: "<:pictureimagepngrepocom:637026750429265946>", - passport: "<:passport:638067652337729597>", - error: "<:errorsvgrepocom:637027333986975770>", - upload: "<:uploaduisvgrepocom:637027335173832727>", - dev: "<:developmentsvgrepocom:637027334553337896>" -};