diff --git a/.Configs/apiKeys.js b/.Configs/apiKeys.js index 3feb89b..f849d27 100644 --- a/.Configs/apiKeys.js +++ b/.Configs/apiKeys.js @@ -18,6 +18,7 @@ */ -//Dbots API Keys +// API Keys module.exports = { -} \ No newline at end of file + +}; \ No newline at end of file diff --git a/.Configs/general.js b/.Configs/general.js index cc4963b..d604409 100644 --- a/.Configs/general.js +++ b/.Configs/general.js @@ -17,9 +17,15 @@ */ module.exports = { + debug: false, prefix: '-', token: '', mongoose: '', + superUsersId: ['281515925960654848'], // Your User ID Comes Here! + noFakeId: ['187915892384858112', '281515925960654848'], + validLanguages: ['br', 'en', 'es'], // DON'T CHANGE THIS IF YOU DON'T KNOW WHAT ARE YOU DOING! + language: 'br', // Console Language + defaultLanguage: 'en', // Bot Language sharding: { totalShards: 'auto', delay: 7500 diff --git a/.Configs/index.js b/.Configs/index.js index 488d73d..ba48ea9 100644 --- a/.Configs/index.js +++ b/.Configs/index.js @@ -17,6 +17,7 @@ */ module.exports = { + apiKeys: require('./apiKeys.js'), configs: require('./general.js'), config: require('./general.js'), links: require('./links.js'), diff --git a/.Configs/links.js b/.Configs/links.js index 727d64c..0dae732 100644 --- a/.Configs/links.js +++ b/.Configs/links.js @@ -18,9 +18,10 @@ */ module.exports = { - supportServers: [''], - invites: [''], - donate: [''], - website: '', - trelloBoard: '' - }; \ No newline at end of file + donate: [''], + invites: [''], + supportServers: [''], + trelloBoard: '', + twitch: 'https://www.twitch.tv/lobometalurgico', // Required + website: '' +}; \ No newline at end of file diff --git a/.Configs/mongoose.js b/.Configs/mongoose.js index be22a63..4a6ac83 100644 --- a/.Configs/mongoose.js +++ b/.Configs/mongoose.js @@ -18,6 +18,8 @@ var mongoose = require('mongoose'); const config = require('./general.js'); +const chalk = require('chalk'); +const language = require(`../languages/bot/${config.language}/internal.json`); var Schema = mongoose.Schema; const url = config.mongoose; @@ -25,25 +27,28 @@ mongoose.connect( url, { useNewUrlParser: true, useUnifiedTopology: true }, err => { - if (err) return console.log('(CLUSTER) => Erro\n', err); - console.log('(CLUSTER) => Conectado!'); + if (err) return error(`[${language.main.error}] => ${err}`); + log(language.generic.connected); } ); var User = new Schema({ _id: { type: String }, + language: { type: String, default: null }, SUPER: { type: Boolean, default: false } }); var Guild = new Schema({ _id: { type: String }, prefix: { type: String, default: config.prefix }, + antiFakeEnable: { type: Boolean, default: true }, 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 }, + autoRoleEnable: { type: Boolean, default: false }, autoRoleRole: { type: String, default: null }, + language: { type: String, default: config.language }, isPremium: { type: Boolean, default: false }, isPartner: { type: Boolean, default: false } }); @@ -72,7 +77,6 @@ var Support = new Schema({ var Command = new Schema({ _id: { type: String }, - name: { type: String }, public: { type: Boolean, default: false } }); @@ -97,4 +101,26 @@ exports.Suport = Supports; exports.System = Systems; exports.Guilds = Guilds; exports.Users = Users; -exports.Rank = Ranks; \ No newline at end of file +exports.Rank = Ranks; + +function logPrefix() { + return `${chalk.gray('[')}${chalk.blue(language.main.cluster)}${chalk.gray(']')}`; +} + +function log(...a) { + return console.log(logPrefix(), ...a); +} + +// eslint-disable-next-line no-unused-vars +function warn(...a) { + return console.warn(logPrefix(), chalk.yellow(...a)); +} + +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)); +} \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..26b3349 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,27 @@ +**/.classpath +**/.dockerignore +**/.env +**/.eslintrc.json +**/.eslintignore +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +**/tmp +README.md +LICENSE \ No newline at end of file diff --git a/.eslintignore b/.eslintignore index 0d81a1a..05e23b4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ .Config -Config/ \ No newline at end of file +Config/ +tmp/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index e40f8be..89db7d4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -18,7 +18,8 @@ "computed-property-spacing": "warn", "indent": [ "warn", - 2 + 2, + { "SwitchCase": 1 } ], "keyword-spacing": [ "warn", @@ -30,7 +31,7 @@ "max-len": [ "warn", { - "code": 160, + "code": 165, "ignoreComments": true, "ignoreUrls": true } diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 1264238..40dbb42 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -1,15 +1,14 @@ name: ESLint -on: - push: - paths: - - "src/**" - - ".eslintrc.*" - - ".github/workflows/eslint.yml" +on: [push, pull_request] jobs: update: name: ESLint + runs-on: ubuntu-latest + + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + steps: - name: Checkout repository uses: actions/checkout@v2 diff --git a/.gitignore b/.gitignore index eab33cd..811c73d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -.env Configs/ node_modules/ -.vscode/ \ No newline at end of file +.vscode/ +tmp/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1dfa37a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "languages"] + path = languages + url = https://github.com/ArunaBot/ArunaLanguages.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5136382 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM node:12.16.2 +LABEL maintainer="Lobo Metalúrgico " +ENV NODE_ENV=production +WORKDIR /usr/src/app +COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"] +RUN npm install --production --silent && mv node_modules ../ +COPY . . +RUN git clone https://github.com/ArunaBot/ArunaLanguages.git languages +CMD ["npm", "start"] diff --git a/README.md b/README.md index 219b651..227bbae 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@

- +

Aruna

- + Aruna

@@ -26,7 +26,7 @@ Olá, eu me chamo Aruna. Sou um bot brasileiro para Discord com algumas funções muito interessantes. -Eu tenho várias funções para entretenimento (como comandos engraçados e memes), funções sociais (sistema de perfil com XP e reputação), extremamente customizável (você pode ativar/desativar qualquer comando meu, alterar meu prefixo para o que você quiser e muito mais!). +Eu tenho várias funções para entretenimento (como comandos engraçados), funções sociais, extremamente customizável (você pode ativar/desativar diversos comandos meu, alterar meu prefixo para o que você quiser e muito mais!). ## Como eu adiciono-a ao meu servidor? @@ -38,8 +38,9 @@ Você pode obter suporte sobre a Aruna [clicando aqui](https://discord.gg/NqbBgE ## Como ajudar? -No momento, existe apenas 1 repositório [na nossa organização](https://github.com/ArunaBot); Este é, +No momento, temos 2 repositórios [na nossa organização](https://github.com/ArunaBot); Estes são, * [Aruna](https://github.com/ArunaBot/Aruna): Código-fonte da Aruna ("backend"), isto inclui todo o bot em si. +* [ArunaLanguages](https://github.com/ArunaBot/ArunaLanguages): Os idiomas da aruna, toda e qualquer tradução vem de lá. ### 💵 Como Doar? @@ -55,16 +56,18 @@ Você também pode hospedar a Aruna você mesmo (afinal, é por isso que se cham * Para evitar confusões e problemas, você **não pode** utilizar o nome ou a personagem "Aruna" ou nomes parecidos na sua versão selfhosted. Nós [recomendamos utilizar a versão pública da Aruna](https://discordapp.com/oauth2/authorize?client_id=593303574725787657&scope=bot&permissions=2146954751), mas se você *realmente* quiser hospedar ou ajudar a desenvolver a Aruna, siga os seguintes passos: -1. Tenha o [NODE 12.16.2 (ou superior)](https://nodejs.org/en/) instalado na sua máquina e certifique-se que o node e o npm (incluso no node) está acessível pelo terminal. (Tente executar `node` e `npm` no terminal, caso não funcione, procure reinstalar o node ou reiniciar a máquina). + +1. Tenha o [NODE 12.16.2 (ou superior)](https://nodejs.org/en/) instalado na sua máquina e certifique-se que o node e o npm (incluso no nodejs) estão acessíveis pelo terminal. (Tente executar `node -v` e `npm -v` no terminal, caso não funcionem, procure reinstalar o nodejs ou reiniciar a máquina). 2. Tenha o MongoDB instalado na sua máquina. (Ou se prefereir, pode usar o [MongoDB Online](https://mongodb.com/)). 3. Tenha o `git-shell` ou o `git-cli` instalados. No Windows você pode utilizar o `Git Bash`. 4. Caso você precise ou fazer modificações no código-fonte, é recomendado utilizar o [Visual Studio Code](https://code.visualstudio.com/). -5. Faça `git clone https://github.com/ArunaBot/Aruna.git` em alguma pasta no seu computador. -6. Agora, usando o processador de comandos do seu sistema operacional (CMD, POWERSHELL, Terminal, etc), entre na pasta criada e utilize `npm install`. -8. Ao terminar de fazer o download de tudo, verifique se foi criado a pasta `node modules`. +5. Execute o comando `git clone https://github.com/ArunaBot/Aruna.git` usando seu terminal git em uma pasta vazia do seu computador. +6. Acesse a pasta criada usando o processador de comandos do seu sistema operacional (CMD, POWERSHELL, Terminal, etc) e execute o comando `git submodule update --init` para baixar o pacote de idiomas da aruna. +7. Ainda com o processador de comandos, execute o comando `npm install`. +8. Ao terminar de fazer o download de tudo, verifique se foi criado a pasta `node_modules`. 9. Caso essa pasta exista e tenha sido criado o arquivo `package-lock.json` significa que tudo deu certo! -10. Agora, retire o `_` da pasta `_configs` e do aquivo `_.env`. -11. Depois, abra o arquivo .env e preencha o `TOKEN_ARUNA` com o token do seu bot, e o `MONGOOSE` com seu diretório do moongose criado no mongodb.com. (Caso tenha hospedado o mongo em sua máquina, altere o arquivo presente na configs/mongoose.js com as configurações adequadas no campo de url e login (verifique a documentação do mongoose para isso)). +10. Agora, retire o `.` da pasta `.Configs`. +11. Depois, abra o arquivo `general` e preencha o campo `token` com o token do seu bot, o campo `mongoose` com o link de acesso ao mongoose e por fim, altere o campo `superUsersId` para o id do seu usuário. 11. Com tudo pronto, podemos iniciá-la abrindo um terminal e digitando `npm start`. 12. Caso tenha dado tudo certo, a sua versão selfhosted irá iniciar e você poderá utilizar os comandos dela! 🎉 @@ -78,11 +81,11 @@ O seu código não pode ser algo "gambiarra", meu código pode ter gambiarras ma Você precisa pensar "será que alguém iria utilizar isto?", se você criar um comando que só seja útil no seu servidor, provavelmente eu irei negar o seu Pull Request. -Funcionalidades (como comandos) relacionados a coisas NSFW **não serão** adicionadas na Aruna e seu Pull Request será negado, eu prefiro que as pessoas pensem que ela é um bot que faz memes, ao invés de um bot que fica mandando coisas NSFW no chat. +Funcionalidades (como comandos) relacionados a coisas NSFW **não serão** adicionadas na Aruna e seu Pull Request será negado. ## Dependências -A Aruna utiliza várias [dependências no código-fonte dela](https://github.com/ArunaBot/Aruna/blob/stable/package.json), obrigado a todos os mantenedores das dependências! Sem vocês, a Aruna não iria existir (ou teria várias funcionalidades reduzidas ou talvez até inexistentes!). +A Aruna utiliza várias [dependências no código-fonte](https://github.com/ArunaBot/Aruna/blob/stable/package.json), obrigado a todos os mantenedores das dependências! Sem vocês, a Aruna não iria existir (ou teria várias funcionalidades reduzidas ou até inexistentes!). | Nome | Mantenedor | | ------------- | ------------- | @@ -93,7 +96,6 @@ A Aruna utiliza várias [dependências no código-fonte dela](https://github.com | [Mongoose](http://mongoosejs.com/) | vkarpov15, aheckmann, rauchg, etc | | [Moment](http://momentjs.com) | ichernev, timrwood, icambron, etc | | [Moment Duration Format](https://github.com/jsmreese/moment-duration-format) | jsmreese | -| [Dotenv](https://github.com/motdotla/dotenv) | motdotla, maxbeatty, etc | | [Ytdl Core](https://github.com/fent/node-ytdl-core) | fent, #3TimeForANinja, etc | | [Node Opus](github.com/Rantanen/node-opus) | Rantanen, thijstriemstra, nfriedly, etc | | [Jimp](github.com/oliver-moran/jimp) | hipstersmoothie, oliver-moran, strandedcity, etc | @@ -107,4 +109,4 @@ O código-fonte da Aruna está licenciado sob a [GNU Affero General Public Licen

-

"Discord", "DiscordApp" and any associated logos are registered trademarks of Discord Inc.

+

"Discord", "DiscordApp" and any associated logos are registered trademarks of Discord Inc.

\ No newline at end of file diff --git a/docker-compose.debug.yml b/docker-compose.debug.yml new file mode 100644 index 0000000..364b558 --- /dev/null +++ b/docker-compose.debug.yml @@ -0,0 +1,13 @@ +version: '3.4' + +services: + arunabot: + image: arunabot + build: + context: . + dockerfile: ./Dockerfile + environment: + NODE_ENV: development + ports: + - 9229:9229 + command: ["node", "--inspect=0.0.0.0:9229", "src/main.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b26eaff --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3.4' + +services: + arunabot: + image: arunabot + build: + context: . + dockerfile: ./Dockerfile + environment: + NODE_ENV: production diff --git a/languages b/languages new file mode 160000 index 0000000..9415e9f --- /dev/null +++ b/languages @@ -0,0 +1 @@ +Subproject commit 9415e9fddd62d80a2558bb91a711a925f8c777e5 diff --git a/package-lock.json b/package-lock.json index 48cdae6..56f15e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3044 +1,3719 @@ -{ - "name": "arunabot", - "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.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "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.3", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.3.3.tgz", - "integrity": "sha512-n3hUs4RY0K8cz8vJ2GiZE4EdJlexoxs1vGsaft5lZlAnU6wsZfncpv4px+HVOMKN8ddtjriGfsrG4lVkAyZcmQ==", - "requires": { - "@discordjs/node-pre-gyp": "^0.1.0", - "node-addon-api": "^3.0.2" - } - }, - "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "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-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "@jimp/bmp": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", - "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "bmp-js": "^0.1.0" - } - }, - "@jimp/core": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", - "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", - "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.16.1" - } - }, - "@jimp/gif": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", - "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", - "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "jpeg-js": "0.4.2" - } - }, - "@jimp/plugin-blit": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", - "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-blur": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", - "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-circle": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", - "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-color": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", - "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", - "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-cover": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", - "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-crop": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", - "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-displace": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", - "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-dither": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", - "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", - "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-flip": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", - "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", - "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-invert": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", - "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-mask": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", - "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-normalize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", - "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-print": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", - "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", - "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-rotate": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", - "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-scale": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", - "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-shadow": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", - "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-threshold": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", - "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugins": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", - "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.16.1", - "@jimp/plugin-blur": "^0.16.1", - "@jimp/plugin-circle": "^0.16.1", - "@jimp/plugin-color": "^0.16.1", - "@jimp/plugin-contain": "^0.16.1", - "@jimp/plugin-cover": "^0.16.1", - "@jimp/plugin-crop": "^0.16.1", - "@jimp/plugin-displace": "^0.16.1", - "@jimp/plugin-dither": "^0.16.1", - "@jimp/plugin-fisheye": "^0.16.1", - "@jimp/plugin-flip": "^0.16.1", - "@jimp/plugin-gaussian": "^0.16.1", - "@jimp/plugin-invert": "^0.16.1", - "@jimp/plugin-mask": "^0.16.1", - "@jimp/plugin-normalize": "^0.16.1", - "@jimp/plugin-print": "^0.16.1", - "@jimp/plugin-resize": "^0.16.1", - "@jimp/plugin-rotate": "^0.16.1", - "@jimp/plugin-scale": "^0.16.1", - "@jimp/plugin-shadow": "^0.16.1", - "@jimp/plugin-threshold": "^0.16.1", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", - "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", - "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", - "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.16.1", - "@jimp/gif": "^0.16.1", - "@jimp/jpeg": "^0.16.1", - "@jimp/png": "^0.16.1", - "@jimp/tiff": "^0.16.1", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", - "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", - "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "@types/bson": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", - "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", - "requires": { - "@types/node": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/mongodb": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz", - "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==", - "requires": { - "@types/bson": "*", - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", - "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==" - }, - "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", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "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", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "any-base": { - "version": "1.1.0", - "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", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "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==" - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "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": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, - "bytes": { - "version": "3.1.0", - "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.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", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "complex.js": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", - "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==" - }, - "component-emitter": { - "version": "1.3.0", - "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", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "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=" - }, - "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" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, - "dbots": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/dbots/-/dbots-5.0.4.tgz", - "integrity": "sha512-KZJKWv1yISXMIw9KwT8Kodad9EAPrxd6iThKe8MxMy7MCIngEY0We+yYU65HIzmJiwo0W2OigNqPA6CIbf5TyQ==", - "requires": { - "axios": "^0.19.0", - "promise.allsettled": "^1.0.2" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "decimal.js": { - "version": "10.2.0", - "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", - "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "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", - "integrity": "sha512-cK6rH1PuGjSjpmEQbnpuTxq1Yv8B89SotyKUFcr4RhnsiZnfBfDOev7DD7v5vhtEyyj51NuMWFoRJzgy/m08Uw==", - "requires": { - "long": "^4.0.0", - "prism-media": "^0.0.4", - "snekfetch": "^3.6.4", - "tweetnacl": "^1.0.0", - "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==" - }, - "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.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.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", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-latex": { - "version": "1.2.0", - "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.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.9.0.tgz", - "integrity": "sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", - "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.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^7.3.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.19", - "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.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.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.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.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.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "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", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "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": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz", - "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==", - "requires": { - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.0", - "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", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - } - } - }, - "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", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fraction.js": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", - "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "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", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "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", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "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" - } - }, - "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" - } - }, - "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.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "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.1", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", - "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==" - }, - "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": { - "is-extglob": "^2.1.1" - } - }, - "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==" - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "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-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.16.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", - "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.16.1", - "@jimp/plugins": "^0.16.1", - "@jimp/types": "^0.16.1", - "regenerator-runtime": "^0.13.3" - } - }, - "jpeg-js": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", - "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" - }, - "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.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" - }, - "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.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "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.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" - }, - "dependencies": { - "miniget": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.7.2.tgz", - "integrity": "sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA==" - } - } - }, - "mathjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-7.2.0.tgz", - "integrity": "sha512-9UBMWBB94eyrxX8gskBzkVJZBEig2BUL8CBglQoRW4X/ljdW6hBVm8sT6Jp1MhyEp+2flKJo81qwml6twScxFw==", - "requires": { - "complex.js": "^2.0.11", - "decimal.js": "^10.2.0", - "escape-latex": "^1.2.0", - "fraction.js": "^4.0.12", - "javascript-natural-sort": "^0.7.1", - "seed-random": "^2.2.0", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "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.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "miniget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-2.0.1.tgz", - "integrity": "sha512-MX+QfVIPAutz6c+T7WKuFKtjcw0nOyRRh1ubhTDD+z/e/pKcSAsfAV63aQKUgb1MFRT1GyfJeW53N5fHkX0wIA==" - }, - "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.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "moment": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz", - "integrity": "sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw==" - }, - "moment-duration-format": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", - "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" - }, - "mongodb": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz", - "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==", - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.11.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.8.tgz", - "integrity": "sha512-RRfrYLg7pyuyx7xu5hwadjIZZJB9W2jqIMkL1CkTmk/uOCX3MX2tl4BVIi2rJUtgMNwn6dy3wBD3soB8I9Nlog==", - "requires": { - "@types/mongodb": "^3.5.27", - "bson": "^1.1.4", - "kareem": "2.3.2", - "mongodb": "3.6.3", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.1", - "mquery": "3.2.3", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "7.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.1.tgz", - "integrity": "sha512-norEinle9aFc05McBawVPwqgFZ7npkts9yu17ztIVLwPwO9rq0OTp89kGVTqvv5rNLMz96E5iWHpVORjI411vA==" - }, - "mquery": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz", - "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "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=" - } - } - }, - "ms": { - "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 - }, - "needle": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "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-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" - }, - "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": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "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.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "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.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "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", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "parseurl": { - "version": "1.3.3", - "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", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "requires": { - "pngjs": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "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", - "integrity": "sha512-dG2w7WtovUa4SiYTdWn9H8Bd4JNdei2djtkP/Bk9fXq81j5Q15ZPHYSwhUVvBRbp5zMkGtu0Yk62HuMcly0pRw==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/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", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "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", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "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", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regexp-clone": { - "version": "1.0.0", - "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", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "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 - }, - "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", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "seed-random": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" - }, - "semver": { - "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", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "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", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "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", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snekfetch": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", - "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "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.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", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "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": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "qs": { - "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", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "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.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "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.7.0", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.0.tgz", - "integrity": "sha512-oVYHPG5KiUJ3KrbBTmW2kTauIO9E1lDEUM6K92HVuwnPfTt7W8UXZG3vqOo4tVaHRI9AHToVHqhzIUUFkDN6rA==" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tweetnacl": { - "version": "1.0.3", - "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", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz", - "integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA==" - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "requires": { - "random-bytes": "~1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "requires": { - "pako": "^1.0.5" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "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", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xtend": { - "version": "4.0.2", - "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": "3.2.2", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-3.2.2.tgz", - "integrity": "sha512-DVE7uhk4WYB2Op742QQVGE/b9G7cr9kSB3ZDpDXmyRPhO55h9u8gwORlDIHWKucWVmCsdsdKzNP89QylpJEgiw==", - "requires": { - "html-entities": "^1.3.1", - "m3u8stream": "^0.7.1", - "miniget": "^2.0.1", - "sax": "^1.1.3" - } - } - } -} +{ + "name": "arunabot", + "version": "4.3.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "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.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@derhuerst/http-basic": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.1.tgz", + "integrity": "sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "@discordjs/node-pre-gyp": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.2.0.tgz", + "integrity": "sha512-2PIodKAuDLZZ8LGVFiQkZicco9PGcUICU/NlMqNMXuy91qMGKosOkDkzj4x+Kl1WYR1r2Y/fyOIgje5zezavYQ==", + "requires": { + "detect-libc": "^1.0.3", + "mkdirp": "^0.5.5", + "needle": "^2.6.0", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rc": "^1.2.8", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@discordjs/opus": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.4.0.tgz", + "integrity": "sha512-89PRSuvBKBvZLkftVqRnQ9/rPXG9zDjKdbtlGC0RiZ6hJYFdWb4ND/maMgJPkTAvlIrRChm67eZOuIYhiKBDbQ==", + "requires": { + "@discordjs/node-pre-gyp": "^0.2.0", + "node-addon-api": "^3.1.0" + } + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/mongodb": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.7.tgz", + "integrity": "sha512-47P64kbkXarlleSMzSrRG04uzY+Dr3xAilOiqRIsqj/sZrmq6cUMx8njydY/iWMqi8IdE9ojFQl/X3ou9EsAlQ==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.51.tgz", + "integrity": "sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg==" + }, + "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", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "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==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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=" + }, + "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==", + "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==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "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=" + } + } + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "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" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "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" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "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", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "complex.js": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", + "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==" + }, + "component-emitter": { + "version": "1.3.0", + "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=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "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", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "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=" + }, + "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" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "dateformat": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz", + "integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==" + }, + "dblapi.js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.4.1.tgz", + "integrity": "sha512-g+u1inF/qOLit5qPK4hBGk5pKL1vy09uBLV+nukkRMvw2S9D1PyiyO70n4fboUXOgbExPp6Sho/Y782OqQOUiQ==" + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/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 + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "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.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "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=" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "discord.js": { + "version": "11.6.4", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.6.4.tgz", + "integrity": "sha512-cK6rH1PuGjSjpmEQbnpuTxq1Yv8B89SotyKUFcr4RhnsiZnfBfDOev7DD7v5vhtEyyj51NuMWFoRJzgy/m08Uw==", + "requires": { + "long": "^4.0.0", + "prism-media": "^0.0.4", + "snekfetch": "^3.6.4", + "tweetnacl": "^1.0.0", + "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==" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "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": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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" + } + }, + "env-paths": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-latex": { + "version": "1.2.0", + "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.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.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.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "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.20", + "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": "^6.0.4", + "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.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.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" + }, + "dependencies": { + "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 + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "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 + } + } + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "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", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "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=" + } + } + }, + "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-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "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==" + }, + "fastq": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "requires": { + "reusify": "^1.0.4" + } + }, + "ffmpeg": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz", + "integrity": "sha1-HEYN+OfaUSf2LO70v6BsWciWMMs=", + "requires": { + "when": ">= 0.0.1" + } + }, + "ffmpeg-static": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.2.7.tgz", + "integrity": "sha512-SGnOr2d+k0/9toRIv9t5/hN/DMYbm5XMtG0wVwGM1tEyXJAD6dbcWOEvfHq4LOySm9uykKL6LMC4eVPeteUnbQ==", + "requires": { + "@derhuerst/http-basic": "^8.2.0", + "env-paths": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "progress": "^2.0.3" + } + }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "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": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "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=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "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" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.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==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "requires": { + "ini": "1.3.7" + }, + "dependencies": { + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + } + } + }, + "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" + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "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-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "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=" + } + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "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" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "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-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "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.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "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==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "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 + }, + "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.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + }, + "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.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "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.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "m3u8stream": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.3.tgz", + "integrity": "sha512-0nAcdrF8YJKUkb6PzWdvGftTPyCVWgoiot1AkNVbPKTeIGsWs6DrOjifrJ0Zi8WQfQmD2SuVCjkYIOip12igng==", + "requires": { + "miniget": "^4.0.0", + "sax": "^1.2.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "mathjs": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.2.0.tgz", + "integrity": "sha512-R2fQxaOmyifxgP4+c59dnfLwpKI1KYHdnT5lLwDuHIZvgyGb71M8ay6kTJTEv9rG04pduqvX4tbBUoG5ypTF8A==", + "requires": { + "complex.js": "^2.0.11", + "decimal.js": "^10.2.1", + "escape-latex": "^1.2.0", + "fraction.js": "^4.0.13", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^2.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "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.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "miniget": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.0.tgz", + "integrity": "sha512-IzTOaNgBw/qEpzkPTE7X2cUVXQfSKbG8w52Emi93zb+Zya2ZFrbmavpixzebuDJD9Ku4ecbaFlC7Y1cEESzQtQ==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-duration-format": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", + "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" + }, + "mongodb": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz", + "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.16.tgz", + "integrity": "sha512-qmolyGAskPuq0Xr3j2Tjm9jwRccGGnLRWtTuyRvYBZoyItajwIoQdetJH8oVzs3N7aZK/GKZ82xV/t97suF8Pg==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.4", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.4", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + }, + "mquery": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.4.tgz", + "integrity": "sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "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=" + } + } + }, + "ms": { + "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 + }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "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-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, + "nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "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=" + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "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" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "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", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parseurl": { + "version": "1.3.3", + "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", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pngjs": { + "version": "3.4.0", + "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 + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "prism-media": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.4.tgz", + "integrity": "sha512-dG2w7WtovUa4SiYTdWn9H8Bd4JNdei2djtkP/Bk9fXq81j5Q15ZPHYSwhUVvBRbp5zMkGtu0Yk62HuMcly0pRw==" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.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 + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "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", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regexp-clone": { + "version": "1.0.0", + "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 + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + }, + "dependencies": { + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "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 + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "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" + } + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "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", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "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==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } + } + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "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_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "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": "6.1.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", + "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + }, + "qs": { + "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", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "systeminformation": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.3.2.tgz", + "integrity": "sha512-fD4mSjY64FRm1KfO5ykLqr5tjrGsrhML+PEe66LpQYwnA4KX2CCymUJNo7hrggw2nQeeFtZ4BtB3+cdn+OBJ5Q==" + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", + "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "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" + } + } + } + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "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.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + } + } + }, + "tweetnacl": { + "version": "1.0.3", + "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==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz", + "integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "requires": { + "debug": "^2.2.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=" + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" + }, + "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" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "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-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xtend": { + "version": "4.0.2", + "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": "4.4.5", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.4.5.tgz", + "integrity": "sha512-/ugilIF2PskxNfQgkYZ/esvkp+fiB/mOPdIExW/En+1QTbq5VeTVqgf2hETTen0Co2lHMM4eRxPaczDHTmkb7A==", + "requires": { + "m3u8stream": "^0.8.3", + "miniget": "^4.0.0", + "sax": "^1.1.3" + } + }, + "ytdl-core-discord": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/ytdl-core-discord/-/ytdl-core-discord-1.2.5.tgz", + "integrity": "sha512-VS7Z7q9sfEpmTBWs31qU36O+qt52eLKCcbjs1VgkptwsHkeq2v6gBthUs6+4ZT6EzZopuZMSP/joZ0urXa1gcA==", + "requires": { + "@types/node": "^14.14.14", + "prism-media": "^1.2.3", + "ytdl-core": "^4.2.1" + }, + "dependencies": { + "@types/node": { + "version": "14.14.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", + "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==" + }, + "prism-media": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.3.tgz", + "integrity": "sha512-fSrR66n0l6roW9Rx4rSLMyTPTjRTiXy5RVqDOurACQ6si1rKHHKDU5gwBJoCsIV0R3o9gi+K50akl/qyw1C74A==" + } + } + } + } +} diff --git a/package.json b/package.json index a89be58..bb05813 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,63 @@ -{ - "name": "arunabot", - "version": "4.2.0", - "description": "A nova e melhorada aruna!", - "main": "src/main.js", - "scripts": { - "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": { - "@discordjs/opus": "^0.3.3", - "chalk": "^4.1.0", - "dateformat": "^3.0.3", - "dbots": "^5.0.4", - "discord.js": "^11.6.4", - "express": "^4.17.1", - "express-session": "^1.17.1", - "jimp": "^0.16.1", - "mathjs": "^7.2.0", - "moment": "^2.28.0", - "moment-duration-format": "^2.3.2", - "mongoose": "^5.11.8", - "superagent": "^6.1.0", - "ytdl-core": "^3.2.2" - }, - "devDependencies": { - "eslint": "^7.9.0" - } -} +{ + "name": "arunabot", + "version": "4.3.0", + "description": "A nova e melhorada aruna!", + "main": "src/main.js", + "scripts": { + "start": "node src/sharding.js", + "eslint": "eslint ./src", + "eslint:fix": "eslint ./src --fix" + }, + "repository": { + "type": "git", + "url": "https://github.com/ArunaBot/Aruna.git" + }, + "author": { + "name": "Lobo Metalurgico", + "email": "contato@lobometalurgico.tk", + "url": "https://youtube.com/LoboMetalurgico" + }, + "contributors": [ + { + "name": "Kira's Art", + "url": "https://twitter.com/kiratokioArt/" + } + ], + "license": "AGPL-3.0", + "dependencies": { + "@discordjs/opus": "^0.4.0", + "chalk": "^4.1.0", + "dateformat": "^4.5.1", + "dblapi.js": "^2.4.1", + "del": "^6.0.0", + "discord.js": "^11.6.4", + "express": "^4.17.1", + "ffmpeg": "0.0.4", + "ffmpeg-static": "^4.2.7", + "jimp": "^0.16.1", + "mathjs": "^9.2.0", + "moment": "^2.29.1", + "moment-duration-format": "^2.3.2", + "mongoose": "^5.11.16", + "nodemon": "^2.0.7", + "superagent": "^6.1.0", + "systeminformation": "^5.3.2", + "ytdl-core": "^4.4.5", + "ytdl-core-discord": "^1.2.5" + }, + "devDependencies": { + "eslint": "^7.20.0" + }, + "nodemonConfig": { + "ignore": [ + ".Configs/*", + "Configs/*", + ".git/*", + ".gitignore", + ".github/", + "package.json", + "package-lock.json" + ], + "delay": "5000" + } +} diff --git a/pm2.json b/pm2.json deleted file mode 100644 index 3be6d96..0000000 --- a/pm2.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "apps": [ - { - "name": "ArunaBot", - "script": "pnpm", - "args": "start" - } - ] -} \ No newline at end of file diff --git a/src/Commands/avatar.js b/src/Commands/avatar.js index 38ca2ea..3bbe796 100644 --- a/src/Commands/avatar.js +++ b/src/Commands/avatar.js @@ -1,40 +1,49 @@ -/* - 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 = (aruna, message, args) => { - const user1 = message.guild.member( - message.mentions.users.first() || aruna.users.get(args[0]) || message.author - ); - - const user = user1.user; - - const embed = new Discord.RichEmbed() - .setAuthor(`Avatar de ${user.username}`) - .setDescription(`**Clique [aqui](${user.avatarURL}) para baixar a foto.**`) - .setImage(user.avatarURL) - .setTimestamp(); - message.channel.send(embed); -}; -exports.config = { - name: 'avatar', - aliases: [''], - description: 'Mostra o avatar próprio ou de um usuário', - category: '🎉 Entretenimento' -}; +/* + 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'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = (aruna, message, args, langc) => { + const user1 = message.guild.member( + message.mentions.users.first() || aruna.users.get(args[0]) || message.author + ); + + if (langc) { + language = langc; + } + + const user = user1.user; + + const embed = new Discord.RichEmbed() + .setTitle(language.avatar.embed.title.replace('[emoji]', emoji.picture).replace('[user]', user1.displayName)) + .setDescription(language.avatar.embed.description.replace('[url]', user.avatarURL)) + .setImage(user.avatarURL) + .setTimestamp(); + message.channel.send(embed); +}; + +exports.config = { + name: 'avatar', + aliases: ['usericon'], + description: language.avatar.config.description, + category: '🎉 Entretenimento', + public: true +}; diff --git a/src/Commands/badges.js b/src/Commands/badges.js index 2e5a965..e501771 100644 --- a/src/Commands/badges.js +++ b/src/Commands/badges.js @@ -1,16 +1,27 @@ -/* eslint-disable no-unused-vars */ +/* + 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 { premium } = require('../Utils/emojis'); +const { database } = require('../../Configs'); 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}`) @@ -61,8 +72,6 @@ exports.run = async (aruna, message, args) => { .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); @@ -150,12 +159,11 @@ exports.run = async (aruna, message, args) => { } } else return message.channel.send(error8); } else return message.channel.send(error8); - - }; exports.config = { name: 'badge', - aliases: [], - category: '🧰 Administração' + aliases: ['badges'], + category: '🧰 Administração', + public: false }; \ No newline at end of file diff --git a/src/Commands/ban.js b/src/Commands/ban.js index 73bda26..adfd1a1 100644 --- a/src/Commands/ban.js +++ b/src/Commands/ban.js @@ -18,51 +18,77 @@ */ const Discord = require('discord.js'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); // 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]); +exports.run = async (aruna, message, args, langc, prefix, command) => { + if (langc) { + language = langc; + } 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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description1.replace('[banMembers]', language.generic.permissions.banMembers)) .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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description2.replace('[banMembers]', language.generic.permissions.banMembers)) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description3) + .setTimestamp(); + + const error8 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(`${language.ban.embed.error.userNotFound.line1}\n + ${language.ban.embed.error.userNotFound.line2}`) .setTimestamp(); + + if (!args[0] || isNaN(args[0]) && (!args[0].includes('<@') || !args[0].includes('>'))) return message.channel.send(error3); + + const buser = await aruna.fetchUser(message.mentions.users.first() || args[0]).catch(e => { + console.warn(e); + if (args[0].length !== 18) return null; + message.channel.send(error8); + return 'STOP'; + }); /** @todo: Fix #30 */ + + if (!buser) return message.channel.send(error3); + if (buser == 'STOP') return; + 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!`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description4.replace('[ownerName]', buser.username)) .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}.`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description5.replace('[username]', 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}`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ban.embed.error.description6.replace('[username]', 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} :(`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.generic.embed.error.description) .setTimestamp(); if (!message.member.hasPermission('BAN_MEMBERS')) @@ -70,8 +96,6 @@ exports.run = async (aruna, message, args) => { 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]) ); @@ -85,35 +109,43 @@ exports.run = async (aruna, message, args) => { return message.channel.send(error6); } - var reason = ''; + var reason = message.content.slice(command.length + prefix.length).trim(); + + if (args[0].includes('<@!') && args[0].includes('>')) { + reason = reason.slice(5 + buser.id.length).trim(); + } else if (args[0].includes('<@') && args[0].includes('>')) { + reason = reason.slice(4 + buser.id.length).trim(); + } else { + reason = reason.slice(buser.id.length).trim(); + } - if (!args.join(' ').slice(19)) { - reason = `Punido por: ${message.author.username}`; + if (!reason) { + reason = language.ban.reason['1'].replace('[username]', message.author.username); } else { - reason = - `Punido por: ${message.author.username} com o Motivo: ` + - args.join(' ').slice(19); + reason = language.ban.reason['2'].replace('[username]', message.author.username).replace('[reason]', reason); } 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) + .setAuthor(language.ban.embed.sucess.title) + .setDescription(language.ban.embed.sucess.description.replace('[username]', buser.username)) + .addField(language.ban.embed.sucess.field1.title, language.ban.embed.sucess.field1.content.replace('[username]', buser.username).replace('[userId]', buser.id), false) + .addField(language.ban.embed.sucess.field2, message.author, false) + .addField(language.ban.embed.sucess.field3, dateFormat(now, language.generic.strings.date), false) + .addField(language.ban.embed.sucess.field4, reason, false) .setTimestamp(); - message.channel.send(embed).then(async msg => { - await message.guild.ban(buser, reason).catch(err => { - console.log(err); - msg.edit(error7); - }); + message.guild.ban(buser, reason).catch(err => { + console.log(err); + return message.channel.send(error7); + }).then(() => { + message.channel.send(embed); }); }; exports.config = { name: 'banir', aliases: ['ban'], - category: '👮‍♂️ Moderação' + description: language.ban.config.description, + category: '👮‍♂️ Moderação', + public: true }; \ No newline at end of file diff --git a/src/Commands/bot.js b/src/Commands/bot.js index 15866f1..1e47529 100644 --- a/src/Commands/bot.js +++ b/src/Commands/bot.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -16,21 +17,37 @@ along with this program. If not, see . */ -const { emojis } = require('../Utils'); +const { emoji, sysdata } = require('../Utils'); const Discord = require('discord.js'); -const pak = require('../../package.json'); -const { links } = require('../../Configs'); +const { config, links } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); +const pkg = require('../../package.json'); -exports.run = (aruna, message) => { +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + + const preEmbed = new Discord.RichEmbed() + .setTitle(language.bot.embed.pre.title.replace('%s', emoji.loading).replace('%s', message.member.displayName)) + .setColor('#00000') + .setDescription(language.bot.embed.pre.description) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); + + const preMessage = await message.channel.send(preEmbed); + + const time = 60000; let totalSeconds = (aruna.uptime / 1000); const days = Math.floor(totalSeconds / 86400); + totalSeconds %= 86400; const hours = Math.floor(totalSeconds / 3600); totalSeconds %= 3600; const minutes = Math.floor(totalSeconds / 60); const seconds = Math.floor(totalSeconds % 60); - var uptime = ''; + var uptime; if (days >= 1) { uptime = `${days}d, ${hours}h, ${minutes}m`; @@ -42,36 +59,176 @@ exports.run = (aruna, message) => { uptime = `${seconds}s`; } + /* async function getServerCount() { + const req = await aruna.shard.fetchClientValues('guilds.size'); + + return req.reduce((p, n) => p + n, 0); + } + + async function getChannelCount() { + const req = await aruna.shard.fetchClientValues('channels.size'); + + return req.reduce((p, n) => p + n, 0); + } + + async function getUserCount() { + const req = await aruna.shard.broadcastEval('this.guilds.reduce((p, n) => p + n.memberCount, 0)'); + + return req.reduce((p, n) => p + n, 0); + } */ + const user = message.guild.member(aruna.user); - const name = user.nickname !== null ? user.nickname : aruna.user.username; + const name = user.displayName; + + const version = pkg.version; 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); + .setDescription(language.bot.embed.basic.description) + .addField(language.bot.embed.basic.field[0].replace('%s', emoji.robot), name, true) + .addField(language.bot.embed.basic.field[1].replace('%s', '📡'), version, true) + .addField(language.bot.embed.basic.field[2].replace('%s', '🕰️'), uptime, true) + // .addField(language.bot.embed.basic.field[3].replace('%s', '📃'), await getChannelCount(), true) + // .addField(language.bot.embed.basic.field[4].replace('%s', '🖥️'), await getServerCount(), true) + // .addField(language.bot.embed.basic.field[5].replace('%s', '🕹️'), await getUserCount(), true) + .addField(language.bot.embed.basic.field[6].replace('%s', '💻'), aruna.shard.id, true) + .addField(language.bot.embed.basic.field[7].replace('%s', '💠'), aruna.shard.count, true) + .addField(language.bot.embed.basic.field[8].replace('%s', '🏓'), `${Math.round(aruna.ping)}ms`, true) + .setThumbnail(aruna.user.displayAvatarURL) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag), message.author.avatarURL) + .setTimestamp(); + + if (links.invites[0]) { + embed.addField(language.bot.embed.basic.field[9], + language.bot.generic.linkr + .replace('%s', language.generic.strings.link) + .replace('%s', links.invites[0]), true); + } + + if (links.website) { + embed.addField(language.bot.embed.basic.field[10], + language.bot.generic.linkr + .replace('%s', language.generic.strings.link) + .replace('%s', links.website), true); + } + + if (links.supportServers[0]) { + embed.addField(language.bot.embed.basic.field[11], + language.bot.generic.linkr + .replace('%s', language.generic.strings.link) + .replace('%s', links.supportServers[0]), true); + } + + var os = await sysdata.GetOSData(); + + var rambo = await sysdata.GetMemoryAmount(); + + const ram = Math.round(rambo.used / 1024 / 1024 * 10) / 10; + + const ramT = Math.round(rambo.total / 1024 / 1024 * 10) / 10; + + var cpu = await sysdata.GetCPUModel(); + + const embed2 = new Discord.RichEmbed() + .setAuthor(aruna.user.username, `${aruna.user.avatarURL}`) + .setDescription(language.bot.embed.advanced.description) + .addField(language.bot.embed.advanced.field[0], process.version) + .addField(language.bot.embed.advanced.field[1], pkg.dependencies['discord.js'].replace('^', '')) + .addField(language.bot.embed.advanced.field[2], + `${language.bot.embed.advanced.content[2][0]} ${os.distro}\n + ${language.bot.embed.advanced.content[2][1]} ${cpu.manufacturer} ${cpu.brand}\n + ${language.bot.embed.advanced.content[2][2]} ${cpu.cores}\n + ${language.bot.embed.advanced.content[2][3]} ${ram}mb / ${ramT}mb + `) + .addField(language.bot.embed.advanced.field[3], language.bot.embed.advanced.content[3]) + .addField(language.bot.embed.advanced.field[4], language.bot.embed.advanced.content[4]) + .addField(language.bot.embed.advanced.field[5], language.bot.embed.advanced.content[5]) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag), message.author.avatarURL) + .setTimestamp(); + + message.channel.send(embed).then(async msg => { + await collector1(msg, false); + preMessage.delete(); + }); + + async function collector1 (msg, needRemoveEmote) { + if (needRemoveEmote) { + await removeEmote(msg); + await msg.edit(embed); + } + await msg.react('🔴'); + await msg.react('▶️'); + + const filter1 = (reaction, user) => { + return ['🔴', '▶️'].includes(reaction.emoji.name) && user.id === message.author.id; + }; + + const collector = msg.createReactionCollector(filter1, { max: 1, time: time, errors: ['time'] }); + + collector.on('collect', async (reaction, reactionCollector) => { + const reactionName = reaction.emoji.name; + + switch (reactionName) { + case '▶️': + collector2(msg, true); + break; + case '🔴': + default: + removeEmote(msg); + break; + } + }); + + collector.on('end', async () => { + await removeEmote(msg); + }); + } + + async function collector2 (msg, needRemoveEmote) { + if (needRemoveEmote) { + await removeEmote(msg); + await msg.edit(embed2); + } + + await msg.react('◀️'); + await msg.react('🔴'); + + const filter1 = (reaction, user) => { + return ['🔴', '◀️'].includes(reaction.emoji.name) && user.id === message.author.id; + }; + + const collector = msg.createReactionCollector(filter1, { max: 1, time: time, errors: ['time'] }); + + collector.on('collect', async (reaction, reactionCollector) => { + const reactionName = reaction.emoji.name; + + switch (reactionName) { + case '◀️': + collector1(msg, true); + break; + case '🔴': + default: + removeEmote(msg); + break; + } + + }); + + collector.on('end', async () => { + await removeEmote(msg); + }); + } + + async function removeEmote(msg) { + await msg.clearReactions(); + } }; exports.config = { - name: 'bot', - aliases: ['botinfo'], - description: 'Lista as Principais informações do bot', - category: `${emojis.robot} Utilidades` + name: 'botinfo', + aliases: ['bot', 'uptime', 'robotinfo', 'info'], + category: `${emoji.robot} Utilidades`, + description: language.bot.config.description, + public: true }; diff --git a/src/Commands/calc.js b/src/Commands/calc.js index 0a61666..80cf5a9 100644 --- a/src/Commands/calc.js +++ b/src/Commands/calc.js @@ -19,19 +19,24 @@ const { emojis } = require('../Utils'); const Discord = require('discord.js'); const math = require('mathjs'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = (aruna, message, args, langc) => { + + if (langc) { + language = langc; + } -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.') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.calculator.embed.error.description1) .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.' - ) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.calculator.embed.error.description2) .setTimestamp(); if (!args[0]) return message.channel.send(error1); @@ -39,19 +44,18 @@ exports.run = (aruna, message, args) => { var response; try { - response = math.eval(args.join(' ')); + response = math.evaluate(args.join(' ')); } catch (e) { + console.error(e); return message.channel.send(error2); } const embed = new Discord.RichEmbed() - .setAuthor('Calculadora V2') - .addField( - `(${emojis.upload}) Entrada`, + .setTitle(language.calculator.embed.sucess.title) + .addField(language.calculator.embed.sucess.field1.replace('[emoji]', emojis.upload), `\`\`\`js\n${args.join(' ')}\`\`\`` ) - .addField( - `(${emojis.dev}) Saida`, + .addField(language.calculator.embed.sucess.field2.replace('[emoji]', emojis.dev), `\`\`\`js\n${response}\`\`\`` ) .setColor([54, 57, 63]); @@ -60,6 +64,8 @@ exports.run = (aruna, message, args) => { exports.config = { name: 'calc', + description: language.calculator.config.description, aliases: ['calculadora', 'math', 'matematica', 'calcular', 'calculator'], - category: `${emojis.robot} Utilidades` + category: `${emojis.robot} Utilidades`, + public: true }; diff --git a/src/Commands/clear.js b/src/Commands/clear.js index c103c7f..9d98040 100644 --- a/src/Commands/clear.js +++ b/src/Commands/clear.js @@ -16,71 +16,73 @@ along with this program. If not, see . */ -function verify(messages, args, message) { - if (args[0] == messages.size) - return ( - 'Foram deletadas `' + - messages.size + - '` mensagens por ' + - `<@${message.author.id}>` - ); - else - return ( - `<@${message.author.id}> deletou apenas \`${messages.size}\`` + - ' mensagens das ' + - `\`${args[0]} requisitadas\`` + - ' por não existirem outras ou serem mais antigas que 2 semanas.' - ); +function verify(messages, args, message, language) { + if (args[0] == messages.size) { + return (language.clear.sucess.message1.replace('[messages]', messages.size).replace('[user]', message.author)); + } else { + return (language.clear.sucess.message2.replace('[messages]', messages.size).replace('[user]', message.author).replace('[request]', args[0])); + } } const Discord = require('discord.js'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); -exports.run = async (client, message, args) => { +exports.run = async (aruna, message, args, langc) => { + + if (langc) { + language = langc; + } 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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.clear.embed.error.description1.replace('[manageMessages]', language.generic.permissions.manageMessages)) .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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.clear.embed.error.description2.replace('[manageMessages]', language.generic.permissions.manageMessages)) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.clear.embed.error.description3) .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.') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.clear.embed.error.description4) .setTimestamp(); - if ( - !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); + if (!message.guild.members.get(aruna.user.id).hasPermission('MANAGE_MESSAGES')) + return message.channel.send(error2); + if (!args[0]) return message.channel.send(error3); + if (args[0] > 100 || args[0] <= 1) return message.channel.send(error4); - await message.delete(); - await message.channel.bulkDelete(args[0]).then(messages => { - message.channel - .send(verify(messages, args, message)) - .then(msg => msg.delete(10000)); + await message.delete().then(async () => { + await message.channel.fetchMessages({ limit: args[0] }).then(async messages => { + await message.channel.bulkDelete(messages, true).then(async msgs => { + await message.channel.send(verify(msgs, args, message, language)).then(async msg => { + await msg.delete(10000); + }); + }); + }); }); }; exports.config = { name: 'clear', - aliases: [], - category: '👮‍♂️ Moderação' + description: language.clear.config.description, + aliases: ['limpar'], + category: '👮‍♂️ Moderação', + public: true }; diff --git a/src/Commands/config.js b/src/Commands/config.js index 2f9cd45..1f6d14a 100644 --- a/src/Commands/config.js +++ b/src/Commands/config.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ /* eslint-disable max-len */ /* This File is part of ArunaBot @@ -18,140 +17,299 @@ along with this program. If not, see . */ -const { database } = require('../../Configs'); +const { config, database } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); const Discord = require('discord.js'); -exports.run = async (aruna, message, args) => { - var validOptions = ['rank', 'ticket', 'autorole']; +var options = ['rank', 'autorole', 'prefix', 'language', 'idioma']; +var userOptions = ['language', 'idioma']; - const guild = await database.Guilds.findOne({ _id: message.guild.id }); - - const user = await database.Users.findOne({ _id: message.author.id }); +exports.run = async (aruna, message, args, langc) => { - 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!') - .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`') + if (langc) { + language = langc; + } + + const noPermission = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.noperm.replace('[manageGuild]', language.generic.permissions.manageGuild)) .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: ' + - '``' + - validOptions + - '``' - ) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.description1.replace('[OPTIONS]', options.join(', '))) .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.' - ) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.description2) .setTimestamp(); - if (!message.member.hasPermission('MANAGE_GUILD')) - return message.channel.send(nopermission); + const guild = await database.Guilds.findOne({ _id: message.guild.id }); + + const user = await database.Users.findOne({ _id: message.author.id }); + + if (!message.member.hasPermission('MANAGE_GUILD') && (!args || !args[0] || !userOptions.includes(args[0].toLowerCase()))) + return message.channel.send(noPermission); if (!args || !args[0]) return message.channel.send(error1); - if (!validOptions.includes(args[0].toLowerCase())) return message.channel.send(error1); + if (!options.includes(args[0].toLowerCase()) && !userOptions.includes(args[0].toLowerCase())) { + return message.channel.send(error1); + } + + var argument; - const command = args[0].toLowerCase(); + args[1] !== undefined ? argument = args[1].toLowerCase() : null; - if (command === 'rank') { - guild.verify = guild.rankEnable; - } else if (command === 'ticket') { - guild.verify = guild.ticketEnable; - } else if (command === 'autoRole' || command === 'autorole') { - guild.verify = guild.autoRole; + switch (args[0].toLowerCase()) { + case 'prefix': + prefixVar(argument); + break; + case 'rank': + rankVar(argument); + break; + case 'language': + case 'idioma': + languageVar(argument); + break; + default: + return message.channel.send(error1); } - const no = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Neste momento, o comando ${command} não está ativado. Para ativar, use \`\`${guild.prefix}config ${command} ativar\`\`.` - ) - .setTimestamp(); - const yes = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription( - `Neste momento, o comando ${command} está ativado. Para desativar, use \`\`${guild.prefix}config ${command} desativar\`\`.` - ) - .setTimestamp(); + async function prefixVar(action) { + const actionList = ['set', 'remove', 'definir', 'remover']; - const dbcommand = await database.Comandos.findOne({ name: `${command}` }); + if (!action || !actionList.includes(action)) return invalidAction(actionList); - 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 (guild.verify === false) { - return message.channel.send(no); - } else { - return message.channel.send(yes); + const prefixError = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.prefix.description1) + .setTimestamp(); + const prefixError2 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.prefix.description2) + .setTimestamp(); + const prefixError3 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.prefix.description3) + .setTimestamp(); + const prefixRemove = new Discord.RichEmbed() + .setColor([0, 255, 0]) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.prefix.description1.replace('[prefix]', config.prefix)) + .setTimestamp(); + const prefixDefinido = new Discord.RichEmbed() + .setColor([0, 255, 0]) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.prefix.description2.replace('[prefix]', args[2] || undefined)) + .setTimestamp(); + + switch (action) { + case 'set': + case 'definir': + if (!args[2]) return message.channel.send(prefixError); + + if (args[2] === guild.prefix) return message.channel.send(prefixError2); + + guild.prefix = args[2]; + + guild.save(); + + message.channel.send(prefixDefinido); + + break; + case 'remove': + case 'remover': + if (guild.prefix === config.prefix) return message.channel.send(prefixError3); + + guild.prefix = config.prefix; + + guild.save(); + + message.channel.send(prefixRemove); + + break; + default: + return invalidAction(actionList); } } - - const todo = args[1].toLowerCase(); - const ativo = new Discord.RichEmbed() - .setColor([0, 255, 0]) - .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter('Sucesso!') - .setDescription(`O comando \`${command}\` foi ativado com sucesso!`) - .setTimestamp(); + async function rankVar (action) { + const actionList = ['enable', 'ativar', 'disable', 'desativar']; - const inativo = new Discord.RichEmbed() - .setColor([0, 255, 0]) - .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter('Sucesso!') - .setDescription(`O comando \`${command}\` foi desativado com sucesso!`) - .setTimestamp(); + if (!action) return isEnabled ('rank', true); + + if (!actionList.includes(action)) return invalidAction(actionList); + + const result = await isEnabled('rank', false); + + if (result === undefined) return; + + switch (action) { + case 'enable': + case 'ativar': + if (result.enabled) return message.channel.send(result.message); + + guild.rankEnable = true; - if (todo == 'ativar' && guild.verify === false || todo == 'enable' && guild.verify === true) { - if (command === 'rank') { - guild.rankEnable = true; - guild.save(); - } else if (command === 'ticket') { - const { activeticket } = require('../Utils'); - activeticket.run(aruna, message); - guild.ticketEnable = true; - guild.save(); - } else if (command === 'autoRole' || command === 'autorole') { - guild.autoRole = true; - guild.save(); + await guild.save(); + + final(true, 'rank'); + break; + case 'disable': + case 'desativar': + if (!result.enabled) return message.channel.send(result.message); + + guild.rankEnable = false; + + await guild.save(); + + final(false, 'rank'); + break; + default: + invalidAction(actionList); + break; } - return message.channel.send(ativo); - } else if (guild.verify === false) return message.channel.send(yes); - - if (todo == 'desativar' && guild.verify === true || todo == 'disable' && guild.verify === true) { - if (command === 'rank') { - guild.rankEnable = false; - guild.save(); - } else if (command === 'ticket') { - guild.ticketEnable = false; - guild.save(); - } else if (command === 'autoRole' || command === 'autorole') { - guild.autoRole = false; - guild.save(); + } + + async function languageVar (type) { + const validLanguages = config.validLanguages; + const actionList = ['user', 'guild']; + + const invalidLanguage = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.language.description1.replace('[LANGUAGES]', `\`\`${validLanguages.join(', ')}\`\``)) + .setTimestamp(); + + if (!type || !actionList.includes(type)) return invalidAction(actionList); + + if (type === 'guild' && !message.member.hasPermission('MANAGE_GUILD')) return message.channel.send(noPermission); + + if (!args[2] || !validLanguages.includes(args[2])) return message.channel.send(invalidLanguage); + + const setGuildLanguage = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.language.description1.replace('[LANGUAGE]', args[2])) + .setTimestamp(); + + const errorGuildLanguage = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.language.description2) + .setTimestamp(); + + const setUserLanguage = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.language.description2.replace('[LANGUAGE]', args[2])) + .setTimestamp(); + + const errorUserLanguage = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.language.description3) + .setTimestamp(); + + switch (args[1]) { + case 'guild': + if (guild.language === args[2]) return message.channel.send(errorGuildLanguage); + + guild.language = args[2]; + + await guild.save(); + + message.channel.send(setGuildLanguage); + break; + case 'user': + if (user.language === args[2]) return message.channel.send(errorUserLanguage); + + user.language = args[2]; + + await user.save(); + + message.channel.send(setUserLanguage); + break; + default: + invalidAction(actionList); + break; } - return message.channel.send(inativo); - } else if (guild.verify === true) return message.channel.send(no); + } + + async function isEnabled (command, sendMessage) { + const dbCommand = await database.Commands.findOne({ _id: `${command}` }); + + if (!dbCommand || (!dbCommand.public && !user.SUPER)) { + message.channel.send(error2); + return undefined; + } + + const replacer = /\[COMMAND\]/g; + + const no = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.generic.no.replace(replacer, command).replace('[PREFIX]', guild.prefix)) + .setTimestamp(); + const yes = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.generic.yes.replace(replacer, command).replace('[PREFIX]', guild.prefix)) + .setTimestamp(); + + if (guild[command + 'Enable']) { + if (sendMessage) message.channel.send(yes); + return { enabled: true, message: yes }; + } else { + if (sendMessage) message.channel.send(no); + return { enabled: false, message: no }; + } + } + + function invalidAction (optionL) { + const optionError = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.error.invalidaction.replace('[OPTIONS]', `\`\`${optionL.join(', ')}\`\``)) + .setTimestamp(); + return message.channel.send(optionError); + } + + function final (result, command) { + const enabled = new Discord.RichEmbed() + .setColor([0, 255, 0]) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.description1.replace('[COMMAND]', command)) + .setTimestamp(); + + const disabled = new Discord.RichEmbed() + .setColor([0, 255, 0]) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer.replace('[username]', message.member.displayName)) + .setDescription(language.config.embed.sucess.description2.replace('[COMMAND]', command)) + .setTimestamp(); + + if (result) { + return message.channel.send(enabled); + } else { + return message.channel.send(disabled); + } + } }; exports.config = { name: 'config', - aliases: ['configurar', 'configurações'], - category: '⚙️ Configurações' + aliases: ['configurar', 'configurações', 'settings'], + description: language.config.config.description, + category: '⚙️ Configurações', + public: true }; diff --git a/src/Commands/dice.js b/src/Commands/dice.js index 2cbc316..94f89b4 100644 --- a/src/Commands/dice.js +++ b/src/Commands/dice.js @@ -1,150 +1,143 @@ -/* - 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 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!') - .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.') - .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!') - .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!') - .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') - .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!') - .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!') - .setTimestamp(); - - if (!args[0]) return message.channel.send(error5); - - const split = message.content - .slice(5) - .trim() - .split('d' || 'D'); - - if (!split) return message.channel.send(error5); - - var number = split[0]; - - if (!number) return message.channel.send(error5); - - const dice = split[1]; - - if (!dice) return message.channel.send(error1); - - if (dice > 200) return message.channel.send(error2); - - if (number > 50) return message.channel.send(error3); - - if (dice == 0) return message.channel.send(error6); - - if (number == 0) return message.channel.send(error7); - - var diceStr = ''; - - if (number == 1) diceStr = 'dado'; - else diceStr = 'dados'; - - const error8 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) - .setFooter(`Algo deu errado, ${message.author.username}`) - .setDescription(`Todos sabemos que o resultado de ${number} ${diceStr} de 1 lado é ${number}!`) - .setTimestamp(); - - if (dice == 1) return message.channel.send(error8); - - var result = []; - - var loop = number; - var embed = ''; - - var idVar = setInterval(() => { - if (loop <= 0) { - - if (number > 1) { - - embed = new Discord.RichEmbed() - .setAuthor( - `Resultado dos ${number} dados de ${dice} lados girados por ${message.author.username}`, - message.author.avatarURL - ) - .setDescription(`\`${result}\``) - .setFooter(`Dados de ${message.author.username}`) - .setTimestamp(); - } else { - embed = new Discord.RichEmbed() - .setAuthor( - `Resultado do dado de ${dice} lados girado por ${message.author.username}`, - message.author.avatarURL - ) - .setDescription(`\`${result[0]}\``) - .setFooter(`Dados de ${message.author.username}`) - .setTimestamp(); - } - clearInterval(idVar); - return message.channel.send(embed); - } - - loop = loop - 1; - - var math = Math.floor(Math.random() * dice) + 1; - - if (math >= 500) { - clearInterval(idVar); - return message.channel.send(error4); - } - - result.push(math); - }, 0,1); -}; -exports.config = { - name: 'dice', - aliases: ['dado'], - category: '🎉 Entretenimento' -}; +/* + 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 { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (aruna, message, args, langc, prefix, comando) => { + if (langc) { + language = langc; + } + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description1) + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description2) + .setTimestamp(); + + const error3 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description3) + .setTimestamp(); + + const error4 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description4) + .setTimestamp(); + + const error5 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description5) + .setTimestamp(); + + const error6 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description6) + .setTimestamp(); + + const error7 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description7) + .setTimestamp(); + + if (!args[0]) return message.channel.send(error5); + + const split = message.content + .slice(comando.length + prefix.length) + .trim() + .split('d' || 'D' || ' '); + + if (!split) return message.channel.send(error5); + + var number = split[0]; + + if (!number) return message.channel.send(error5); + + const dice = split[1]; + + if (!dice) return message.channel.send(error1); + + if (dice > 200) return message.channel.send(error2); + + if (number > 50) return message.channel.send(error3); + + if (dice == 0) return message.channel.send(error6); + + if (number == 0) return message.channel.send(error7); + + var diceStr = number == 1 ? language.dice.embed.generic.dice : language.dice.embed.generic.dices; + + const error8 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.dice.embed.error.description8.replace(/\[NUMBER\]/g, number).replace('[diceString]', diceStr)) + .setTimestamp(); + + if (dice == 1) return message.channel.send(error8); + + var result = []; + + var loop = number; + var embed = new Discord.RichEmbed() + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); + + var idVar = setInterval(() => { + if (loop <= 0) { + if (number > 1) { + embed.setAuthor(language.dice.embed.sucess['1'].title.replace('[username]', message.member.displayName).replace('[NUMBER]', number).replace('[DICE]', dice), + message.author.avatarURL) + .setDescription(language.dice.embed.sucess['1'].description.replace('[DICES]', result.join(', ')).replace('[TOTAL]', result.reduce((a, b) => a + b))); + } else { + embed.setAuthor(language.dice.embed.sucess['2'].title.replace('[username]', message.member.displayName).replace('[DICE]', dice), message.author.avatarURL) + .setDescription(language.dice.embed.sucess['2'].description.replace('[DICES]', result[0])); + } + clearInterval(idVar); + return message.channel.send(embed); + } + + loop = loop - 1; + + var math = Math.floor(Math.random() * dice) + 1; + + if (math >= 500) { + clearInterval(idVar); + return message.channel.send(error4); + } + + result.push(math); + }, 0,1); +}; +exports.config = { + name: 'dice', + aliases: ['dado', 'roll'], + description: language.dice.config.description, + category: '🎉 Entretenimento', + public: true +}; diff --git a/src/Commands/eval.js b/src/Commands/eval.js index 6a68055..9af64d3 100644 --- a/src/Commands/eval.js +++ b/src/Commands/eval.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -19,58 +20,55 @@ 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); +exports.run = async (aruna, message, args, langc, prefix, comando) => { + 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 }); + try { + var str; + // eslint-disable-next-line max-len + if (code.includes(`${aruna.token}` || `${process.env.TOKEN}` || `${config.token}` || 'aruna.token' || 'process.env.token' || 'config.token')) { + str = 'Erro! Você não pode exibir esta informação!'; + } else { + const ev = await eval(code); + 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' }); + if (str.length > 1800) { + str = str.substr(0, 1800); + str = str + '...'; } - }).catch(e => { - console.log(e); - }); + + 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' }); + } }; exports.config = { name: 'eval', aliases: [], - category: '🧰 Administração' + category: '🧰 Administração', + public: false }; diff --git a/src/Commands/flip.js b/src/Commands/flip.js index ccda752..d70f753 100644 --- a/src/Commands/flip.js +++ b/src/Commands/flip.js @@ -16,19 +16,29 @@ along with this program. If not, see . */ -exports.run = async (aruna, message) => { - var add = Math.round(Math.random()); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (aruna, message, args, langc) => { + + if (langc) { + language = langc; + } + + var add = await Math.round(Math.random()); if (add == 0){ - message.channel.send('Cara!'); + message.channel.send(language.flip.heads); } else if (add == 1){ - message.channel.send('Coroa!'); + message.channel.send(language.flip.tails); } else { - message.reply('Erro!'); + message.reply(language.generic.error); } }; exports.config = { name: 'flip', + description: language.flip.config.description, aliases: ['moeda', 'girar'], - category: '🎉 Entretenimento' + category: '🎉 Entretenimento', + public: true }; \ No newline at end of file diff --git a/src/Commands/git.js b/src/Commands/git.js index 8d025e6..aa10bb8 100644 --- a/src/Commands/git.js +++ b/src/Commands/git.js @@ -21,18 +21,38 @@ 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!`); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + + const error = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.invite.embed.error.description) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + + if (!pkg.repository.url) { + return message.channel.send(error); + } + + const embed = new Discord.RichEmbed() + .setAuthor(language.generic.embed.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(`${language.github.embed.sucess.description.line1} +\n${language.github.embed.sucess.description.line2.replace('[url]', pkg.repository.url)} +\n${language.github.embed.sucess.description.line3}`) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); message.channel.send(embed); }; exports.config = { name: 'github', aliases: ['git', 'repo', 'repositório', 'repositorio'], - category: `${emoji.robot} Utilidades` + description: language.github.config.description, + category: `${emoji.robot} Utilidades`, + public: true }; \ No newline at end of file diff --git a/src/Commands/help.js b/src/Commands/help.js index 4db9583..c928bad 100644 --- a/src/Commands/help.js +++ b/src/Commands/help.js @@ -18,27 +18,29 @@ */ const Discord = require('discord.js'); -const { database } = require('../../Configs'); +const { config, database } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); const { emoji } = require('../Utils'); -exports.run = async (aruna, message) => { +exports.run = async (aruna, message, args, langc) => { + + if (langc) { + language = langc; + } + const embed = new Discord.RichEmbed(message.author); - const error1 = new Discord.RichEmbed() - .setAuthor(`Oops, ${message.author.username}`, message.author.avatarURL) + const error = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) .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.' - ) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.help.embed.error.description) .setTimestamp(); - const sucesso = new Discord.RichEmbed() + const sucess = new Discord.RichEmbed() .setColor([0, 255, 0]) - .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter('Comandos Enviados') - .setDescription( - 'Os comandos foram enviados em seu privado com sucesso!' - ) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setDescription(language.help.embed.sucess.description) .setTimestamp(); const guildDB = await database.Guilds.findOne({ _id: message.guild.id }); @@ -46,43 +48,58 @@ exports.run = async (aruna, message) => { var prefix = guildDB.prefix; - var categories = ''; + var categories; - categories = aruna.commands - .map(c => c.config.category) - .filter((v, i, a) => a.indexOf(v) === i); - categories - .sort((a, b) => a.localeCompare(b)) - .forEach(category => { - const commands = aruna.commands - .filter(c => c.config.category === category) - .sort((a, b) => a.config.name.localeCompare(b.config.name)) - .map(c => prefix + c.config.name) - .join(', '); - if (category == '🧰 Administração' && userDB.SUPER == false) { - null; - } else { + if (!userDB.SUPER) { + categories = aruna.commands + .map(c => c.config.category) + .filter((v, i, a) => a.indexOf(v) === i); + categories + .sort((a, b) => a.localeCompare(b)) + .forEach(category => { + const commands = aruna.commands + .filter(c => c.config.category === category && c.config.public === true) + .sort((a, b) => a.config.name.localeCompare(b.config.name)) + .map(c => prefix + c.config.name) + .join(', '); + if (category == '🧰 Administração') { + null; + } else { + embed.addField(`${category}`, '```' + commands + '```', false); + } + }); + } else { + categories = aruna.commands + .map(c => c.config.category) + .filter((v, i, a) => a.indexOf(v) === i); + categories + .sort((a, b) => a.localeCompare(b)) + .forEach(category => { + const commands = aruna.commands + .filter(c => c.config.category === category) + .sort((a, b) => a.config.name.localeCompare(b.config.name)) + .map(c => prefix + c.config.name) + .join(', '); embed.addField(`${category}`, '```' + commands + '```', false); - } - embed.setColor('#004080'); - embed.setAuthor( - `${aruna.user.username}`, - `${aruna.user.displayAvatarURL}` - ); - embed.setFooter(`Comando Solicitado por ${message.author.username}#${message.author.discriminator}`, message.author.avatarURL); - embed.setTimestamp(); - }); + }); + } + + embed.setColor('#004080'); + embed.setAuthor(aruna.user.username, aruna.user.displayAvatarURL); + embed.setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag), message.author.avatarURL); + embed.setTimestamp(); - message.channel.send(sucesso).then(msg => { - message.author.send(embed).catch(err => { - console.log(err); - msg.edit(error1); - }); + message.author.send(embed).then(() => { + message.channel.send(sucess); + }).catch(() => { + message.channel.send(error); }); }; exports.config = { name: 'help', - aliases: ['ajuda', 'comandos', 'commands'], - category: `${emoji.robot} Utilidades` + aliases: ['ajuda', 'comandos', 'commands', 'comando', 'command'], + category: `${emoji.robot} Utilidades`, + description: language.help.config.description, + public: true }; diff --git a/src/Commands/invite.js b/src/Commands/invite.js index edf4e7c..ab9cf15 100644 --- a/src/Commands/invite.js +++ b/src/Commands/invite.js @@ -18,21 +18,39 @@ */ const { emoji } = require('../Utils'); -const { links } = require('../../Configs'); +const { config, links } = require('../../Configs'); const Discord = require('discord.js'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); -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](${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!`); +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + + const error = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.invite.embed.error.description) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + + if (!links.invites[0]) { + return message.channel.send(error); + } + + const embed = new Discord.RichEmbed() + .setAuthor(language.generic.embed.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(`${language.invite.embed.sucess.description.line1} +\n${language.invite.embed.sucess.description.line2.replace('[link]', links.invites[0])} +\n${language.invite.embed.sucess.description.line3}`) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); message.channel.send(embed); }; exports.config = { name: 'invite', aliases: ['convidar', 'convite'], - category: `${emoji.robot} Utilidades` + description: language.invite.config.description, + category: `${emoji.robot} Utilidades`, + public: true }; diff --git a/src/Commands/kick.js b/src/Commands/kick.js index 4cd322a..94ab4fa 100644 --- a/src/Commands/kick.js +++ b/src/Commands/kick.js @@ -18,51 +18,64 @@ */ const Discord = require('discord.js'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); // 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]); - +exports.run = async (aruna, message, args, langc, prefix, command) => { + if (langc) { + language = langc; + } + 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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description1.replace('[kickMembers]', language.generic.permissions.kickMembers)) .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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description2.replace('[kickMembers]', language.generic.permissions.kickMembers)) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description3) .setTimestamp(); + + if (!args[0] || isNaN(args[0]) && (!args[0].includes('<@') || !args[0].includes('>'))) return message.channel.send(error3); + + const kuser = await aruna.fetchUser(message.mentions.users.first() || args[0]); + + if (!kuser) return message.channel.send(error3); + 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!`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description4.replace('[ownerName]', kuser.username)) .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}.`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description5.replace('[username]', 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}`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.kick.embed.error.description6.replace('[username]', 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} :(`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.generic.embed.error.description) .setTimestamp(); if (!message.member.hasPermission('KICK_MEMBERS')) @@ -70,8 +83,6 @@ exports.run = async (aruna, message, args) => { 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]) ); @@ -85,34 +96,44 @@ exports.run = async (aruna, message, args) => { return message.channel.send(error6); } - var reason = ''; - if (!args.join(' ').slice(19)) { - reason = `Punido por: ${message.author.username}`; + var reason = message.content.slice(command.length + prefix.length).trim(); + + if (args[0].includes('<@!') && args[0].includes('>')) { + reason = reason.slice(5 + kuser.id.length).trim(); + } else if (args[0].includes('<@') && args[0].includes('>')) { + reason = reason.slice(4 + kuser.id.length).trim(); } else { - reason = - `Punido por: ${message.author.username} com o Motivo: ` + - args.join(' ').slice(19); + reason = reason.slice(kuser.id.length).trim(); + } + + if (!reason) { + reason = language.kick.reason['1'].replace('[username]', message.author.username); + } else { + reason = language.kick.reason['2'].replace('[username]', message.author.username).replace('[reason]', reason); } 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) + .setAuthor(language.kick.embed.sucess.title) + .setDescription(language.kick.embed.sucess.description.replace('[username]', kuser.username)) + .addField(language.kick.embed.sucess.field1.title, language.kick.embed.sucess.field1.content.replace('[username]', kuser.username).replace('[userId]', kuser.id), false) + .addField(language.kick.embed.sucess.field2, message.author, false) + .addField(language.kick.embed.sucess.field3, dateFormat(now, language.generic.strings.date), false) + .addField(language.kick.embed.sucess.field4, reason, false) .setTimestamp(); - message.channel.send(embed).then(async msg => { - await message.guild.ban(kuser, reason).catch(err => { - console.log(err); - msg.edit(error7); - }); + + message.guild.member(kuser).kick(reason).catch(err => { + console.log(err); + return message.channel.send(error7); + }).then(() => { + message.channel.send(embed); }); }; exports.config = { name: 'kickar', aliases: ['kick', 'expulsar'], - category: '👮‍♂️ Moderação' + description: language.kick.config.description, + category: '👮‍♂️ Moderação', + public: true }; \ No newline at end of file diff --git a/src/Commands/maintenance.js b/src/Commands/maintenance.js index 9900c36..477bbc6 100644 --- a/src/Commands/maintenance.js +++ b/src/Commands/maintenance.js @@ -1,20 +1,31 @@ /* eslint-disable no-unused-vars */ +/* + 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) => { - 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' + category: '🧰 Administração', + public: false }; \ No newline at end of file diff --git a/src/Commands/massremove.js b/src/Commands/massremove.js new file mode 100644 index 0000000..e3af88e --- /dev/null +++ b/src/Commands/massremove.js @@ -0,0 +1,126 @@ +/* + 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'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = (aruna, message, args, langc) => { + var role; + if (!args[0]) { + role = undefined; + } else { + role = + message.mentions.roles.first() || + message.guild.roles.get(args[0]) || + message.guild.roles.find(r => + r.name.toLowerCase().includes(args[0].toLowerCase()) + ) || + undefined; + } + + if (langc) { + language = langc; + } + + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.error.description1.replace('[manageRoles]', language.generic.permissions.manageRoles)) + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.error.description2.replace('[manageRoles]', language.generic.permissions.manageRoles)) + .setTimestamp(); + + if (!message.member.hasPermission('MANAGE_ROLES')) + return message.channel.send(error1); + if (!message.guild.members.get(aruna.user.id).hasPermission('MANAGE_ROLES')) + return message.channel.send(error2); + + const error3 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.error.description3) + .setTimestamp(); + + if (!role || role === undefined) return message.channel.send(error3); + + const error4 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.error.description4.replace('[roleName]', role.name)) + .setTimestamp(); + + const error5 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.error.description5.replace('[roleName]', role.name)) + .setTimestamp(); + + if ( + role.position >= + message.guild.members.get(aruna.user.id).highestRole.position + ) + return message.channel.send(error4); + + if ( + role.position >= + message.guild.members.get(message.author.id).highestRole.position && + message.guild.owner.id !== message.author.id + ) + return message.channel.send(error5); + + const executando = new Discord.RichEmbed() + .setTitle(language.generic.embed.running.title.replace('[emoji]', emoji.loading) + .replace('[username]', message.member.displayName), message.author.avatarURL) + .setColor('#f2ff00') + .setFooter(language.generic.embed.running.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.running.description.replace('[roleName]', role.name).replace('[userSize]', message.guild.members.size)) + .setTimestamp(); + + const sucess = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setColor([0, 255, 0]) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.massRemove.embed.sucess.description.replace('[roleName]', role.name).replace('[userSize]', message.guild.members.size)) + .setTimestamp(); + + message.channel.send(executando).then(msg => { + const roleGuild = message.guild; + const memberArray = roleGuild.members.array(); + const memberCount = memberArray.length; + for (var i = 0; i < memberCount; i++) { + const member = memberArray[i]; + member.removeRole(role); + if (memberCount - i <= 1){ + msg.edit(sucess); + } + } + }); +}; + +exports.config = { + name: 'massremove', + aliases: ['masscargoremove'], + category: '👮‍♂️ Moderação', + public: true +}; \ No newline at end of file diff --git a/src/Commands/massrole.js b/src/Commands/massrole.js new file mode 100644 index 0000000..6ce6716 --- /dev/null +++ b/src/Commands/massrole.js @@ -0,0 +1,121 @@ +/* + 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'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = (aruna, message, args, langc) => { + var role; + if (!args[0]) { + role = undefined; + } else { + role = + message.mentions.roles.first() || + message.guild.roles.get(args[0]) || + message.guild.roles.find(r => + r.name.toLowerCase().includes(args[0].toLowerCase()) + ) || + undefined; + } + + if (langc) { + language = langc; + } + + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.error.description1.replace('[manageRoles]', language.generic.permissions.manageRoles)) + .setTimestamp(); + + const error2 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.error.description2.replace('[manageRoles]', language.generic.permissions.manageRoles)) + .setTimestamp(); + + if (!message.member.hasPermission('MANAGE_ROLES')) + return message.channel.send(error1); + if (!message.guild.members.get(aruna.user.id).hasPermission('MANAGE_ROLES')) + return message.channel.send(error2); + + const error3 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.error.description3) + .setTimestamp(); + + if (!role || role === undefined) return message.channel.send(error3); + + const error4 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.error.description4.replace('[roleName]', role.name)) + .setTimestamp(); + + const error5 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.error.description5.replace('[roleName]', role.name)) + .setTimestamp(); + + if (role.position >= message.guild.members.get(aruna.user.id).highestRole.position) + return message.channel.send(error4); + + if (role.position >= message.guild.members.get(message.author.id).highestRole.position + && message.guild.owner.id !== message.author.id + ) return message.channel.send(error5); + + const executando = new Discord.RichEmbed() + .setTitle(language.generic.embed.running.title.replace('[emoji]', emoji.loading) + .replace('[username]', message.member.displayName), message.author.avatarURL) + .setColor('#f2ff00') + .setFooter(language.generic.embed.running.footer.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.running.description.replace('[roleName]', role.name).replace('[userSize]', message.guild.members.size)) + .setTimestamp(); + + const sucess = new Discord.RichEmbed() + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setColor([0, 255, 0]) + .setFooter(language.generic.embed.sucess.footer2.replace('[username]', message.member.displayName)) + .setDescription(language.massRole.embed.sucess.description.replace('[roleName]', role.name).replace('[userSize]', message.guild.members.size)) + .setTimestamp(); + + message.channel.send(executando).then(msg => { + const roleGuild = message.guild; + const memberArray = roleGuild.members.array(); + const memberCount = memberArray.length; + for (var i = 0; i < memberCount; i++) { + const member = memberArray[i]; + member.addRole(role); + if (memberCount - i <= 1){ + msg.edit(sucess); + } + } + }); +}; + +exports.config = { + name: 'massrole', + description: language.massRole.config.description, + aliases: ['masscargo', 'cargomassivo'], + category: '👮‍♂️ Moderação', + public: true +}; \ No newline at end of file diff --git a/src/Commands/ping.js b/src/Commands/ping.js index becf0c9..e2d29b2 100644 --- a/src/Commands/ping.js +++ b/src/Commands/ping.js @@ -19,25 +19,38 @@ const Discord = require('discord.js'); const { emoji } = require('../Utils'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } -exports.run = async (aruna, message) => { const embed = new Discord.RichEmbed() - .setAuthor(`${aruna.user.username}`, `${aruna.user.displayAvatarURL}`) + .setTitle(language.ping.embed['1'].title.replace('[emoji]', emoji.loading).replace('[username]', message.member.displayName)) .setColor('#f5ebeb') - .setDescription('Calculando...'); + .setDescription(language.ping.embed['1'].description) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); message.channel.send(embed).then(async msg => { - // 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`); + const apiTime = Math.round(aruna.ping); + const responseTime = msg.createdTimestamp - message.createdTimestamp; + const embed2 = new Discord.RichEmbed() + .setAuthor(aruna.user.username, aruna.user.displayAvatarURL) + .setColor('#33def5') + .setDescription(`${language.ping.embed['2'].description.line1.replace('[responseTime]', responseTime)} + ${language.ping.embed['2'].description.line2.replace('[apiTime]', apiTime)}`) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); msg.edit(embed2); }); }; exports.config = { name: 'ping', + description: language.ping.config.description, aliases: ['pong'], - category: `${emoji.robot} Utilidades` + category: `${emoji.robot} Utilidades`, + public: true }; diff --git a/src/Commands/prefix.js b/src/Commands/prefix.js index 7900699..819ed56 100644 --- a/src/Commands/prefix.js +++ b/src/Commands/prefix.js @@ -18,74 +18,86 @@ const Discord = require('discord.js'); const { database, config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); -exports.run = async (aruna, message, args) => { - const server = await database.Guilds.findOne({ _id: message.guild.id }); +/** @deprecated This Will Be Removed In A future Version */ +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + const guild = await database.Guilds.findOne({ _id: message.guild.id }); 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`') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.prefix.embed.error.noperm.replace('[manageGuild]', language.generic.permissions.manageGuild)) .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).' - ) + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.prefix.embed.error.description1) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.prefix.embed.error.description2) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.prefix.embed.error.description3) .setTimestamp(); - const remove = new Discord.RichEmbed() + const prefixRemove = new Discord.RichEmbed() .setColor([0, 255, 0]) - .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter('Sucesso!') - .setDescription( - `Prefixo redefinido para \`${config.prefix}\` com sucesso!` - ) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer) + .setDescription(language.prefix.embed.sucess.description1.replace('[prefix]', config.prefix)) .setTimestamp(); - const definido = new Discord.RichEmbed() + const prefixDefinido = new Discord.RichEmbed() .setColor([0, 255, 0]) - .setAuthor(`Yay, ${message.author.username}`, message.author.avatarURL) - .setFooter('Sucesso!') - .setDescription(`Prefixo definido para \`${args[1]}\` com sucesso!`) + .setAuthor(language.generic.embed.sucess.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.sucess.footer) + .setDescription(language.prefix.embed.sucess.description2.replace('[prefix]', args[1])) + .setTimestamp(); + const deprecatedWarn = new Discord.RichEmbed() + .setTitle(language.generic.embed.deprecated.title) + .setDescription(`${language.generic.embed.deprecated.description1}\n + ${language.generic.embed.deprecated.description2.replace('[alternative]', language.prefix.deprecatedAlternative.replace('[prefix]', guild.prefix))}`) + .setColor('#fcec03') + .setFooter(language.generic.embed.deprecated.footer) .setTimestamp(); + message.channel.send(deprecatedWarn).then(msg => msg.delete(30000)); if (!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send(nopermission); - if (!args[0]) return message.channel.send(error); + if (!args[0]) return message.channel.send(error1); if (args[0] !== 'set' && args[0] !== 'remove') - return message.channel.send(error); + return message.channel.send(error1); if (args[0] === 'remove') { - if (server.prefix === config.prefix) + if (guild.prefix === config.prefix) return message.channel.send(error3); - server.prefix = config.prefix; - server.save(); - message.channel.send(remove); + guild.prefix = config.prefix; + guild.save(); + message.channel.send(prefixRemove); } if (args[0] === 'set') { if (!args[1]) return message.channel.send(error2); - server.prefix = args[1]; - server.save(); - message.channel.send(definido); + guild.prefix = args[1]; + guild.save(); + message.channel.send(prefixDefinido); } }; exports.config = { name: 'prefix', + description: language.prefix.config.description, aliases: ['prefixo', 'pref'], - category: '⚙️ Configurações' + category: '⚙️ Configurações', + public: true }; diff --git a/src/Commands/rank.js b/src/Commands/rank.js index 86c4633..ff734e3 100644 --- a/src/Commands/rank.js +++ b/src/Commands/rank.js @@ -18,18 +18,21 @@ */ const Discord = require('discord.js'); -const { database } = require('../../Configs'); +const { config, database } = require('../../Configs'); const { utils } = require('../Utils'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); -exports.run = async (aruna, message, args) => { +exports.run = async (aruna, message, args, langc) => { const guild = await database.Guilds.findOne({ _id: message.guild.id }); + if (langc) { + language = langc; + } + const error = 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. Por favor, solicite a um ADM que ative-o usando o comando \`\`${guild.prefix}config\`\`.` - ) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.generic.embed.disabled.description.replace('[config]', `${guild.prefix}config`)) .setTimestamp(); if (guild.rankEnable !== true) return message.channel.send(error); @@ -50,29 +53,26 @@ exports.run = async (aruna, message, args) => { let level = rank.level; if (level === null) level = 0; - /* - 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) - .setTimestamp(); - */ - 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(language.rank.embed.title.replace('[username]', userid.displayName), userid.user.avatarURL) + .addField(language.rank.embed.field1, level, true) + .addField(language.rank.embed.field2, xp, true) + .addField(language.rank.embed.field3, need, true) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) .setTimestamp(); message.channel.send(embed); }; exports.config = { name: 'rank', + description: language.rank.config.description, + register: { + public: true + }, aliases: ['perfil'], - category: '🎉 Entretenimento' + category: '🎉 Entretenimento', + public: true }; diff --git a/src/Commands/say.js b/src/Commands/say.js index 3e81dbd..ba97b10 100644 --- a/src/Commands/say.js +++ b/src/Commands/say.js @@ -16,15 +16,52 @@ along with this program. If not, see . */ -exports.run = async (aruna, message, prefix, comando) => { - var content = message.content.slice(comando.length).trim(); - content = content.slice(4).trim(); +const Discord = require('discord.js'); +const { config } = require('../../Configs'); + +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (aruna, message, args, langc, prefix, comando) => { + if (langc) { + language = langc; + } + + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.say.embed.error.description1.replace('[manageMessages]', language.generic.permissions.manageMessages)) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + const error2 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.say.embed.error.description2.replace('[manageMessages]', language.generic.permissions.manageMessages)) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + const error3 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.say.embed.error.description3) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + + if (!message.member.hasPermission('MANAGE_MESSAGES')) + return message.channel.send(error1); + + if (!message.guild.members.get(aruna.user.id).hasPermission('MANAGE_MESSAGES')) + return message.channel.send(error2); + + var content = message.content.slice(comando.length + prefix.length).trim(); + + if (!content) { + return message.channel.send(error3); + } + await message.delete(); await message.channel.send(content); }; exports.config = { name: 'say', - aliases: [], - category: '🎉 Entretenimento' + description: language.say.config.description, + aliases: ['falar'], + category: '🎉 Entretenimento', + public: true }; \ No newline at end of file diff --git a/src/Commands/servericon.js b/src/Commands/servericon.js new file mode 100644 index 0000000..9a5317c --- /dev/null +++ b/src/Commands/servericon.js @@ -0,0 +1,52 @@ +/* + 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'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = (aruna, message, args, langc) => { + + if (langc) { + language = langc; + } + + var guildIcon; + + if (message.guild.iconURL.includes('a_')) { + guildIcon = message.guild.iconURL.slice(0, -3).trim() + 'gif'; + } else { + guildIcon = message.guild.iconURL; + } + + const embed = new Discord.RichEmbed() + .setTitle(language.servericon.embed.title.replace('[emoji]', emoji.picture).replace('[guild]', message.guild.name)) + .setDescription(language.servericon.embed.description.replace('[url]', guildIcon)) + .setImage(guildIcon) + .setTimestamp(); + message.channel.send(embed); +}; + +exports.config = { + name: 'servericon', + aliases: ['guildicon'], + description: language.servericon.config.description, + category: '🎉 Entretenimento', + public: true +}; diff --git a/src/Commands/serverinfo.js b/src/Commands/serverinfo.js index 56c2ccf..2c0e688 100644 --- a/src/Commands/serverinfo.js +++ b/src/Commands/serverinfo.js @@ -20,20 +20,27 @@ const Discord = require('discord.js'); // eslint-disable-next-line no-unused-vars const { emoji, date } = require('../Utils'); -const { database } = require('../../Configs'); +const { config, database } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); 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) => { +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + const guildDB = await database.Guilds.findOne({ _id: message.guild.id }); - var pType = ''; + const status = { + online: `${emoji.online} ${language.generic.status.online}`, + idle: `${emoji.idle} ${language.generic.status.idle}`, + dnd: `${emoji.dnd} ${language.generic.status.dnd}`, + offline: `${emoji.offline} ${language.generic.status.offline}` + }; + + var pType; + if (guildDB.isPartner == true && guildDB.isPremium == true){ pType = emoji.partnerPlus; } else if (guildDB.isPartner == true) { @@ -46,51 +53,84 @@ exports.run = async (aruna, message) => { 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'; + switch (region) { + case 'brazil': + region = `:flag_br: ${language.serverinfo.generic.region.brazil}`; + break; + case 'europe': + region = `:flag_eu: ${language.serverinfo.generic.region.europe}`; + break; + case 'hongkong': + region = `:flag_hk: ${language.serverinfo.generic.region.hongkong}`; + break; + case 'india': + region = `:flag_in: ${language.serverinfo.generic.region.india}`; + break; + case 'japan': + region = `:flag_jp: ${language.serverinfo.generic.region.japan}`; + break; + case 'russia': + region = `:flag_ru: ${language.serverinfo.generic.region.russia}`; + break; + case 'singapore': + region = `:flag_sg: ${language.serverinfo.generic.region.singapore}`; + break; + case 'us-central': + case 'us-east': + case 'us-south': + case 'us-west': + region = `:flag_us: ${language.serverinfo.generic.region.usa}`; + break; + default: + region = language.serverinfo.generic.region.undefined; + break; + } + + var guildIcon; + if (message.guild.iconURL.includes('a_')) { + guildIcon = message.guild.iconURL.slice(0, -3).trim() + 'gif'; + } else { + guildIcon = message.guild.iconURL; + } + 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) + .setThumbnail(guildIcon) + .addField(`:computer: ${language.serverinfo.embed.field1.title}`, message.guild.id, true) + .addField(`:crown: ${language.serverinfo.embed.field2.title}`, message.guild.owner, true) + .addField(`:earth_americas: ${language.serverinfo.embed.field3.title}`, region, true) + .addField(`:date: ${language.serverinfo.embed.field4.title}`, dateFormat(message.guild.createdTimestamp, language.generic.strings.date), true) + .addField(`:desktop: ${language.serverinfo.embed.field5.title}`, aruna.shard.id, true) + .addField(`:dizzy: ${language.serverinfo.embed.field6.title}`, dateFormat(message.guild.member(aruna.user).joinedTimestamp, language.generic.strings.date), 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 - }`, + language.serverinfo.embed.field7.title + .replace('%1', ':speech_balloon:') + .replace('%2',message.guild.channels.filter( + chn => chn.type === 'text').size + + message.guild.channels.filter(chn => chn.type === 'voice').size + + message.guild.channels.filter(chn => chn.type === 'news').size + + message.guild.channels.filter(chn => chn.type === 'store').size) + .replace('%3', message.guild.channels.filter(chn => chn.type === 'category').size), + language.serverinfo.embed.field7.content + .replace('%1', ':pencil:') + .replace('%2', message.guild.channels.filter(chn => chn.type === 'text').size) + .replace('%3', ':speaking_head:') + .replace('%4', message.guild.channels.filter(chn => chn.type === 'voice').size) + .replace('%5', ':loudspeaker:') + .replace('%6', message.guild.channels.filter(chn => chn.type === 'news').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)`, + language.serverinfo.embed.field8.title + .replace('%1', `:busts_in_silhouette: ${message.guild.memberCount}`) + .replace('%2', message.guild.members.filter(m => m.user.bot).size) + .replace('%3', message.guild.members.filter(m => !m.user.bot).size), `${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 + message.guild.members.filter(m => m.presence.status === 'idle').size }\n${status['dnd']}: ${ message.guild.members.filter(m => m.presence.status === 'dnd').size }\n${status['offline']}: ${ @@ -98,19 +138,34 @@ exports.run = async (aruna, message) => { }`, 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) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag), message.author.avatarURL) .setTimestamp(); - message.reply(embed); + if (message.guild.premiumSubscriptionCount >= 1 && message.guild.premiumTier >= 1) { + embed.addField(`${emoji.nitro} ${language.serverinfo.embed.field9.title}`, + language.serverinfo.embed.field9.content + .replace('%1', emoji.nitro) + .replace('%2', message.guild.premiumTier) + .replace('%3', emoji.nitro) + .replace('%4', message.guild.premiumSubscriptionCount), + false + ); + } else if (message.guild.premiumSubscriptionCount >= 1) { + embed.addField(`${emoji.nitro} ${language.serverinfo.embed.field10.title}`, + language.serverinfo.embed.field10.content + .replace('%1', emoji.nitro) + .replace('%2',message.guild.premiumSubscriptionCount), + false + ); + } + + message.channel.send(embed); }; exports.config = { name: 'serverinfo', aliases: ['si'], - category: `${emoji.robot} Utilidades` + category: `${emoji.robot} Utilidades`, + description: language.serverinfo.config.description, + public: true }; diff --git a/src/Commands/ship.js b/src/Commands/ship.js index 26010e7..e13791c 100644 --- a/src/Commands/ship.js +++ b/src/Commands/ship.js @@ -1,104 +1,124 @@ -/* - 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' -}; +/* + 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'); + +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); + +exports.run = async (client, message, args, langc) => { + if (langc) { + language = langc; + } + + const error1 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.ship.embed.error.description) + .setTimestamp(); + + var porcentagem = 0; + var aleatorio = Math.round(Math.random() * 100); + + porcentagem = aleatorio; + + if (!message.mentions.users.first() && isNaN(args[0])) { + return message.channel.send(error1); + } else if (!message.mentions.users.array()[1] && !!args[1] && isNaN(args[1])) { + return message.channel.send(error1); + } + + var user1; + + if (message.mentions.users.first()) { + user1 = message.mentions.users.first(); + } else if (message.guild.members.get(args[0])) { + user1 = message.guild.members.get(args[0]).user; + } else user1 = null; + + var user2; + + if (message.mentions.users.array()[1]) { + user2 = message.mentions.users.array()[1]; + } else if (message.guild.members.get(args[1])) { + user2 = message.guild.members.get(args[1]).user; + } else user2 = message.author; + + if (!user1 || user1 === user2) return message.channel.send(error1); + + const avatar1 = await Jimp.read(user1.avatarURL); + const avatar2 = await Jimp.read(user2.avatarURL); + + avatar1.resize(115, 115); + avatar2.resize(115, 115); + + const baseImage = await Jimp.read( + 'https://cdn.discordapp.com/attachments/486016051851689994/509883077707694100/ships.png' + ); + + baseImage.composite(avatar1, 1, 1); + baseImage.composite(avatar2, 229, 1); + baseImage.write(`./tmp/img/${user1.id}-${user2.id}.png`); + + var mensagem = + porcentagem <= 10 + ? language.ship.shipStatus[0].replace('%s', porcentagem).replace('%s', porcentagem) + : porcentagem <= 20 + ? language.ship.shipStatus[1].replace('%s', porcentagem) + : porcentagem <= 30 + ? language.ship.shipStatus[2].replace('%s', porcentagem) + : porcentagem <= 40 + ? language.ship.shipStatus[3].replace('%s', porcentagem) + : porcentagem <= 50 + ? language.ship.shipStatus[4].replace('%s', porcentagem) + : porcentagem <= 60 + ? language.ship.shipStatus[5].replace('%s', porcentagem) + : porcentagem <= 70 + ? language.ship.shipStatus[6].replace('%s', porcentagem) + : porcentagem <= 80 + ? language.ship.shipStatus[7].replace('%s', porcentagem) + : porcentagem <= 90 + ? language.ship.shipStatus[8].replace('%s', porcentagem) + : porcentagem <= 100 + ? language.ship.shipStatus[9].replace('%s', porcentagem) + : language.ship.shipStatus[10].replace('%s', porcentagem); + + 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', + public: true +}; diff --git a/src/Commands/suporte.js b/src/Commands/suporte.js index 1db4be4..5d1f9b3 100644 --- a/src/Commands/suporte.js +++ b/src/Commands/suporte.js @@ -18,19 +18,36 @@ const Discord = require('discord.js'); const { emoji } = require('../Utils'); +const { config, links } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); -exports.run = async (aruna, message) => { - const embed = new Discord.RichEmbed().setAuthor( - `Olá, ${message.author.username}` - ) - .setDescription(`Encontrou algum erro esquisito, tem alguma reclamação ou sugestões para mim? -\nPara isso, basta clicar [aqui]( -https://discord.gg/NqbBgEf) e venha conversar com meus desenvolvedores!`); +exports.run = async (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + const error = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(language.support.embed.error.description) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setTimestamp(); + + if (!links.supportServers[0]) { + return message.channel.send(error); + } + const embed = new Discord.RichEmbed() + .setAuthor(language.generic.embed.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setDescription(`${language.support.embed.sucess.description.line1} + \n${language.support.embed.sucess.description.line2.replace('[link]', links.supportServers[0])} + \n${language.support.embed.sucess.description.line3}`) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setTimestamp(); message.channel.send(embed); }; exports.config = { name: 'suporte', aliases: ['support'], - category: `${emoji.robot} Utilidades` + description: language.support.config.description, + category: `${emoji.robot} Utilidades`, + public: true }; diff --git a/src/Commands/ticket.js b/src/Commands/ticket.js index e3b94d6..2a4a4ee 100644 --- a/src/Commands/ticket.js +++ b/src/Commands/ticket.js @@ -93,5 +93,6 @@ exports.run = async (aruna, message, args) => { exports.config = { name: 'ticket', aliases: [], - category: `${emoji.robot} Utilidades` + category: `${emoji.robot} Utilidades`, + public: false }; diff --git a/src/Commands/unban.js b/src/Commands/unban.js index b7c94bd..c696e8a 100644 --- a/src/Commands/unban.js +++ b/src/Commands/unban.js @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* This File is part of ArunaBot Copyright (C) LoboMetalurgico (and contributors) 2019-2020 @@ -17,32 +18,65 @@ */ const Discord = require('discord.js'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); +// 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 unbuser = await aruna.fetchUser(args[0]); +exports.run = async (aruna, message, args, langc, prefix, command) => { + if (langc) { + language = langc; + } 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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.unban.embed.error.description1.replace('[banMembers]', language.generic.permissions.banMembers)) .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`!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.unban.embed.error.description2.replace('[banMembers]', language.generic.permissions.banMembers)) .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!') + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.unban.embed.error.description3) + .setTimestamp(); + + const error6 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(`${language.unban.embed.error.userNotFound.line1}\n + ${language.unban.embed.error.userNotFound.line2}`) .setTimestamp(); + + if (!args[0] || isNaN(args[0]) && (!args[0].includes('<@') || !args[0].includes('>'))) return message.channel.send(error3); + + const unbUser = await aruna.fetchUser(message.mentions.users.first() || args[0]).catch(e => { + console.warn(e); + if (args[0].length !== 18) return null; + message.channel.send(error6); + return 'STOP'; + }); /** @todo: Fix #30 */ + + if (!unbUser) return message.channel.send(error3); + if (unbUser == 'STOP') return; + 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} :(`) + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.unban.embed.error.description4.replace('[ownerName]', unbUser.username)) + .setTimestamp(); + + const error5 = new Discord.RichEmbed() + .setAuthor(language.generic.embed.error.title.replace('[username]', message.member.displayName), message.author.avatarURL) + .setFooter(language.generic.embed.error.footer.replace('[username]', message.member.displayName)) + .setDescription(language.generic.embed.error.description) .setTimestamp(); if (!message.member.hasPermission('BAN_MEMBERS')) @@ -50,35 +84,52 @@ exports.run = async (aruna, message, args) => { if (!message.guild.members.get(aruna.user.id).hasPermission('BAN_MEMBERS')) return message.channel.send(error2); - if (!unbuser) 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 == unbUser.id) + return message.channel.send(error4); + } + + var reason = message.content.slice(command.length + prefix.length).trim(); + + if (args[0].includes('<@!') && args[0].includes('>')) { + reason = reason.slice(5 + unbUser.id.length).trim(); + } else if (args[0].includes('<@') && args[0].includes('>')) { + reason = reason.slice(4 + unbUser.id.length).trim(); + } else { + reason = reason.slice(unbUser.id.length).trim(); + } - var reason = ''; - if (!args.join(' ').slice(19)) { - reason = `Desbanido por: ${message.author.username}`; + if (!reason) { + reason = language.unban.reason['1'].replace('[username]', message.author.username); } else { - reason = - `Desbanido por: ${message.author.username} com o Motivo: ` + - args.join(' ').slice(19); + reason = language.unban.reason['2'].replace('[username]', message.author.username).replace('[reason]', reason); } 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) + .setAuthor(language.unban.embed.sucess.title) + .setDescription(language.unban.embed.sucess.description.replace('[username]', unbUser.username)) + .addField(language.unban.embed.sucess.field1.title, language.unban.embed.sucess.field1.content.replace('[username]', unbUser.username).replace('[userId]', unbUser.id), false) + .addField(language.unban.embed.sucess.field2, message.author, false) + .addField(language.unban.embed.sucess.field3, dateFormat(now, language.generic.strings.date), false) + .addField(language.unban.embed.sucess.field4, reason, false) .setTimestamp(); - message.channel.send(embed).then(async msg => { - await message.guild.unban(unbuser, reason).catch(err => { - console.log(err); - msg.edit(error4); - }); + message.guild.unban(unbUser, reason).catch(err => { + console.log(err); + return message.channel.send(error5); + }).then(() => { + message.channel.send(embed); }); }; exports.config = { name: 'desbanir', aliases: ['unban'], - category: '👮‍♂️ Moderação' + description: language.unban.config.description, + category: '👮‍♂️ Moderação', + public: true }; \ No newline at end of file diff --git a/src/Commands/userinfo.js b/src/Commands/userinfo.js index b9a09d1..4bbc40b 100644 --- a/src/Commands/userinfo.js +++ b/src/Commands/userinfo.js @@ -1,158 +1,154 @@ -/* - 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` -}; +/* 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 . +*/ + +// eslint-disable-next-line no-unused-vars +const { emoji, date } = require('../Utils'); +const Discord = require('discord.js'); +const { config } = require('../../Configs'); +var language = require(`../../languages/bot/${config.defaultLanguage}/commands.json`); +const dateFormat = require('dateformat'); + +exports.run = (aruna, message, args, langc) => { + if (langc) { + language = langc; + } + + const mentionedUser = message.guild.member( + message.mentions.users.first() || + aruna.users.get(args[0]) || + message.author + ); + + if (mentionedUser.user === aruna.user) { + return require('./bot').run(aruna, message, args, langc); + } + + const userNickName = mentionedUser.nickname !== null ? mentionedUser.nickname : language.userinfo.strings.nickname; + + 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) + ) + ); + + var userStatus; + var userStatusEmoji; + + switch (mentionedUser.presence.status) { + case 'online': + userStatus = language.generic.status.online; + userStatusEmoji = emoji.online; + break; + case 'idle': + userStatus = language.generic.status.idle; + userStatusEmoji = emoji.idle; + break; + case 'dnd': + userStatus = language.generic.status.dnd; + userStatusEmoji = emoji.dnd; + break; + case 'offline': + userStatus = language.generic.status.offline; + userStatusEmoji = emoji.offline; + break; + default: + userStatus = undefined; + } + + let userAdminServer; + + mentionedUser.hasPermission('ADMINISTRATOR') ? userAdminServer = language.generic.strings.yes : userAdminServer = language.generic.strings.no; + + let userAvatar = mentionedUser.user.displayAvatarURL; + + if (userAvatar.endsWith('.gif')) { + userAvatar = `${mentionedUser.user.displayAvatarURL}?size=2048`; + } + + var stringtime1; + switch (userDaysDiscord) { + case 1: + stringtime1 = language.generic.strings.day; + break; + default: + stringtime1 = language.generic.strings.days; + break; + } + + var stringtime2; + switch (userDaysGuild) { + case 1: + stringtime2 = language.generic.strings.day; + break; + default: + stringtime2 = language.generic.strings.days; + break; + } + + var userBoost = ''; + + const premium = message.guild.member(mentionedUser.user).premiumSinceTimestamp; + + if (premium !== null) { + userBoost = `\n\n(${emoji.nitro}) **${language.userinfo.strings.boosting}** ${dateFormat(message.guild.member(message.author).premiumSinceTimestamp, language.generic.strings.date)}`; + } + + const accountCreated = dateFormat(mentionedUser.user.createdTimestamp, language.generic.strings.date); + const joinedIn = dateFormat(mentionedUser.joinedTimestamp, language.generic.strings.date); + + const embed = new Discord.RichEmbed() + .setAuthor(mentionedUser.user.username, userAvatar) + .addField(language.userinfo.embed.field.title[0], + `🙋 **${language.userinfo.embed.field.description[0][0]}** \`${mentionedUser.user.username}\` + + ${emoji.menu} **${language.userinfo.embed.field.description[0][1]}** \`${mentionedUser.user.tag}\` + + **${language.userinfo.embed.field.description[0][2]}** \`${mentionedUser.user.id}\` + + ${userStatusEmoji} **${language.userinfo.embed.field.description[0][3]}** \`${userStatus}\` + + ${emoji.pass} **${language.userinfo.embed.field.description[0][4]}** \`${accountCreated}\` (${userDaysDiscord} ${stringtime1} ${language.generic.strings.back.toLowerCase()})`, false) + .addField(language.userinfo.embed.field.title[1], + `(${emoji.discord}) **${language.userinfo.embed.field.description[1][0]}** \`${userNickName}\` + + (👮) **${language.userinfo.embed.field.description[1][1]}** \`${userAdminServer}\` + + (:date:) **${language.userinfo.embed.field.description[1][2]}** \`${joinedIn}\` (${userDaysGuild} ${stringtime2} ${language.generic.strings.back.toLowerCase()})${userBoost}`, false) + .setFooter(language.generic.embed.footer.replace('[usertag]', message.author.tag)) + .setThumbnail(userAvatar) + .setColor('#012778') + .setTimestamp(); + + message.channel.send(embed); +}; +exports.config = { + name: 'userinfo', + aliases: [], + category: `${emoji.robot} Utilidades`, + description: language.userinfo.config.description, + public: true +}; diff --git a/src/Events/guildCreate.js b/src/Events/guildCreate.js index d5a04f1..da59d74 100644 --- a/src/Events/guildCreate.js +++ b/src/Events/guildCreate.js @@ -16,10 +16,18 @@ along with this program. If not, see . */ -var { database } = require('../../Configs'); +var { config, database } = require('../../Configs'); + +const lang = require(`../../languages/bot/${config.language}/events.json`); exports.run = async (aruna, guild) => { - var saveG = await new database.Guilds({ _id: guild.id }); + var language; + if (guild.region == 'brazil') { + language = 'br'; + } else { + language = config.defaultLanguage; + } + var saveG = new database.Guilds({ _id: guild.id, language: language }); await saveG.save(); - console.log('New Server Entry! :)'); + console.log(lang.guild.create.replace('[guildName]', guild.name)); }; diff --git a/src/Events/guildDelete.js b/src/Events/guildDelete.js index 10feed8..06a8c16 100644 --- a/src/Events/guildDelete.js +++ b/src/Events/guildDelete.js @@ -16,9 +16,11 @@ along with this program. If not, see . */ -var { database } = require('../../Configs'); +var { config, database } = require('../../Configs'); + +const lang = require(`../../languages/bot/${config.language}/events.json`); exports.run = async (aruna, guild) => { await database.Guilds.findOneAndDelete({ _id: guild.id }); - console.log('Server Removed :('); + console.log(lang.guild.delete.replace('[guildName]', guild.name)); }; \ No newline at end of file diff --git a/src/Events/guildMemberAdd.js b/src/Events/guildMemberAdd.js index 6e039f5..acb0982 100644 --- a/src/Events/guildMemberAdd.js +++ b/src/Events/guildMemberAdd.js @@ -17,21 +17,66 @@ */ const Discord = require('discord.js'); -var { database } = require('../../Configs'); +var { config, database } = require('../../Configs'); +const { links } = require('../../Configs'); + +const lang = require(`../../languages/bot/${config.language}/events.json`); const serverStatsPrincipal = { guildID: '660610178009530380', oldGuildID: '610206821763776522' }; + +var noFakeId = config.noFakeId; + exports.run = async (aruna, member) => { - const user = database.Users.findOne(member.user.id); + const user = database.Users.findOne({ _id: member.user.id }); + const guild = database.Guilds.findOne({ _id: member.guild.id }); + + const langD = require(`../../languages/bot/${guild.language || config.defaultLanguage}/events.json`); + + if (guild.antiFakeEnable) { + const kickFakeEmbed = new Discord.RichEmbed() + .setAuthor(langD.memberAdd.antifake.embed.fakemember.title.replace('[username]', member.user.username), member.user.avatarURL) + .setFooter(langD.memberAdd.antifake.embed.fakemember.footer.replace('[username]', member.user.username)) + .setDescription(langD.memberAdd.antifake.embed.fakemember.description) + .setTimestamp(); + + noFakeId.forEach(async id => { + if (member.guild.member(id)) { + const userNew = member.user.username.toLocaleLowerCase().replace('4','a').replace('3','e').replace('5','s').replace('@','a') + .replace('i','u').replace('u','l').replace(/\s+/g, '').normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-zA-Z0-9]/g, ''); + const noFakeUser = await aruna.fetchUser(id); + const noFakeUsername = noFakeUser.username.toLocaleLowerCase().replace('4','a').replace('3','e').replace('5','s').replace('@','a') + .replace('i','u').replace('u','l').replace(/\s+/g, '').normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-zA-Z0-9]/g, ''); + if (userNew == noFakeUsername && !noFakeId.includes(member.user.id)) { + if (member.guild.members.get(aruna.user.id).hasPermission('KICK_MEMBERS')) { + member.kick(langD.memberAdd.antifake.kickMessage); + member.send(kickFakeEmbed); + } else { + const guildOwner = member.guild.owner; + const fakeUser = member.user; + const adminFakeWarn = new Discord.RichEmbed() + .setAuthor(langD.memberAdd.antifake.embed.adminwarn.title.replace('[username]', guildOwner.user.username), guildOwner.user.avatarURL) + .setFooter(langD.memberAdd.antifake.embed.adminwarn.footer) + .setDescription(`${langD.memberAdd.antifake.embed.adminwarn.description.line1.replace('[fakeTag]', fakeUser.tag).replace('[fakeId]', fakeUser.id)}\n + ${langD.memberAdd.antifake.embed.adminwarn.description.line2.replace('[prefix]', guild.prefix)}`) + .setTimestamp(); + guildOwner.send(adminFakeWarn); + } + } + } + }); + } if (!user) { - var saveU = await new database.Users({ _id: member.user.id }); + var saveU = new database.Users({ _id: member.user.id }); await saveU.save(); - console.log('New Member on database :)'); + console.log(lang.memberAdd.db); } + + /* AUTOROLE MAIN GUILD*/ if (member.guild.id == serverStatsPrincipal.guildID) { member.addRole('660612149009448988', 'AutoRole'); @@ -43,12 +88,14 @@ exports.run = async (aruna, member) => { } } 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 :)') - .setDescription( - 'Olá! No momento estamos trocando de servidor. Por favor, peço que entre no nosso novo servidor clicando **[aqui](https://discord.gg/NqbBgEf)** :)' - ) + .setAuthor(langD.memberAdd.change.embed.title.replace('[username]', member.user.username), member.user.avatarURL) + .setFooter(langD.memberAdd.change.embed.footer.replace('[username]', member.user.username)) + .setDescription(langD.memberAdd.change.embed.description.replace('[link]', links.supportServers[0])) .setTimestamp(); member.send(changingMessage); } -}; + + /* AUTOROLE FOR USERS */ + + +}; \ No newline at end of file diff --git a/src/Events/message.js b/src/Events/message.js index f0f95be..383986a 100644 --- a/src/Events/message.js +++ b/src/Events/message.js @@ -1,156 +1,204 @@ -/* 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); - }); -}; +/* 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 chalk = require('chalk'); +var { database, config, links } = require('../../Configs'); +const { cooldown, utils } = require('../Utils'); +const langI = require(`../../languages/bot/${config.language}/internal.json`); + +exports.run = async (aruna, message) => { + if (message.author.bot) return; + + if (message.channel.type == 'dm') { + const dmUser = await database.Users.findOne({ _id: message.author.id }); + + const dmLang = require(`../../languages/bot/${dmUser.language || config.defaultLanguage}/events.json`); + + return message.reply(dmLang.message.errors.dmError); + } + + var guild = await database.Guilds.findOne({ _id: message.guild.id }); + var user = await database.Users.findOne({ _id: message.author.id }); + + if (!guild) { + var language; + if (message.guild.region == 'brazil') { + language = 'br'; + } else { + language = config.defaultLanguage; + } + debug('No Server!'); + var saveG = new database.Guilds({ + _id: message.guild.id, + language: language + }); + await saveG.save(); + guild = await database.Guilds.findOne({ _id: message.guild.id }); + } + + if (!user) { + debug('No User!'); + var isSuper = false; + if (config.superUsersId.includes(message.author.id)) { + isSuper = true; + } + var saveU = new database.Users({ _id: message.author.id, SUPER: isSuper }); + await saveU.save(); + user = await database.Users.findOne({ _id: message.author.id }); + } + + var prefix = guild.prefix || config.prefix; + + if (user.language !== guild.language && user.language !== null) { + language = user.language; + } else { + language = language || guild.language; + } + + const lang = require(`../../languages/bot/${language || config.defaultLanguage}/events.json`); + const langc = require(`../../languages/bot/${language || config.defaultLanguage}/commands.json`); + + const emojiError = lang.message.errors.emojiError.replace('[externalEmojis]', langc.generic.permissions.useExternalEmojis); + const linkError = lang.message.errors.linkError.replace('[sendLinks]', langc.generic.permissions.embedLinks); + + const mention = [`<@${aruna.user.id}>`, `<@!${aruna.user.id}>`]; + + mention.find(mention => { + if (message.content === 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); + } + const embed = new Discord.RichEmbed() + .setTitle(lang.message.mention.title) + .setDescription( + `${lang.message.mention.line1.replace('[username]', message.author.username).replace('[me]', aruna.user.username)}\n + ${lang.message.mention.line2}\n + ${lang.message.mention.line3.replace('[prefix]', prefix)}\n\n + ${lang.message.mention.line4.replace('[url]', links.supportServers[0])}\n\n + ${lang.message.mention.line5.replace('[url]', links.invites[0])}\n\n + ${lang.message.mention.line6}` + ) + .setColor('#8400ff') + .setTimestamp(); + return message.channel.send(embed); + } + }); + + if (guild.rankEnable) { + 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 + }); + + await saveR.save(); + } + const db = database; + + const xpsystem = require('../utils/rankSystem.js'); + await xpsystem.run(aruna, message, lang, langc, 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 command = args.shift().toLowerCase(); + const ma = message.content.split(' '); + const cmd = ma[0]; + if (cmd == prefix || cmd.slice(prefix.length).length < 2) return; + 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); + } else if (!user.SUPER && !commandFile.config.public) { + const denied = new Discord.RichEmbed() + .setAuthor(langc.generic.embed.denied.title, message.author.avatarURL) + .setDescription(`${langc.generic.embed.denied.description.line1.replace('[username]', message.member.displayName).replace('[command]', command)}\n + ${langc.generic.embed.denied.description.line2.replace('[prefix]', prefix)}`) + .setFooter(langc.generic.embed.denied.footer) + .setTimestamp(); + return message.channel.send(denied); + } + commandFile.run(aruna, message, args, langc, prefix, command); + } else if (!commandFile) { + const alts = + aruna.commands + .filter(c => + c.config.name.startsWith(cmd.slice(prefix.length).toLowerCase()) + ) + .map(a => `${prefix}${a.config.name}`) + .join(', ') || undefined; + + if (alts !== undefined) { + message.reply(lang.message.errors.commandNotFound.replace('[command]', command).replace('[alt]', alts)).then(async msg => { + setTimeout(() => { + msg.delete(); + }, 30000); + }); + } + } + } + function logPrefix() { + return `${chalk.gray('[')}${isSharded() ? `${langI.generic.shard} ${chalk.blue(aruna.shard.id)}` : aruna.user.username}${chalk.gray(']')}`; + } + + // eslint-disable-next-line no-unused-vars + function log(...a) { + return console.log(logPrefix(), ...a); + } + + // eslint-disable-next-line no-unused-vars + function warn(...a) { + return console.warn(logPrefix(), chalk.yellow(...a)); + } + + // eslint-disable-next-line no-unused-vars + function error(...a) { + return console.error(logPrefix(), chalk.red(...a)); + } + + function debug(...a) { + if (config.debug) { + return console.debug(logPrefix(), chalk.magenta(...a)); + } else return; + } + + function isSharded() { + return !!aruna.shard; + } +}; diff --git a/src/Events/ready.js b/src/Events/ready.js index 9bc5ea7..9d4a1d0 100644 --- a/src/Events/ready.js +++ b/src/Events/ready.js @@ -20,74 +20,114 @@ const pkg = require('../../package.json'); const chalk = require('chalk'); -const { apiKeys, database } = require('../../Configs'); +const { apiKeys, config, database, links } = require('../../Configs'); + +const language = require(`../../languages/bot/${config.language}/internal.json`); +const langE = require(`../../languages/bot/${config.defaultLanguage}/events.json`); 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`; + log(language.generic.connected); + + /* async function getUserCount() { + const req = await aruna.shard.fetchClientValues('users.size'); + + return req.reduce((p, n) => p + n, 0); } + async function getServerCount() { + const req = await aruna.shard.fetchClientValues('guilds.size'); + + return req.reduce((p, n) => p + n, 0); + } */ + const status = [ { - name: 'Muppet Show', + name: langE.ready.status['1'], type: 'watching' }, { - name: 'M83 - Midnight City', + name: langE.ready.status['2'], type: 'listening' }, { - name: `Faz ${uptime}`, + name: langE.ready.status['3'], type: 'playing' }, { - name: 'Netflix', + name: langE.ready.status['4'], type: 'watching' }, { - name: `Versão ${pkg.version}`, + name: langE.ready.status['5'].replace('[version]', pkg.version), type: 'streaming', - url: 'https://www.twitch.tv/lobometalurgico' + url: links.twitch }, { - name: `Seu Shard é o ${aruna.shard.id}!`, + name: langE.ready.status['6'].replace('[shard]', aruna.shard.id), type: 'watching' - } + }, + { + name: langE.ready.status['7'], + type: 'listening' + }, + /* { + name: langE.ready.status['8'].replace('[USERS]', await getUserCount()), + type: 'listening' + }, + { + name: langE.ready.status['9'].replace('[GUILDS]', await getServerCount()), + type: 'listening' + } */ ]; async function setStatus() { var maintenance = await database.System.findOne({ _id: 1 }); - var inMaintenance = maintenance.maintenance; + var inMaintenance; + if (!maintenance) { + inMaintenance = false; + await new database.System({ _id: 1 }).save(); + debug(langE.ready.databaseAdd); + } else { + inMaintenance = maintenance.maintenance; + } if (inMaintenance === true){ - aruna.user.setPresence({ game: { name: `🚫AVISO: MANUTENÇÃO PROGRAMADA PARA ${maintenance.date}! FICAREI INDISPONÍVEL POR ${maintenance.time}!🚫`}}); + aruna.user.setStatus('dnd'); + aruna.user.setPresence({ game: { name: langE.ready.maintenance.replace('[date]', maintenance.date).replace('[time]', maintenance.time)}}); } else { - const randomStatus = status[Math.floor(Math.random() * status.length)]; + aruna.user.setStatus('online'); + var randomStatus = status[Math.floor(Math.random() * status.length)]; + randomStatus = { name: randomStatus.name.replace('[time]', await getUptime()), type: randomStatus.type }; aruna.user.setPresence({ game: randomStatus }); } } + async function getUptime() { + let totalSeconds = (aruna.uptime / 1000); + const days = Math.floor(totalSeconds / 86400); + 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`; + } + return uptime; + } setStatus(); setInterval(() => { setStatus(); }, 15000); function logPrefix() { - return `${chalk.gray('[')}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : 'ARUNA'}${chalk.gray(']')}`; + return `${chalk.gray('[')}${isSharded() ? `${language.generic.shard} ${chalk.blue(aruna.shard.id)}` : aruna.user.username}${chalk.gray(']')}`; } function log(...a) { @@ -103,22 +143,34 @@ exports.run = async (aruna) => { } function debug(...a) { - return console.debug(logPrefix(), chalk.magenta(...a)); + if (config.debug) { + return console.debug(logPrefix(), chalk.magenta(...a)); + } else return; } function isSharded() { return !!aruna.shard; } - if (apiKeys) { + if (apiKeys && apiKeys.topgg) { + const DBL = require('dblapi.js'); + const client = aruna; - const dbots = require('dbots'); - const poster = new dbots.Poster({ - client, - apiKeys, - clientLibrary: 'discord.js' + + const dbl = new DBL(apiKeys.topgg, client); + + dbl.on('posted', () => { + log(`[${langE.dbl}] => ${langE.ready.posted}`); }); - poster.startInterval(); + dbl.on('error', e => { + warn(`[${langE.dbl}][${language.main.error}] => ${e}`); + }); + + dbl.postStats(client.guilds.size, client.shard.id, client.shard.count); + + setInterval(() => { + dbl.postStats(client.guilds.size, client.shard.id, client.shard.count); + }, 900000); } }; \ No newline at end of file diff --git a/src/Utils/GetSystemData.js b/src/Utils/GetSystemData.js new file mode 100644 index 0000000..8bf1b50 --- /dev/null +++ b/src/Utils/GetSystemData.js @@ -0,0 +1,40 @@ +/* + 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 si = require('systeminformation'); + +module.exports = { + GetCPUModel: async () => { + return await si.cpu().then(data => {return data;}); + }, + GetComputerModel: async () => { + return await si.system().then(data => {return data;}); + }, + GetCPUTemp: async () => { + return await si.cpuTemperature().then(data => {return data;}); + }, + GetMemoryAmount: async () => { + return await si.mem().then(data => {return data;}); + }, + GetGPUModel: async () => { + return await si.graphics().then(data => {return data.controllers;}); + }, + GetOSData: async () => { + return await si.osInfo().then(data => {return data;}); + } +}; \ No newline at end of file diff --git a/src/Utils/date.js b/src/Utils/date.js index ce05b16..d87e992 100644 --- a/src/Utils/date.js +++ b/src/Utils/date.js @@ -1,4 +1,22 @@ /* 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 . +*/ + var dateFormat = require('dateformat'); dateFormat.i18n = { dayNames: [ diff --git a/src/Utils/emojis.js b/src/Utils/emojis.js index 4ddc5ee..459b74a 100644 --- a/src/Utils/emojis.js +++ b/src/Utils/emojis.js @@ -38,5 +38,7 @@ module.exports = { nitro: '<:nitro:728819044211359746>', partner: '<:partner:728849144734810163>', partnerPlus: '<:partnerPlus:728845414274564146>', - premium: '<:vip:728816348892889118>' + premium: '<:vip:728816348892889118>', + loading: '', + stop: '<:stop:759833432443977768>' }; diff --git a/src/Utils/index.js b/src/Utils/index.js index 3805416..7074e8e 100644 --- a/src/Utils/index.js +++ b/src/Utils/index.js @@ -17,11 +17,12 @@ */ 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') + date: require('./date.js'), + emoji: require('./emojis.js'), + emojis: require('./emojis.js'), + ranksystem: require('./rankSystem.js'), + utils: require('./utils.js'), + sysdata: require('./GetSystemData.js') }; \ No newline at end of file diff --git a/src/Utils/rankSystem.js b/src/Utils/rankSystem.js index 87708d9..5baa2f5 100644 --- a/src/Utils/rankSystem.js +++ b/src/Utils/rankSystem.js @@ -16,7 +16,7 @@ along with this program. If not, see . */ -exports.run = async (aruna, message, database, cooldown, utils, Discord) => { +exports.run = async (aruna, message, lang, langc, database, cooldown, utils, Discord) => { const user = message.author; const rank = await database.Rank.findOne({ @@ -59,19 +59,14 @@ exports.run = async (aruna, message, database, cooldown, utils, Discord) => { level = rank2.level; const embed = new Discord.RichEmbed() - .setAuthor('Novo Nível!') - .setDescription( - `Parabéns <@${message.author.id}>` + - ', agora você está no **Nível ' + - rank2.level + - '**!' - ) + .setAuthor(lang.rank.embed.newLevel.title) + .setDescription(lang.rank.embed.newLevel.description.replace('[user]', message.author).replace('[level]', level)) .setColor([15, 15, 250]) .setTimestamp(); message.channel.send(embed); const args = ''; - const exiberank = require('../cmds/rank.js'); - exiberank.run(aruna, message, args); + const exiberank = require('../Commands/rank.js'); + exiberank.run(aruna, message, args, langc); } } }; diff --git a/src/main.js b/src/main.js index 287a591..82dd494 100644 --- a/src/main.js +++ b/src/main.js @@ -17,49 +17,58 @@ along with this program. If not, see . */ -require('events').EventEmitter.defaultMaxListeners = 999; - -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 { config, database } = require('../Configs'); const chalk = require('chalk'); +const pkg = require('../package.json'); + +const language = require(`../languages/bot/${config.language}/internal.json`); +const defaultLanguage = require(`../languages/bot/${config.defaultLanguage}/internal.json`); + +const infoPrefix = `${chalk.gray('[')}${chalk.green(language.generic.base.toUpperCase())}${chalk.gray(']')}`; +const errorPrefix = `${chalk.gray('[')}${chalk.red(language.generic.base.toUpperCase())}${chalk.gray(']')}`; + +console.log(language.initialization.initializing.replace('[prefix]', infoPrefix)); +console.log(`${infoPrefix} ${language.initialization.language.replace('[language]', chalk.yellow(language.generic.languageName)).replace('[default]', chalk.yellow(defaultLanguage.generic.languageName))}`); +console.log(`${infoPrefix} ${language.initialization.version.replace('[version]', pkg.version)}`); const aruna = new Discord.Client(); aruna.commands = new Discord.Collection(); aruna.aliases = new Discord.Collection(); fs.readdir('./src/Events/', (erro, files) => { - if (erro) return error(`[ERROR] => ${erro}`); + if (erro) return error(`[${language.main.error}] => ${erro}`); + const jsfile = files.filter(f => f.split('.').pop() === 'js'); + if (jsfile.length <= 0) { + return warn(`[${language.main.events}] ${language.generic.notFound}`); + } files.forEach(file => { const eventFunction = require(`./Events/${file}`); - log(`[EVENT] => ${file}`); + log(`[${language.main.event}] => ${file}`); const eventName = file.split('.')[0]; aruna.on(eventName, (...args) => eventFunction.run(aruna, ...args)); }); }); fs.readdir('./src/Commands/', (err, files) => { - if (err) return error(`[ERROR] => ${err}`); + if (err) return error(`[${language.main.error}] => ${err}`); const jsfile = files.filter(f => f.split('.').pop() === 'js'); if (jsfile.length <= 0) { - return warn('[COMMANDS] Not Found!'); + return warn(`[${language.main.commands}] ${language.generic.notFound}`); } - jsfile.forEach(f => { + jsfile.forEach(async f => { const pull = require(`./Commands/${f}`); aruna.commands.set(pull.config.name, pull); - log(`[COMMAND] => ${f}`); + if (pull.config.register) { + const verReg = await database.Commands.findOne({ _id: pull.config.name }); + if (!verReg) { + const reg = new database.Commands({ _id: pull.config.name, public: pull.config.register.public }); + await reg.save(); + debug(`[${language.main.command}] [${language.main.cluster}] ${language.main.registered.replace('[COMMAND]', pull.config.name)}`); + } + } + log(`[${language.main.command}] => ${f}`); pull.config.aliases.forEach(alias => { aruna.aliases.set(alias, pull.config.name); }); @@ -68,28 +77,34 @@ fs.readdir('./src/Commands/', (err, files) => { function logPrefix() { - return `${chalk.gray('[')}${isSharded() ? `SHARD ${chalk.blue(aruna.shard.id)}` : 'ARUNA'}${chalk.gray(']')}`; + return `${chalk.gray('[')}${isSharded() ? `${language.generic.shard} ${chalk.blue(aruna.shard.id)}` : aruna.user.username}${chalk.gray(']')}`; } -function log(...a) { - return console.log(logPrefix(), ...a); +async function log(...a) { + return console.log(infoPrefix, logPrefix(), ...a); } -function warn(...a) { +async function warn(...a) { return console.warn(logPrefix(), chalk.yellow(...a)); } -function error(...a) { - return console.error(logPrefix(), chalk.red(...a)); +async function error(...a) { + return console.error(errorPrefix, logPrefix(), chalk.red(...a)); } // eslint-disable-next-line no-unused-vars -function debug(...a) { - return console.debug(logPrefix(), chalk.magenta(...a)); +async function debug(...a) { + if (config.debug) { + return console.debug(logPrefix(), chalk.magenta(...a)); + } else return; } function isSharded() { return !!aruna.shard; } -aruna.login(config.token); \ No newline at end of file +aruna.login(config.token).then(async () => { + await log(`=> ${language.initialization.complete}`); +}).catch(e => { + error(`=> ${language.initialization.fail} ${e}`); +}); \ No newline at end of file diff --git a/src/sharding.js b/src/sharding.js index 3f70c28..7f27b37 100644 --- a/src/sharding.js +++ b/src/sharding.js @@ -1,37 +1,54 @@ -/* 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 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(']')}`; - -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!')}`); -}); \ No newline at end of file +/* 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 chalk = require('chalk'); +const { config } = require('../Configs'); +const pkg = require('../package.json'); + +const language = require(`../languages/bot/${config.language}/internal.json`); + +const del = require('del'); + +try { + del.sync('tmp'); +} finally { + const manager = new Discord.ShardingManager(`./${pkg.main}`, { + token: config.token, + totalShards: config.sharding.totalShards + }); + + const infoPrefix = `${chalk.gray('[')}${chalk.green(language.generic.core.toUpperCase())}${chalk.gray(']')}`; + const errorPrefix = `${chalk.gray('[')}${chalk.red(language.generic.core.toUpperCase())}${chalk.gray(']')}`; + const logPrefix = `${chalk.gray('[')}${chalk.yellow(language.shard.master)}${chalk.gray(']')}`; + + console.log(language.initialization.initializing.replace('[prefix]', infoPrefix)); + + manager.on('launch', shard => console.log(`${infoPrefix} ${logPrefix} ${shard.id} (${shard.id + 1}/${manager.totalShards}) ${language.shard.launch.replace('[shard] ', '')}`)); + process.on('exit', code => { + console.error(`${errorPrefix} ${language.initialization.fail}`); + console.exception(`${errorPrefix} ${logPrefix} ${chalk.red(language.shard.exit)} ${language.shard.exitCode}`, code); + }); + + console.log(language.shard.startGeneration.replace('[logPrefix]', `${infoPrefix} ${logPrefix}`)); + manager.spawn(config.sharding.totalShards, config.sharding.delay).then(() => { + console.log(`${infoPrefix} ${logPrefix} ${chalk.green(language.shard.finishGeneration)}`); + console.log(`${infoPrefix} ${language.initialization.complete}`); + }); +} \ No newline at end of file