├── .eslintrc.json ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── Dockerfile ├── LICENSE ├── README.md ├── config.example.json ├── package-lock.json ├── package.json ├── run.sh ├── src ├── client.ts ├── commands │ ├── discord.bio │ │ ├── profile.ts │ │ └── top.ts │ ├── misc │ │ ├── ping.ts │ │ └── update.ts │ ├── mod │ │ └── ban.ts │ └── util │ │ ├── help.ts │ │ ├── invite.ts │ │ ├── links.ts │ │ └── suggest.ts ├── constants.ts └── index.ts └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true, 4 | "node": true 5 | }, 6 | "extends": ["standard", "prettier"], 7 | "globals": { 8 | "Atomics": "readonly", 9 | "SharedArrayBuffer": "readonly" 10 | }, 11 | "parser": "@typescript-eslint/parser", 12 | "parserOptions": { 13 | "ecmaVersion": 2018, 14 | "sourceType": "module" 15 | }, 16 | "plugins": ["@typescript-eslint"], 17 | "rules": { 18 | "no-extra-semi": "off", 19 | "semi": [2, "always"], 20 | "no-unused-vars": "off" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior. 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Additional context** 23 | Add any other context about the problem here. 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | *.swp 10 | 11 | pids 12 | logs 13 | results 14 | tmp 15 | 16 | # config 17 | config.json 18 | 19 | # transpiled files 20 | bin 21 | **/*.js 22 | 23 | # Coverage reports 24 | coverage 25 | 26 | # API keys and secrets 27 | .env 28 | 29 | # Dependency directory 30 | node_modules 31 | bower_components 32 | 33 | # Editors 34 | .idea 35 | *.iml 36 | 37 | # OS metadata 38 | .DS_Store 39 | Thumbs.db 40 | 41 | # Ignore built ts files 42 | dist/**/* 43 | 44 | # ignore yarn.lock 45 | yarn.lock -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "overrides": [ 3 | { 4 | "files": ".prettierrc", 5 | "options": { "parser": "json" } 6 | } 7 | ], 8 | "printWidth": 120, 9 | "quoteProps": "consistent", 10 | "semi": true, 11 | "singleQuote": true, 12 | "tabWidth": 2, 13 | "trailingComma": "all", 14 | "endOfLine": "lf" 15 | } 16 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at admin@veno.dev. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | RUN apk update && \ 4 | apk add nodejs npm git nano && \ 5 | git clone https://github.com/discord-bio/bot /home/bot && \ 6 | cd /home/bot && \ 7 | npm i && \ 8 | npm i -g typescript && \ 9 | cp config.example.json config.json 10 | 11 | CMD sh 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 discord.bio 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 📡 discord.bio bot 2 | The official Discord bot used in the discord.bio server which interacts with our REST API. 3 |

4 | ![MIT](https://img.shields.io/github/license/discord-bio/bot) 5 | ![Contributors](https://img.shields.io/github/contributors/discord-bio/bot) 6 | ![Last Commit](https://img.shields.io/github/last-commit/discord-bio/bot) 7 | -------------------------------------------------------------------------------- /config.example.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefix": ".", 3 | "token": "", 4 | "owners": [""] 5 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord.bio", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.3", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", 10 | "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.3" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.10.3", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", 19 | "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.3", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", 25 | "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.3", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | } 32 | }, 33 | "@discordjs/collection": { 34 | "version": "0.1.5", 35 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.5.tgz", 36 | "integrity": "sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw==" 37 | }, 38 | "@klasa/querybuilder": { 39 | "version": "0.0.1", 40 | "resolved": "https://registry.npmjs.org/@klasa/querybuilder/-/querybuilder-0.0.1.tgz", 41 | "integrity": "sha512-DpMlgu9NHvOisRWbG0l1vHFi3f5SFowjKAIYAjl1hk9bn+N1RdpnH126YDoyeK8TsxZwszlLrPpoIS0Uoy4Q0A==", 42 | "requires": { 43 | "@klasa/utils": "^0.0.1" 44 | } 45 | }, 46 | "@klasa/request-handler": { 47 | "version": "0.0.3", 48 | "resolved": "https://registry.npmjs.org/@klasa/request-handler/-/request-handler-0.0.3.tgz", 49 | "integrity": "sha512-Z1O+Aa2kW/I4Uos4EZalByveIuQKRfuRx+JCsgsogDBd95N5Ub47AH+LEd5i+uzjnJ6iDHfodpVlaHojJ4Q+ZQ==" 50 | }, 51 | "@klasa/settings-gateway": { 52 | "version": "0.0.10", 53 | "resolved": "https://registry.npmjs.org/@klasa/settings-gateway/-/settings-gateway-0.0.10.tgz", 54 | "integrity": "sha512-bz+b0I2qmcfA75RY4Cjzgig9+5Bw/EhE4g7bAETjBQXkxea1ed7rWQHgQiIVAErm9sgy69/7NIK5JoFXZZs68A==", 55 | "requires": { 56 | "@discordjs/collection": "^0.1.3", 57 | "@klasa/querybuilder": "^0.0.1", 58 | "@klasa/request-handler": "^0.0.3", 59 | "@klasa/utils": "^0.0.4" 60 | }, 61 | "dependencies": { 62 | "@klasa/utils": { 63 | "version": "0.0.4", 64 | "resolved": "https://registry.npmjs.org/@klasa/utils/-/utils-0.0.4.tgz", 65 | "integrity": "sha512-9gZSGN/As3sxZumZ9ZwyQ+KcNSenzY8tR1orRakv8HKK0WH0gG7QrsP/1O2TD4uHxUyr8dysCjt73RYPfzuDWQ==" 66 | } 67 | } 68 | }, 69 | "@klasa/utils": { 70 | "version": "0.0.1", 71 | "resolved": "https://registry.npmjs.org/@klasa/utils/-/utils-0.0.1.tgz", 72 | "integrity": "sha512-UOGHPXnbitN/fHIGODZYv8IVlpojVmMMyRYLlanN41QP+IC9oZfqihT41cBbaFtMbqF0gcw6/5mr2P6NpCV8Mg==" 73 | }, 74 | "@types/color-name": { 75 | "version": "1.1.1", 76 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 77 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 78 | "dev": true 79 | }, 80 | "@types/eslint-visitor-keys": { 81 | "version": "1.0.0", 82 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 83 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", 84 | "dev": true 85 | }, 86 | "@types/json-schema": { 87 | "version": "7.0.5", 88 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", 89 | "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", 90 | "dev": true 91 | }, 92 | "@types/json5": { 93 | "version": "0.0.29", 94 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 95 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", 96 | "dev": true 97 | }, 98 | "@types/node": { 99 | "version": "14.0.14", 100 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", 101 | "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==" 102 | }, 103 | "@types/node-fetch": { 104 | "version": "2.5.7", 105 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", 106 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", 107 | "requires": { 108 | "@types/node": "*", 109 | "form-data": "^3.0.0" 110 | }, 111 | "dependencies": { 112 | "form-data": { 113 | "version": "3.0.0", 114 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 115 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", 116 | "requires": { 117 | "asynckit": "^0.4.0", 118 | "combined-stream": "^1.0.8", 119 | "mime-types": "^2.1.12" 120 | } 121 | } 122 | } 123 | }, 124 | "@types/ws": { 125 | "version": "7.2.5", 126 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.5.tgz", 127 | "integrity": "sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg==", 128 | "requires": { 129 | "@types/node": "*" 130 | } 131 | }, 132 | "@typescript-eslint/eslint-plugin": { 133 | "version": "3.4.0", 134 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.4.0.tgz", 135 | "integrity": "sha512-wfkpiqaEVhZIuQRmudDszc01jC/YR7gMSxa6ulhggAe/Hs0KVIuo9wzvFiDbG3JD5pRFQoqnf4m7REDsUvBnMQ==", 136 | "dev": true, 137 | "requires": { 138 | "@typescript-eslint/experimental-utils": "3.4.0", 139 | "debug": "^4.1.1", 140 | "functional-red-black-tree": "^1.0.1", 141 | "regexpp": "^3.0.0", 142 | "semver": "^7.3.2", 143 | "tsutils": "^3.17.1" 144 | }, 145 | "dependencies": { 146 | "semver": { 147 | "version": "7.3.2", 148 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 149 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 150 | "dev": true 151 | }, 152 | "tsutils": { 153 | "version": "3.17.1", 154 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 155 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 156 | "dev": true, 157 | "requires": { 158 | "tslib": "^1.8.1" 159 | } 160 | } 161 | } 162 | }, 163 | "@typescript-eslint/experimental-utils": { 164 | "version": "3.4.0", 165 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.4.0.tgz", 166 | "integrity": "sha512-rHPOjL43lOH1Opte4+dhC0a/+ks+8gOBwxXnyrZ/K4OTAChpSjP76fbI8Cglj7V5GouwVAGaK+xVwzqTyE/TPw==", 167 | "dev": true, 168 | "requires": { 169 | "@types/json-schema": "^7.0.3", 170 | "@typescript-eslint/typescript-estree": "3.4.0", 171 | "eslint-scope": "^5.0.0", 172 | "eslint-utils": "^2.0.0" 173 | } 174 | }, 175 | "@typescript-eslint/parser": { 176 | "version": "3.4.0", 177 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.4.0.tgz", 178 | "integrity": "sha512-ZUGI/de44L5x87uX5zM14UYcbn79HSXUR+kzcqU42gH0AgpdB/TjuJy3m4ezI7Q/jk3wTQd755mxSDLhQP79KA==", 179 | "dev": true, 180 | "requires": { 181 | "@types/eslint-visitor-keys": "^1.0.0", 182 | "@typescript-eslint/experimental-utils": "3.4.0", 183 | "@typescript-eslint/typescript-estree": "3.4.0", 184 | "eslint-visitor-keys": "^1.1.0" 185 | } 186 | }, 187 | "@typescript-eslint/typescript-estree": { 188 | "version": "3.4.0", 189 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.4.0.tgz", 190 | "integrity": "sha512-zKwLiybtt4uJb4mkG5q2t6+W7BuYx2IISiDNV+IY68VfoGwErDx/RfVI7SWL4gnZ2t1A1ytQQwZ+YOJbHHJ2rw==", 191 | "dev": true, 192 | "requires": { 193 | "debug": "^4.1.1", 194 | "eslint-visitor-keys": "^1.1.0", 195 | "glob": "^7.1.6", 196 | "is-glob": "^4.0.1", 197 | "lodash": "^4.17.15", 198 | "semver": "^7.3.2", 199 | "tsutils": "^3.17.1" 200 | }, 201 | "dependencies": { 202 | "semver": { 203 | "version": "7.3.2", 204 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 205 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 206 | "dev": true 207 | }, 208 | "tsutils": { 209 | "version": "3.17.1", 210 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 211 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 212 | "dev": true, 213 | "requires": { 214 | "tslib": "^1.8.1" 215 | } 216 | } 217 | } 218 | }, 219 | "abort-controller": { 220 | "version": "3.0.0", 221 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 222 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 223 | "requires": { 224 | "event-target-shim": "^5.0.0" 225 | } 226 | }, 227 | "acorn": { 228 | "version": "7.3.1", 229 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", 230 | "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", 231 | "dev": true 232 | }, 233 | "acorn-jsx": { 234 | "version": "5.2.0", 235 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 236 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 237 | "dev": true 238 | }, 239 | "ajv": { 240 | "version": "6.12.2", 241 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 242 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 243 | "dev": true, 244 | "requires": { 245 | "fast-deep-equal": "^3.1.1", 246 | "fast-json-stable-stringify": "^2.0.0", 247 | "json-schema-traverse": "^0.4.1", 248 | "uri-js": "^4.2.2" 249 | } 250 | }, 251 | "ansi-colors": { 252 | "version": "3.2.4", 253 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", 254 | "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", 255 | "dev": true 256 | }, 257 | "ansi-regex": { 258 | "version": "5.0.0", 259 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 260 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 261 | "dev": true 262 | }, 263 | "ansi-styles": { 264 | "version": "3.2.1", 265 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 266 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 267 | "dev": true, 268 | "requires": { 269 | "color-convert": "^1.9.0" 270 | } 271 | }, 272 | "argparse": { 273 | "version": "1.0.10", 274 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 275 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 276 | "dev": true, 277 | "requires": { 278 | "sprintf-js": "~1.0.2" 279 | } 280 | }, 281 | "array-includes": { 282 | "version": "3.1.1", 283 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", 284 | "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", 285 | "dev": true, 286 | "requires": { 287 | "define-properties": "^1.1.3", 288 | "es-abstract": "^1.17.0", 289 | "is-string": "^1.0.5" 290 | } 291 | }, 292 | "array.prototype.flat": { 293 | "version": "1.2.3", 294 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", 295 | "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", 296 | "dev": true, 297 | "requires": { 298 | "define-properties": "^1.1.3", 299 | "es-abstract": "^1.17.0-next.1" 300 | } 301 | }, 302 | "astral-regex": { 303 | "version": "1.0.0", 304 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 305 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 306 | "dev": true 307 | }, 308 | "asynckit": { 309 | "version": "0.4.0", 310 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 311 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 312 | }, 313 | "balanced-match": { 314 | "version": "1.0.0", 315 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 316 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 317 | "dev": true 318 | }, 319 | "brace-expansion": { 320 | "version": "1.1.11", 321 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 322 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 323 | "dev": true, 324 | "requires": { 325 | "balanced-match": "^1.0.0", 326 | "concat-map": "0.0.1" 327 | } 328 | }, 329 | "builtin-modules": { 330 | "version": "1.1.1", 331 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 332 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 333 | "dev": true 334 | }, 335 | "callsites": { 336 | "version": "3.1.0", 337 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 338 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 339 | "dev": true 340 | }, 341 | "chalk": { 342 | "version": "2.4.2", 343 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 344 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 345 | "dev": true, 346 | "requires": { 347 | "ansi-styles": "^3.2.1", 348 | "escape-string-regexp": "^1.0.5", 349 | "supports-color": "^5.3.0" 350 | } 351 | }, 352 | "color-convert": { 353 | "version": "1.9.3", 354 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 355 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 356 | "dev": true, 357 | "requires": { 358 | "color-name": "1.1.3" 359 | } 360 | }, 361 | "color-name": { 362 | "version": "1.1.3", 363 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 364 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 365 | "dev": true 366 | }, 367 | "combined-stream": { 368 | "version": "1.0.8", 369 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 370 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 371 | "requires": { 372 | "delayed-stream": "~1.0.0" 373 | } 374 | }, 375 | "commander": { 376 | "version": "2.20.3", 377 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 378 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 379 | "dev": true 380 | }, 381 | "concat-map": { 382 | "version": "0.0.1", 383 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 384 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 385 | "dev": true 386 | }, 387 | "contains-path": { 388 | "version": "0.1.0", 389 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", 390 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", 391 | "dev": true 392 | }, 393 | "cross-spawn": { 394 | "version": "7.0.3", 395 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 396 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 397 | "dev": true, 398 | "requires": { 399 | "path-key": "^3.1.0", 400 | "shebang-command": "^2.0.0", 401 | "which": "^2.0.1" 402 | } 403 | }, 404 | "dbiowrap": { 405 | "version": "1.1.2-patch2", 406 | "resolved": "https://registry.npmjs.org/dbiowrap/-/dbiowrap-1.1.2-patch2.tgz", 407 | "integrity": "sha512-+bydSl6yuBFyH7g++UpLjY+cdJFDExA+zSf2P9alRXW0SNdWUjXChx7hF/xWveHfN3TI5bNssSk2NkXBX01XuA==", 408 | "requires": { 409 | "eventemitter3": "^4.0.4", 410 | "node-fetch": "2.6.0", 411 | "ws": "^7.3.1" 412 | } 413 | }, 414 | "debug": { 415 | "version": "4.1.1", 416 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 417 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 418 | "dev": true, 419 | "requires": { 420 | "ms": "^2.1.1" 421 | } 422 | }, 423 | "deep-is": { 424 | "version": "0.1.3", 425 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 426 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 427 | "dev": true 428 | }, 429 | "define-properties": { 430 | "version": "1.1.3", 431 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 432 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 433 | "dev": true, 434 | "requires": { 435 | "object-keys": "^1.0.12" 436 | } 437 | }, 438 | "delayed-stream": { 439 | "version": "1.0.0", 440 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 441 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 442 | }, 443 | "diff": { 444 | "version": "4.0.2", 445 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 446 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 447 | "dev": true 448 | }, 449 | "discord.js": { 450 | "version": "github:discordjs/discord.js#fe7df708e44e0280dfaf0f8e457b154781bb5140", 451 | "from": "github:discordjs/discord.js#fe7df708e44e0280dfaf0f8e457b154781bb5140", 452 | "requires": { 453 | "@discordjs/collection": "^0.1.1", 454 | "abort-controller": "^3.0.0", 455 | "form-data": "^2.3.3", 456 | "node-fetch": "^2.3.0", 457 | "prism-media": "^1.0.0", 458 | "setimmediate": "^1.0.5", 459 | "tweetnacl": "^1.0.1", 460 | "ws": "^7.2.0" 461 | } 462 | }, 463 | "doctrine": { 464 | "version": "3.0.0", 465 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 466 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 467 | "dev": true, 468 | "requires": { 469 | "esutils": "^2.0.2" 470 | } 471 | }, 472 | "emoji-regex": { 473 | "version": "7.0.3", 474 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 475 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 476 | "dev": true 477 | }, 478 | "enquirer": { 479 | "version": "2.3.5", 480 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", 481 | "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", 482 | "dev": true, 483 | "requires": { 484 | "ansi-colors": "^3.2.1" 485 | } 486 | }, 487 | "error-ex": { 488 | "version": "1.3.2", 489 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 490 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 491 | "dev": true, 492 | "requires": { 493 | "is-arrayish": "^0.2.1" 494 | } 495 | }, 496 | "es-abstract": { 497 | "version": "1.17.6", 498 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 499 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 500 | "dev": true, 501 | "requires": { 502 | "es-to-primitive": "^1.2.1", 503 | "function-bind": "^1.1.1", 504 | "has": "^1.0.3", 505 | "has-symbols": "^1.0.1", 506 | "is-callable": "^1.2.0", 507 | "is-regex": "^1.1.0", 508 | "object-inspect": "^1.7.0", 509 | "object-keys": "^1.1.1", 510 | "object.assign": "^4.1.0", 511 | "string.prototype.trimend": "^1.0.1", 512 | "string.prototype.trimstart": "^1.0.1" 513 | } 514 | }, 515 | "es-to-primitive": { 516 | "version": "1.2.1", 517 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 518 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 519 | "dev": true, 520 | "requires": { 521 | "is-callable": "^1.1.4", 522 | "is-date-object": "^1.0.1", 523 | "is-symbol": "^1.0.2" 524 | } 525 | }, 526 | "escape-string-regexp": { 527 | "version": "1.0.5", 528 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 529 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 530 | "dev": true 531 | }, 532 | "eslint": { 533 | "version": "7.3.1", 534 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", 535 | "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", 536 | "dev": true, 537 | "requires": { 538 | "@babel/code-frame": "^7.0.0", 539 | "ajv": "^6.10.0", 540 | "chalk": "^4.0.0", 541 | "cross-spawn": "^7.0.2", 542 | "debug": "^4.0.1", 543 | "doctrine": "^3.0.0", 544 | "enquirer": "^2.3.5", 545 | "eslint-scope": "^5.1.0", 546 | "eslint-utils": "^2.0.0", 547 | "eslint-visitor-keys": "^1.2.0", 548 | "espree": "^7.1.0", 549 | "esquery": "^1.2.0", 550 | "esutils": "^2.0.2", 551 | "file-entry-cache": "^5.0.1", 552 | "functional-red-black-tree": "^1.0.1", 553 | "glob-parent": "^5.0.0", 554 | "globals": "^12.1.0", 555 | "ignore": "^4.0.6", 556 | "import-fresh": "^3.0.0", 557 | "imurmurhash": "^0.1.4", 558 | "is-glob": "^4.0.0", 559 | "js-yaml": "^3.13.1", 560 | "json-stable-stringify-without-jsonify": "^1.0.1", 561 | "levn": "^0.4.1", 562 | "lodash": "^4.17.14", 563 | "minimatch": "^3.0.4", 564 | "natural-compare": "^1.4.0", 565 | "optionator": "^0.9.1", 566 | "progress": "^2.0.0", 567 | "regexpp": "^3.1.0", 568 | "semver": "^7.2.1", 569 | "strip-ansi": "^6.0.0", 570 | "strip-json-comments": "^3.1.0", 571 | "table": "^5.2.3", 572 | "text-table": "^0.2.0", 573 | "v8-compile-cache": "^2.0.3" 574 | }, 575 | "dependencies": { 576 | "ansi-styles": { 577 | "version": "4.2.1", 578 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 579 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 580 | "dev": true, 581 | "requires": { 582 | "@types/color-name": "^1.1.1", 583 | "color-convert": "^2.0.1" 584 | } 585 | }, 586 | "chalk": { 587 | "version": "4.1.0", 588 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 589 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 590 | "dev": true, 591 | "requires": { 592 | "ansi-styles": "^4.1.0", 593 | "supports-color": "^7.1.0" 594 | } 595 | }, 596 | "color-convert": { 597 | "version": "2.0.1", 598 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 599 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 600 | "dev": true, 601 | "requires": { 602 | "color-name": "~1.1.4" 603 | } 604 | }, 605 | "color-name": { 606 | "version": "1.1.4", 607 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 608 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 609 | "dev": true 610 | }, 611 | "has-flag": { 612 | "version": "4.0.0", 613 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 614 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 615 | "dev": true 616 | }, 617 | "semver": { 618 | "version": "7.3.2", 619 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 620 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 621 | "dev": true 622 | }, 623 | "supports-color": { 624 | "version": "7.1.0", 625 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 626 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 627 | "dev": true, 628 | "requires": { 629 | "has-flag": "^4.0.0" 630 | } 631 | } 632 | } 633 | }, 634 | "eslint-config-prettier": { 635 | "version": "6.11.0", 636 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", 637 | "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", 638 | "requires": { 639 | "get-stdin": "^6.0.0" 640 | } 641 | }, 642 | "eslint-config-standard": { 643 | "version": "14.1.1", 644 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", 645 | "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", 646 | "dev": true 647 | }, 648 | "eslint-import-resolver-node": { 649 | "version": "0.3.4", 650 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", 651 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", 652 | "dev": true, 653 | "requires": { 654 | "debug": "^2.6.9", 655 | "resolve": "^1.13.1" 656 | }, 657 | "dependencies": { 658 | "debug": { 659 | "version": "2.6.9", 660 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 661 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 662 | "dev": true, 663 | "requires": { 664 | "ms": "2.0.0" 665 | } 666 | }, 667 | "ms": { 668 | "version": "2.0.0", 669 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 670 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 671 | "dev": true 672 | } 673 | } 674 | }, 675 | "eslint-module-utils": { 676 | "version": "2.6.0", 677 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", 678 | "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", 679 | "dev": true, 680 | "requires": { 681 | "debug": "^2.6.9", 682 | "pkg-dir": "^2.0.0" 683 | }, 684 | "dependencies": { 685 | "debug": { 686 | "version": "2.6.9", 687 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 688 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 689 | "dev": true, 690 | "requires": { 691 | "ms": "2.0.0" 692 | } 693 | }, 694 | "ms": { 695 | "version": "2.0.0", 696 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 697 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 698 | "dev": true 699 | } 700 | } 701 | }, 702 | "eslint-plugin-es": { 703 | "version": "3.0.1", 704 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", 705 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", 706 | "dev": true, 707 | "requires": { 708 | "eslint-utils": "^2.0.0", 709 | "regexpp": "^3.0.0" 710 | } 711 | }, 712 | "eslint-plugin-import": { 713 | "version": "2.21.2", 714 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz", 715 | "integrity": "sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA==", 716 | "dev": true, 717 | "requires": { 718 | "array-includes": "^3.1.1", 719 | "array.prototype.flat": "^1.2.3", 720 | "contains-path": "^0.1.0", 721 | "debug": "^2.6.9", 722 | "doctrine": "1.5.0", 723 | "eslint-import-resolver-node": "^0.3.3", 724 | "eslint-module-utils": "^2.6.0", 725 | "has": "^1.0.3", 726 | "minimatch": "^3.0.4", 727 | "object.values": "^1.1.1", 728 | "read-pkg-up": "^2.0.0", 729 | "resolve": "^1.17.0", 730 | "tsconfig-paths": "^3.9.0" 731 | }, 732 | "dependencies": { 733 | "debug": { 734 | "version": "2.6.9", 735 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 736 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 737 | "dev": true, 738 | "requires": { 739 | "ms": "2.0.0" 740 | } 741 | }, 742 | "doctrine": { 743 | "version": "1.5.0", 744 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 745 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", 746 | "dev": true, 747 | "requires": { 748 | "esutils": "^2.0.2", 749 | "isarray": "^1.0.0" 750 | } 751 | }, 752 | "ms": { 753 | "version": "2.0.0", 754 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 755 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 756 | "dev": true 757 | } 758 | } 759 | }, 760 | "eslint-plugin-node": { 761 | "version": "11.1.0", 762 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", 763 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", 764 | "dev": true, 765 | "requires": { 766 | "eslint-plugin-es": "^3.0.0", 767 | "eslint-utils": "^2.0.0", 768 | "ignore": "^5.1.1", 769 | "minimatch": "^3.0.4", 770 | "resolve": "^1.10.1", 771 | "semver": "^6.1.0" 772 | }, 773 | "dependencies": { 774 | "ignore": { 775 | "version": "5.1.8", 776 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 777 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 778 | "dev": true 779 | }, 780 | "semver": { 781 | "version": "6.3.0", 782 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 783 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 784 | "dev": true 785 | } 786 | } 787 | }, 788 | "eslint-plugin-promise": { 789 | "version": "4.2.1", 790 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", 791 | "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", 792 | "dev": true 793 | }, 794 | "eslint-plugin-standard": { 795 | "version": "4.0.1", 796 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", 797 | "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", 798 | "dev": true 799 | }, 800 | "eslint-scope": { 801 | "version": "5.1.0", 802 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", 803 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", 804 | "dev": true, 805 | "requires": { 806 | "esrecurse": "^4.1.0", 807 | "estraverse": "^4.1.1" 808 | } 809 | }, 810 | "eslint-utils": { 811 | "version": "2.1.0", 812 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 813 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 814 | "dev": true, 815 | "requires": { 816 | "eslint-visitor-keys": "^1.1.0" 817 | } 818 | }, 819 | "eslint-visitor-keys": { 820 | "version": "1.3.0", 821 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 822 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 823 | "dev": true 824 | }, 825 | "espree": { 826 | "version": "7.1.0", 827 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", 828 | "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", 829 | "dev": true, 830 | "requires": { 831 | "acorn": "^7.2.0", 832 | "acorn-jsx": "^5.2.0", 833 | "eslint-visitor-keys": "^1.2.0" 834 | } 835 | }, 836 | "esprima": { 837 | "version": "4.0.1", 838 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 839 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 840 | "dev": true 841 | }, 842 | "esquery": { 843 | "version": "1.3.1", 844 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 845 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 846 | "dev": true, 847 | "requires": { 848 | "estraverse": "^5.1.0" 849 | }, 850 | "dependencies": { 851 | "estraverse": { 852 | "version": "5.1.0", 853 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 854 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 855 | "dev": true 856 | } 857 | } 858 | }, 859 | "esrecurse": { 860 | "version": "4.2.1", 861 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 862 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 863 | "dev": true, 864 | "requires": { 865 | "estraverse": "^4.1.0" 866 | } 867 | }, 868 | "estraverse": { 869 | "version": "4.3.0", 870 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 871 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 872 | "dev": true 873 | }, 874 | "esutils": { 875 | "version": "2.0.3", 876 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 877 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 878 | "dev": true 879 | }, 880 | "event-target-shim": { 881 | "version": "5.0.1", 882 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 883 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 884 | }, 885 | "eventemitter3": { 886 | "version": "4.0.4", 887 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", 888 | "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", 889 | "optional": true 890 | }, 891 | "fast-deep-equal": { 892 | "version": "3.1.3", 893 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 894 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 895 | "dev": true 896 | }, 897 | "fast-json-stable-stringify": { 898 | "version": "2.1.0", 899 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 900 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 901 | "dev": true 902 | }, 903 | "fast-levenshtein": { 904 | "version": "2.0.6", 905 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 906 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 907 | "dev": true 908 | }, 909 | "file-entry-cache": { 910 | "version": "5.0.1", 911 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 912 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 913 | "dev": true, 914 | "requires": { 915 | "flat-cache": "^2.0.1" 916 | } 917 | }, 918 | "find-up": { 919 | "version": "2.1.0", 920 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 921 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 922 | "dev": true, 923 | "requires": { 924 | "locate-path": "^2.0.0" 925 | } 926 | }, 927 | "flat-cache": { 928 | "version": "2.0.1", 929 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 930 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 931 | "dev": true, 932 | "requires": { 933 | "flatted": "^2.0.0", 934 | "rimraf": "2.6.3", 935 | "write": "1.0.3" 936 | } 937 | }, 938 | "flatted": { 939 | "version": "2.0.2", 940 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 941 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 942 | "dev": true 943 | }, 944 | "form-data": { 945 | "version": "2.5.1", 946 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 947 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 948 | "requires": { 949 | "asynckit": "^0.4.0", 950 | "combined-stream": "^1.0.6", 951 | "mime-types": "^2.1.12" 952 | } 953 | }, 954 | "fs-nextra": { 955 | "version": "0.4.7", 956 | "resolved": "https://registry.npmjs.org/fs-nextra/-/fs-nextra-0.4.7.tgz", 957 | "integrity": "sha512-N61ZytY7cF3VlPTQ+o90XK+TsdOaUPeX0cpwy5oOVbXaneSO6KorpsR2xSQr+GJbItkWzgu3h4ypSqCWjTeZKg==" 958 | }, 959 | "fs.realpath": { 960 | "version": "1.0.0", 961 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 962 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 963 | "dev": true 964 | }, 965 | "function-bind": { 966 | "version": "1.1.1", 967 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 968 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 969 | "dev": true 970 | }, 971 | "functional-red-black-tree": { 972 | "version": "1.0.1", 973 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 974 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 975 | "dev": true 976 | }, 977 | "get-stdin": { 978 | "version": "6.0.0", 979 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", 980 | "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" 981 | }, 982 | "glob": { 983 | "version": "7.1.6", 984 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 985 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 986 | "dev": true, 987 | "requires": { 988 | "fs.realpath": "^1.0.0", 989 | "inflight": "^1.0.4", 990 | "inherits": "2", 991 | "minimatch": "^3.0.4", 992 | "once": "^1.3.0", 993 | "path-is-absolute": "^1.0.0" 994 | } 995 | }, 996 | "glob-parent": { 997 | "version": "5.1.2", 998 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 999 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1000 | "dev": true, 1001 | "requires": { 1002 | "is-glob": "^4.0.1" 1003 | } 1004 | }, 1005 | "globals": { 1006 | "version": "12.4.0", 1007 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 1008 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 1009 | "dev": true, 1010 | "requires": { 1011 | "type-fest": "^0.8.1" 1012 | } 1013 | }, 1014 | "graceful-fs": { 1015 | "version": "4.2.4", 1016 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1017 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 1018 | "dev": true 1019 | }, 1020 | "has": { 1021 | "version": "1.0.3", 1022 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1023 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1024 | "dev": true, 1025 | "requires": { 1026 | "function-bind": "^1.1.1" 1027 | } 1028 | }, 1029 | "has-flag": { 1030 | "version": "3.0.0", 1031 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1032 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1033 | "dev": true 1034 | }, 1035 | "has-symbols": { 1036 | "version": "1.0.1", 1037 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1038 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 1039 | "dev": true 1040 | }, 1041 | "hosted-git-info": { 1042 | "version": "2.8.9", 1043 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 1044 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", 1045 | "dev": true 1046 | }, 1047 | "ignore": { 1048 | "version": "4.0.6", 1049 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1050 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1051 | "dev": true 1052 | }, 1053 | "import-fresh": { 1054 | "version": "3.2.1", 1055 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 1056 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 1057 | "dev": true, 1058 | "requires": { 1059 | "parent-module": "^1.0.0", 1060 | "resolve-from": "^4.0.0" 1061 | } 1062 | }, 1063 | "imurmurhash": { 1064 | "version": "0.1.4", 1065 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1066 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1067 | "dev": true 1068 | }, 1069 | "inflight": { 1070 | "version": "1.0.6", 1071 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1072 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1073 | "dev": true, 1074 | "requires": { 1075 | "once": "^1.3.0", 1076 | "wrappy": "1" 1077 | } 1078 | }, 1079 | "inherits": { 1080 | "version": "2.0.4", 1081 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1082 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1083 | "dev": true 1084 | }, 1085 | "is-arrayish": { 1086 | "version": "0.2.1", 1087 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1088 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1089 | "dev": true 1090 | }, 1091 | "is-callable": { 1092 | "version": "1.2.0", 1093 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 1094 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", 1095 | "dev": true 1096 | }, 1097 | "is-date-object": { 1098 | "version": "1.0.2", 1099 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1100 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 1101 | "dev": true 1102 | }, 1103 | "is-extglob": { 1104 | "version": "2.1.1", 1105 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1106 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1107 | "dev": true 1108 | }, 1109 | "is-fullwidth-code-point": { 1110 | "version": "2.0.0", 1111 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1112 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1113 | "dev": true 1114 | }, 1115 | "is-glob": { 1116 | "version": "4.0.1", 1117 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1118 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1119 | "dev": true, 1120 | "requires": { 1121 | "is-extglob": "^2.1.1" 1122 | } 1123 | }, 1124 | "is-regex": { 1125 | "version": "1.1.0", 1126 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", 1127 | "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", 1128 | "dev": true, 1129 | "requires": { 1130 | "has-symbols": "^1.0.1" 1131 | } 1132 | }, 1133 | "is-string": { 1134 | "version": "1.0.5", 1135 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 1136 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 1137 | "dev": true 1138 | }, 1139 | "is-symbol": { 1140 | "version": "1.0.3", 1141 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1142 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1143 | "dev": true, 1144 | "requires": { 1145 | "has-symbols": "^1.0.1" 1146 | } 1147 | }, 1148 | "isarray": { 1149 | "version": "1.0.0", 1150 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1151 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1152 | "dev": true 1153 | }, 1154 | "isexe": { 1155 | "version": "2.0.0", 1156 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1157 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1158 | "dev": true 1159 | }, 1160 | "js-tokens": { 1161 | "version": "4.0.0", 1162 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1163 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1164 | "dev": true 1165 | }, 1166 | "js-yaml": { 1167 | "version": "3.14.0", 1168 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 1169 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 1170 | "dev": true, 1171 | "requires": { 1172 | "argparse": "^1.0.7", 1173 | "esprima": "^4.0.0" 1174 | } 1175 | }, 1176 | "json-schema-traverse": { 1177 | "version": "0.4.1", 1178 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1179 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1180 | "dev": true 1181 | }, 1182 | "json-stable-stringify-without-jsonify": { 1183 | "version": "1.0.1", 1184 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1185 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1186 | "dev": true 1187 | }, 1188 | "json5": { 1189 | "version": "1.0.1", 1190 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 1191 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 1192 | "dev": true, 1193 | "requires": { 1194 | "minimist": "^1.2.0" 1195 | } 1196 | }, 1197 | "klasa": { 1198 | "version": "github:dirigeants/klasa#c5b4874bd9f9f22d4dfea6c02390aa6607a0c865", 1199 | "from": "github:dirigeants/klasa#settings", 1200 | "requires": { 1201 | "@klasa/querybuilder": "^0.0.1", 1202 | "@klasa/settings-gateway": "^0.0.10", 1203 | "fs-nextra": "^0.4.5" 1204 | } 1205 | }, 1206 | "levn": { 1207 | "version": "0.4.1", 1208 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1209 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1210 | "dev": true, 1211 | "requires": { 1212 | "prelude-ls": "^1.2.1", 1213 | "type-check": "~0.4.0" 1214 | } 1215 | }, 1216 | "load-json-file": { 1217 | "version": "2.0.0", 1218 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 1219 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 1220 | "dev": true, 1221 | "requires": { 1222 | "graceful-fs": "^4.1.2", 1223 | "parse-json": "^2.2.0", 1224 | "pify": "^2.0.0", 1225 | "strip-bom": "^3.0.0" 1226 | } 1227 | }, 1228 | "locate-path": { 1229 | "version": "2.0.0", 1230 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 1231 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 1232 | "dev": true, 1233 | "requires": { 1234 | "p-locate": "^2.0.0", 1235 | "path-exists": "^3.0.0" 1236 | } 1237 | }, 1238 | "lodash": { 1239 | "version": "4.17.21", 1240 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1241 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1242 | "dev": true 1243 | }, 1244 | "mime-db": { 1245 | "version": "1.44.0", 1246 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1247 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 1248 | }, 1249 | "mime-types": { 1250 | "version": "2.1.27", 1251 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1252 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1253 | "requires": { 1254 | "mime-db": "1.44.0" 1255 | } 1256 | }, 1257 | "minimatch": { 1258 | "version": "3.0.4", 1259 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1260 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1261 | "dev": true, 1262 | "requires": { 1263 | "brace-expansion": "^1.1.7" 1264 | } 1265 | }, 1266 | "minimist": { 1267 | "version": "1.2.5", 1268 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1269 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1270 | "dev": true 1271 | }, 1272 | "mkdirp": { 1273 | "version": "0.5.5", 1274 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1275 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1276 | "dev": true, 1277 | "requires": { 1278 | "minimist": "^1.2.5" 1279 | } 1280 | }, 1281 | "moment": { 1282 | "version": "2.27.0", 1283 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", 1284 | "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" 1285 | }, 1286 | "ms": { 1287 | "version": "2.1.2", 1288 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1289 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1290 | "dev": true 1291 | }, 1292 | "natural-compare": { 1293 | "version": "1.4.0", 1294 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1295 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1296 | "dev": true 1297 | }, 1298 | "node-fetch": { 1299 | "version": "2.6.0", 1300 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 1301 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" 1302 | }, 1303 | "normalize-package-data": { 1304 | "version": "2.5.0", 1305 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1306 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1307 | "dev": true, 1308 | "requires": { 1309 | "hosted-git-info": "^2.1.4", 1310 | "resolve": "^1.10.0", 1311 | "semver": "2 || 3 || 4 || 5", 1312 | "validate-npm-package-license": "^3.0.1" 1313 | } 1314 | }, 1315 | "object-inspect": { 1316 | "version": "1.8.0", 1317 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 1318 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 1319 | "dev": true 1320 | }, 1321 | "object-keys": { 1322 | "version": "1.1.1", 1323 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1324 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1325 | "dev": true 1326 | }, 1327 | "object.assign": { 1328 | "version": "4.1.0", 1329 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1330 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1331 | "dev": true, 1332 | "requires": { 1333 | "define-properties": "^1.1.2", 1334 | "function-bind": "^1.1.1", 1335 | "has-symbols": "^1.0.0", 1336 | "object-keys": "^1.0.11" 1337 | } 1338 | }, 1339 | "object.values": { 1340 | "version": "1.1.1", 1341 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", 1342 | "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", 1343 | "dev": true, 1344 | "requires": { 1345 | "define-properties": "^1.1.3", 1346 | "es-abstract": "^1.17.0-next.1", 1347 | "function-bind": "^1.1.1", 1348 | "has": "^1.0.3" 1349 | } 1350 | }, 1351 | "once": { 1352 | "version": "1.4.0", 1353 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1354 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1355 | "dev": true, 1356 | "requires": { 1357 | "wrappy": "1" 1358 | } 1359 | }, 1360 | "optionator": { 1361 | "version": "0.9.1", 1362 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1363 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1364 | "dev": true, 1365 | "requires": { 1366 | "deep-is": "^0.1.3", 1367 | "fast-levenshtein": "^2.0.6", 1368 | "levn": "^0.4.1", 1369 | "prelude-ls": "^1.2.1", 1370 | "type-check": "^0.4.0", 1371 | "word-wrap": "^1.2.3" 1372 | } 1373 | }, 1374 | "p-limit": { 1375 | "version": "1.3.0", 1376 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 1377 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 1378 | "dev": true, 1379 | "requires": { 1380 | "p-try": "^1.0.0" 1381 | } 1382 | }, 1383 | "p-locate": { 1384 | "version": "2.0.0", 1385 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1386 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1387 | "dev": true, 1388 | "requires": { 1389 | "p-limit": "^1.1.0" 1390 | } 1391 | }, 1392 | "p-try": { 1393 | "version": "1.0.0", 1394 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1395 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 1396 | "dev": true 1397 | }, 1398 | "parent-module": { 1399 | "version": "1.0.1", 1400 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1401 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1402 | "dev": true, 1403 | "requires": { 1404 | "callsites": "^3.0.0" 1405 | } 1406 | }, 1407 | "parse-json": { 1408 | "version": "2.2.0", 1409 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1410 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1411 | "dev": true, 1412 | "requires": { 1413 | "error-ex": "^1.2.0" 1414 | } 1415 | }, 1416 | "path-exists": { 1417 | "version": "3.0.0", 1418 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1419 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1420 | "dev": true 1421 | }, 1422 | "path-is-absolute": { 1423 | "version": "1.0.1", 1424 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1425 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1426 | "dev": true 1427 | }, 1428 | "path-key": { 1429 | "version": "3.1.1", 1430 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1431 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1432 | "dev": true 1433 | }, 1434 | "path-parse": { 1435 | "version": "1.0.7", 1436 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1437 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1438 | "dev": true 1439 | }, 1440 | "path-type": { 1441 | "version": "2.0.0", 1442 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1443 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1444 | "dev": true, 1445 | "requires": { 1446 | "pify": "^2.0.0" 1447 | } 1448 | }, 1449 | "pify": { 1450 | "version": "2.3.0", 1451 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1452 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1453 | "dev": true 1454 | }, 1455 | "pkg-dir": { 1456 | "version": "2.0.0", 1457 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 1458 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", 1459 | "dev": true, 1460 | "requires": { 1461 | "find-up": "^2.1.0" 1462 | } 1463 | }, 1464 | "prelude-ls": { 1465 | "version": "1.2.1", 1466 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1467 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1468 | "dev": true 1469 | }, 1470 | "prism-media": { 1471 | "version": "1.2.2", 1472 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz", 1473 | "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==" 1474 | }, 1475 | "progress": { 1476 | "version": "2.0.3", 1477 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1478 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1479 | "dev": true 1480 | }, 1481 | "punycode": { 1482 | "version": "2.1.1", 1483 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1484 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1485 | "dev": true 1486 | }, 1487 | "read-pkg": { 1488 | "version": "2.0.0", 1489 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1490 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1491 | "dev": true, 1492 | "requires": { 1493 | "load-json-file": "^2.0.0", 1494 | "normalize-package-data": "^2.3.2", 1495 | "path-type": "^2.0.0" 1496 | } 1497 | }, 1498 | "read-pkg-up": { 1499 | "version": "2.0.0", 1500 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1501 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1502 | "dev": true, 1503 | "requires": { 1504 | "find-up": "^2.0.0", 1505 | "read-pkg": "^2.0.0" 1506 | } 1507 | }, 1508 | "regexpp": { 1509 | "version": "3.1.0", 1510 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 1511 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 1512 | "dev": true 1513 | }, 1514 | "resolve": { 1515 | "version": "1.17.0", 1516 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1517 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1518 | "dev": true, 1519 | "requires": { 1520 | "path-parse": "^1.0.6" 1521 | } 1522 | }, 1523 | "resolve-from": { 1524 | "version": "4.0.0", 1525 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1526 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1527 | "dev": true 1528 | }, 1529 | "rimraf": { 1530 | "version": "2.6.3", 1531 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1532 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1533 | "dev": true, 1534 | "requires": { 1535 | "glob": "^7.1.3" 1536 | } 1537 | }, 1538 | "semver": { 1539 | "version": "5.7.1", 1540 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1541 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1542 | "dev": true 1543 | }, 1544 | "setimmediate": { 1545 | "version": "1.0.5", 1546 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 1547 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 1548 | }, 1549 | "shebang-command": { 1550 | "version": "2.0.0", 1551 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1552 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1553 | "dev": true, 1554 | "requires": { 1555 | "shebang-regex": "^3.0.0" 1556 | } 1557 | }, 1558 | "shebang-regex": { 1559 | "version": "3.0.0", 1560 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1561 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1562 | "dev": true 1563 | }, 1564 | "slice-ansi": { 1565 | "version": "2.1.0", 1566 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1567 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1568 | "dev": true, 1569 | "requires": { 1570 | "ansi-styles": "^3.2.0", 1571 | "astral-regex": "^1.0.0", 1572 | "is-fullwidth-code-point": "^2.0.0" 1573 | } 1574 | }, 1575 | "spdx-correct": { 1576 | "version": "3.1.1", 1577 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1578 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1579 | "dev": true, 1580 | "requires": { 1581 | "spdx-expression-parse": "^3.0.0", 1582 | "spdx-license-ids": "^3.0.0" 1583 | } 1584 | }, 1585 | "spdx-exceptions": { 1586 | "version": "2.3.0", 1587 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1588 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1589 | "dev": true 1590 | }, 1591 | "spdx-expression-parse": { 1592 | "version": "3.0.1", 1593 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1594 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1595 | "dev": true, 1596 | "requires": { 1597 | "spdx-exceptions": "^2.1.0", 1598 | "spdx-license-ids": "^3.0.0" 1599 | } 1600 | }, 1601 | "spdx-license-ids": { 1602 | "version": "3.0.5", 1603 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 1604 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", 1605 | "dev": true 1606 | }, 1607 | "sprintf-js": { 1608 | "version": "1.0.3", 1609 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1610 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1611 | "dev": true 1612 | }, 1613 | "string-width": { 1614 | "version": "3.1.0", 1615 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1616 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1617 | "dev": true, 1618 | "requires": { 1619 | "emoji-regex": "^7.0.1", 1620 | "is-fullwidth-code-point": "^2.0.0", 1621 | "strip-ansi": "^5.1.0" 1622 | }, 1623 | "dependencies": { 1624 | "ansi-regex": { 1625 | "version": "4.1.0", 1626 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1627 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1628 | "dev": true 1629 | }, 1630 | "strip-ansi": { 1631 | "version": "5.2.0", 1632 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1633 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1634 | "dev": true, 1635 | "requires": { 1636 | "ansi-regex": "^4.1.0" 1637 | } 1638 | } 1639 | } 1640 | }, 1641 | "string.prototype.trimend": { 1642 | "version": "1.0.1", 1643 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1644 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1645 | "dev": true, 1646 | "requires": { 1647 | "define-properties": "^1.1.3", 1648 | "es-abstract": "^1.17.5" 1649 | } 1650 | }, 1651 | "string.prototype.trimstart": { 1652 | "version": "1.0.1", 1653 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1654 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1655 | "dev": true, 1656 | "requires": { 1657 | "define-properties": "^1.1.3", 1658 | "es-abstract": "^1.17.5" 1659 | } 1660 | }, 1661 | "strip-ansi": { 1662 | "version": "6.0.0", 1663 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1664 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1665 | "dev": true, 1666 | "requires": { 1667 | "ansi-regex": "^5.0.0" 1668 | } 1669 | }, 1670 | "strip-bom": { 1671 | "version": "3.0.0", 1672 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1673 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1674 | "dev": true 1675 | }, 1676 | "strip-json-comments": { 1677 | "version": "3.1.0", 1678 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", 1679 | "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", 1680 | "dev": true 1681 | }, 1682 | "supports-color": { 1683 | "version": "5.5.0", 1684 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1685 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1686 | "dev": true, 1687 | "requires": { 1688 | "has-flag": "^3.0.0" 1689 | } 1690 | }, 1691 | "table": { 1692 | "version": "5.4.6", 1693 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1694 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1695 | "dev": true, 1696 | "requires": { 1697 | "ajv": "^6.10.2", 1698 | "lodash": "^4.17.14", 1699 | "slice-ansi": "^2.1.0", 1700 | "string-width": "^3.0.0" 1701 | } 1702 | }, 1703 | "text-table": { 1704 | "version": "0.2.0", 1705 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1706 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1707 | "dev": true 1708 | }, 1709 | "tsconfig-paths": { 1710 | "version": "3.9.0", 1711 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", 1712 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", 1713 | "dev": true, 1714 | "requires": { 1715 | "@types/json5": "^0.0.29", 1716 | "json5": "^1.0.1", 1717 | "minimist": "^1.2.0", 1718 | "strip-bom": "^3.0.0" 1719 | } 1720 | }, 1721 | "tslib": { 1722 | "version": "1.13.0", 1723 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1724 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1725 | "dev": true 1726 | }, 1727 | "tslint": { 1728 | "version": "6.1.2", 1729 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", 1730 | "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", 1731 | "dev": true, 1732 | "requires": { 1733 | "@babel/code-frame": "^7.0.0", 1734 | "builtin-modules": "^1.1.1", 1735 | "chalk": "^2.3.0", 1736 | "commander": "^2.12.1", 1737 | "diff": "^4.0.1", 1738 | "glob": "^7.1.1", 1739 | "js-yaml": "^3.13.1", 1740 | "minimatch": "^3.0.4", 1741 | "mkdirp": "^0.5.3", 1742 | "resolve": "^1.3.2", 1743 | "semver": "^5.3.0", 1744 | "tslib": "^1.10.0", 1745 | "tsutils": "^2.29.0" 1746 | } 1747 | }, 1748 | "tsutils": { 1749 | "version": "2.29.0", 1750 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 1751 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 1752 | "dev": true, 1753 | "requires": { 1754 | "tslib": "^1.8.1" 1755 | } 1756 | }, 1757 | "tweetnacl": { 1758 | "version": "1.0.3", 1759 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 1760 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 1761 | }, 1762 | "type-check": { 1763 | "version": "0.4.0", 1764 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1765 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1766 | "dev": true, 1767 | "requires": { 1768 | "prelude-ls": "^1.2.1" 1769 | } 1770 | }, 1771 | "type-fest": { 1772 | "version": "0.8.1", 1773 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1774 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1775 | "dev": true 1776 | }, 1777 | "typescript": { 1778 | "version": "3.9.5", 1779 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", 1780 | "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", 1781 | "dev": true 1782 | }, 1783 | "uri-js": { 1784 | "version": "4.2.2", 1785 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1786 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1787 | "dev": true, 1788 | "requires": { 1789 | "punycode": "^2.1.0" 1790 | } 1791 | }, 1792 | "v8-compile-cache": { 1793 | "version": "2.1.1", 1794 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 1795 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", 1796 | "dev": true 1797 | }, 1798 | "validate-npm-package-license": { 1799 | "version": "3.0.4", 1800 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1801 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1802 | "dev": true, 1803 | "requires": { 1804 | "spdx-correct": "^3.0.0", 1805 | "spdx-expression-parse": "^3.0.0" 1806 | } 1807 | }, 1808 | "which": { 1809 | "version": "2.0.2", 1810 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1811 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1812 | "dev": true, 1813 | "requires": { 1814 | "isexe": "^2.0.0" 1815 | } 1816 | }, 1817 | "word-wrap": { 1818 | "version": "1.2.3", 1819 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1820 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1821 | "dev": true 1822 | }, 1823 | "wrappy": { 1824 | "version": "1.0.2", 1825 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1826 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1827 | "dev": true 1828 | }, 1829 | "write": { 1830 | "version": "1.0.3", 1831 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1832 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1833 | "dev": true, 1834 | "requires": { 1835 | "mkdirp": "^0.5.1" 1836 | } 1837 | }, 1838 | "ws": { 1839 | "version": "7.4.6", 1840 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 1841 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" 1842 | } 1843 | } 1844 | } 1845 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord.bio", 3 | "version": "1.0.0", 4 | "description": "The discord.bio server bot.", 5 | "main": "bin/src/index.js", 6 | "scripts": { 7 | "start": "tsc && node bin/src/index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/discord-bio/bot.git" 13 | }, 14 | "author": "discord.bio", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/discord-bio/bot/issues" 18 | }, 19 | "homepage": "https://github.com/discord-bio/bot#readme", 20 | "devDependencies": { 21 | "@typescript-eslint/eslint-plugin": "^3.4.0", 22 | "@typescript-eslint/parser": "^3.4.0", 23 | "eslint": "^7.3.1", 24 | "eslint-config-standard": "^14.1.1", 25 | "eslint-plugin-import": "^2.21.2", 26 | "eslint-plugin-node": "^11.1.0", 27 | "eslint-plugin-promise": "^4.2.1", 28 | "eslint-plugin-standard": "^4.0.1", 29 | "tslint": "^6.1.2", 30 | "typescript": "^3.9.5" 31 | }, 32 | "dependencies": { 33 | "@types/node-fetch": "^2.5.7", 34 | "@types/ws": "^7.2.5", 35 | "dbiowrap": "^1.1.2-patch2", 36 | "discord.js": "github:discordjs/discord.js#fe7df708e44e0280dfaf0f8e457b154781bb5140", 37 | "eslint-config-prettier": "^6.11.0", 38 | "klasa": "github:dirigeants/klasa#settings", 39 | "moment": "^2.27.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | while : 4 | do 5 | echo "Starting process..." 6 | cd /home/bot/bin/src 7 | node index.js 8 | if [ $? -eq 0 ] 9 | then 10 | echo "Stopping process..." # exit shell script if exit code is 0 11 | break 12 | fi 13 | sleep 10 # wait 10 seconds before restarting 14 | done -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import { Client as KlasaClient, KlasaClientOptions } from 'klasa'; 2 | 3 | import { Guild, TextChannel, EmbedField } from 'discord.js'; 4 | 5 | import { Client as DBioWrapClient } from 'dbiowrap/lib/client'; 6 | import { dBioWrapClientOptions } from './constants'; 7 | 8 | import { prefix } from '../config.json'; 9 | 10 | export default class DiscordBioClient extends KlasaClient { 11 | public discordBioClient: DBioWrapClient; 12 | 13 | constructor(options: KlasaClientOptions) { 14 | super(options); 15 | this.discordBioClient = new DBioWrapClient(dBioWrapClientOptions); 16 | this.on('guildCreate', this._onJoin.bind(this)); 17 | } 18 | 19 | _onJoin(guild: Guild) { 20 | const channels = guild.channels; 21 | const channelToSend = channels.find(c => c.name === 'general' || c.name === 'chat'); 22 | if(!channelToSend || !(channelToSend instanceof TextChannel)) return; 23 | const fields: EmbedField[] = []; 24 | this.commands.forEach(c => { 25 | if(( c).officialGuildOnly === false && c.name !== 'help') { 26 | fields.push({ 27 | name: `${prefix}${c.name}`, 28 | value: c.description, 29 | inline: true 30 | }); 31 | } 32 | }); 33 | channelToSend.send({ embed: { 34 | title: "👋 Thanks for adding us to your server!", 35 | description: "You can now view **discord.bio profiles** and the **top liked profiles** directly in your server.", 36 | fields, 37 | color: 0xb300ff, 38 | footer: { 39 | text: "discord.bio" 40 | } 41 | }}); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/commands/discord.bio/profile.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-irregular-whitespace */ 2 | import { Command, CommandStore, CommandOptions, KlasaMessage, KlasaUser } from 'klasa'; 3 | import { MessageEmbed } from 'discord.js'; 4 | import { DefaultCommandOptions } from '../../constants'; 5 | import DiscordBioClient from '../../client'; 6 | import moment from 'moment'; 7 | 8 | const ThisCommandOptions: CommandOptions = { 9 | ...DefaultCommandOptions, 10 | name: 'profile', 11 | aliases: ['p', 'bio'], 12 | usage: '[profile:string]', 13 | description: 'Fetch a user\'s profile by ID or slug' 14 | }; 15 | 16 | enum Gender { 17 | 'Male', 18 | 'Female', 19 | 'Non-binary', 20 | } 21 | 22 | export default class extends Command { 23 | public officialGuildOnly = false; 24 | 25 | constructor(store: CommandStore, file: string[], directory: string) { 26 | super(store, file, directory, ThisCommandOptions); 27 | } 28 | 29 | public async run(message: KlasaMessage, [profile]: any): Promise { 30 | if (!profile) profile = message.author.id; 31 | profile = profile.replace(/[\\<>@#&!]/g, ''); 32 | 33 | const discordBioClient = ( message.client).discordBioClient; 34 | let response; 35 | try { 36 | response = await discordBioClient.rest?.fetchUserDetails(profile).then((r) => r.payload); 37 | } catch (e) { 38 | return await message.sendMessage(e.message); 39 | } 40 | if(!response) return message.sendMessage('User not found'); 41 | const { user, discord } = response; 42 | const name = `${discord.username}#${discord.discriminator}`; 43 | const url = `https://discord.bio/p/${user.details.slug}`; 44 | const avatar = discord.avatar 45 | ? `https://cdn.discordapp.com/avatars/${discord.id}/${discord.avatar}.png?size=256` 46 | : null; 47 | 48 | const embed = new MessageEmbed(); 49 | embed.setColor('PURPLE'); 50 | embed.setAuthor(name, avatar || undefined, url); 51 | if (avatar) embed.setThumbnail(avatar); 52 | if (user.details.banner) embed.setImage(user.details.banner); 53 | embed.setTitle(`${name} \`(${user.details.slug})\``); 54 | embed.setDescription( 55 | `🗒️**About:** ${user.details.description || 'No about set.'}\n​❤️ **${user.details.likes} like${ 56 | user.details.likes !== 1 ? 's' : '' 57 | }**\n​`, 58 | ); 59 | embed.addField('🆔 User ID', discord.id); 60 | embed.addField('🗺️ Location', user.details.location || 'No location', true); 61 | embed.addField( 62 | '🎂 Birthday', 63 | user.details.birthday ? moment(new Date(user.details.birthday)).format('MMM Do YYYY') : 'No birthday', 64 | true, 65 | ); 66 | embed.addField('🚻 Gender', user.details.gender !== null ? Gender[user.details.gender] : 'No gender', true); 67 | embed.addField('✉️ Mail', user.details.email || 'No email', true); 68 | embed.addField('🛠️ Occupation', user.details.occupation || 'No occupation', true); 69 | embed.addField( 70 | '🗓️ Account Created', 71 | moment(user.details.created_at).format('MMMM Do YYYY, h:mm:ss a') || 'No creation date.', 72 | true, 73 | ); 74 | 75 | return message.send(embed); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/commands/discord.bio/top.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions } from '../../constants'; 3 | 4 | import { TopLikes } from 'dbiowrap/lib/rest/types'; 5 | 6 | import { MessageEmbed } from 'discord.js'; 7 | 8 | import DiscordBioClient from '../../client'; 9 | import { RestClient } from 'dbiowrap/lib/rest/restclient'; 10 | 11 | const ThisCommandOptions: CommandOptions = { 12 | ...DefaultCommandOptions, 13 | name: 'top', 14 | description: 'Fetch users with the most likes on discord.bio' 15 | }; 16 | 17 | export default class extends Command { 18 | public officialGuildOnly = false; 19 | 20 | constructor(store: CommandStore, file: string[], directory: string) { 21 | super(store, file, directory, ThisCommandOptions); 22 | } 23 | 24 | public async run(message: KlasaMessage): Promise { 25 | const discordBioClient = (message.client).discordBioClient; 26 | let topUsers: TopLikes.Response; 27 | try { 28 | topUsers = await ( discordBioClient.rest).fetchTopUsers(); 29 | } catch (e) { 30 | return await message.sendMessage(e.message); 31 | } 32 | const payload = topUsers.payload.users; 33 | const users: typeof payload = payload.filter((i, index) => index < 10); 34 | 35 | const embed = new MessageEmbed().setTitle('❤️ **Top Likes**').setColor(0xff0000); 36 | users.forEach((obj, index) => { 37 | embed.addField( 38 | `**[${index + 1}]** ${obj.discord.username}#${obj.discord.discriminator}`, 39 | `${obj.user.likes} likes`, 40 | ); 41 | }); 42 | 43 | return await message.sendMessage(embed); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/commands/misc/ping.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions } from '../../constants'; 3 | 4 | const ThisCommandOptions: CommandOptions = { 5 | ...DefaultCommandOptions, 6 | name: 'ping', 7 | description: 'Fetch the bot\'s latency to Discord' 8 | }; 9 | 10 | export default class extends Command { 11 | public officialGuildOnly = false; 12 | 13 | constructor(store: CommandStore, file: string[], directory: string) { 14 | super(store, file, directory, ThisCommandOptions); 15 | } 16 | 17 | public async run(message: KlasaMessage): Promise { 18 | const start = Date.now(); 19 | return await message.sendMessage('🏓 Ping...').then((res) => res.edit(`📡 Pong: ${Date.now() - start}ms`)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/commands/misc/update.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions } from '../../constants'; 3 | import { execSync } from 'child_process'; 4 | import { owners } from '../../../config.json'; 5 | 6 | const ThisCommandOptions: CommandOptions = { 7 | ...DefaultCommandOptions, 8 | name: 'update', 9 | cooldown: 0 10 | }; 11 | 12 | export default class extends Command { 13 | public officialGuildOnly = true; 14 | 15 | constructor(store: CommandStore, file: string[], directory: string) { 16 | super(store, file, directory, ThisCommandOptions); 17 | } 18 | 19 | public async run (message: KlasaMessage): Promise { 20 | if(!owners.includes(message.author.id)) return null; 21 | const msg = await message.sendMessage('<:github:669562305176141831> **Pulling from Git**'); 22 | execSync('git pull'); 23 | await msg.edit('<:ts:728674877829152889> **Transpiling**'); 24 | execSync('tsc'); 25 | await msg.edit('🔄 **Restarting**'); 26 | process.exit(-1); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/commands/mod/ban.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions, DBIO_GUILD } from '../../constants'; 3 | 4 | const MOD_ROLE = '661332732168765440'; 5 | 6 | const MILLISECONDS_IN_DAY = 86400000; 7 | 8 | const BAN_LIMIT = 50; 9 | 10 | const ThisCommandOptions: CommandOptions = { 11 | ...DefaultCommandOptions, 12 | name: 'ban', 13 | description: 'Ban a member (discord.bio server exclusive)' 14 | }; 15 | 16 | export default class extends Command { 17 | public officialGuildOnly = true; 18 | private usesThisInterval = 0; 19 | private intervalReset = Date.now(); 20 | 21 | constructor(store: CommandStore, file: string[], directory: string) { 22 | super(store, file, directory, ThisCommandOptions); 23 | } 24 | 25 | public async run(message: KlasaMessage): Promise { 26 | if(message.guild?.id !== DBIO_GUILD) return null; 27 | if (!message.member?.roles.has(MOD_ROLE) && !message.member?.permissions.has('BAN_MEMBERS')) return null; 28 | const memberId = message.content.split(' ')[1]; 29 | // eslint-disable-next-line no-useless-escape 30 | const member = message.guild?.members.get(memberId.replace(/[<|>|\@|\!]/g, '')); 31 | if (!member) return await message.sendMessage('Member not found'); 32 | const reason = message.content.split(' ').slice(2).join(' '); 33 | await member.ban({ 34 | reason: reason || 'No reason provided.', 35 | }); 36 | if (this.usesThisInterval >= BAN_LIMIT) { 37 | return message.sendMessage( 38 | `The daily ban limit has been exceeded. It resets at: ${new Date(this.intervalReset).toUTCString()}.`, 39 | ); 40 | } 41 | this.usesThisInterval++; 42 | return await message.sendMessage('Banned member!'); 43 | } 44 | 45 | public async init(): Promise { 46 | this.intervalReset += MILLISECONDS_IN_DAY; 47 | setInterval(() => { 48 | this.intervalReset += MILLISECONDS_IN_DAY; 49 | this.usesThisInterval = 0; 50 | }, MILLISECONDS_IN_DAY); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/commands/util/help.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions } from '../../constants'; 3 | import { prefix } from '../../../config.json'; 4 | 5 | const ThisCommandOptions: CommandOptions = { 6 | ...DefaultCommandOptions, 7 | name: 'help', 8 | description: 'This command list' 9 | }; 10 | 11 | export default class extends Command { 12 | public officialGuildOnly = false; 13 | 14 | constructor(store: CommandStore, file: string[], directory: string) { 15 | super(store, file, directory, ThisCommandOptions); 16 | } 17 | 18 | public async run(message: KlasaMessage): Promise { 19 | return message.sendMessage({ embed: { 20 | title: 'Command List', 21 | description: message.client.commands.filter(c => ( c).officialGuildOnly === false).map(c => `**${prefix}${c.name}** - ${c.description}`).join('\n'), 22 | color: 0x800080 23 | }}); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/commands/util/invite.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions, BOT_INVITE } from '../../constants'; 3 | 4 | const ThisCommandOptions: CommandOptions = { 5 | ...DefaultCommandOptions, 6 | name: 'invite', 7 | description: 'Get the URL to invite the bot' 8 | }; 9 | 10 | export default class extends Command { 11 | public officialGuildOnly = false; 12 | 13 | constructor(store: CommandStore, file: string[], directory: string) { 14 | super(store, file, directory, ThisCommandOptions); 15 | } 16 | 17 | public async run(message: KlasaMessage): Promise { 18 | return message.sendMessage(`Invite the bot with this link: <${BOT_INVITE}>`); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/commands/util/links.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaClient, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions, SITE_URL, API_URL, BOT_INVITE } from '../../constants'; 3 | 4 | const ThisCommandOptions: CommandOptions = { 5 | ...DefaultCommandOptions, 6 | name: 'links', 7 | description: 'Some useful discord.bio resources' 8 | }; 9 | 10 | export default class extends Command { 11 | public officialGuildOnly = false; 12 | 13 | constructor(store: CommandStore, file: string[], directory: string) { 14 | super(store, file, directory, ThisCommandOptions); 15 | } 16 | 17 | public async run(message: KlasaMessage): Promise { 18 | return message.sendMessage('', { embed: { 19 | title: 'Useful Links', 20 | color: 0x800080, 21 | description: `[Website](${SITE_URL})\n[API](${API_URL})\n[Discord](${BOT_INVITE})\n[Bot Invite](${BOT_INVITE})`, 22 | thumbnail: { 23 | url: 'https://cdn.discordapp.com/avatars/660184868772249610/cb8f1853728403ef77590cd967d3b4c4.webp' 24 | }, 25 | timestamp: Date.now() 26 | }}); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/commands/util/suggest.ts: -------------------------------------------------------------------------------- 1 | import { Command, CommandStore, CommandOptions, KlasaMessage } from 'klasa'; 2 | import { DefaultCommandOptions, SUGGESTION_CHANNEL_ID, DBIO_GUILD } from '../../constants'; 3 | import { TextChannel } from 'discord.js'; 4 | 5 | const ThisCommandOptions: CommandOptions = { 6 | ...DefaultCommandOptions, 7 | name: 'suggest', 8 | description: 'Suggest a feature for discord.bio (discord.bio server exclusive)' 9 | }; 10 | 11 | export default class extends Command { 12 | public officialGuildOnly = true; 13 | 14 | constructor(store: CommandStore, file: string[], directory: string) { 15 | super(store, file, directory, ThisCommandOptions); 16 | } 17 | 18 | public async run(message: KlasaMessage): Promise { 19 | if(message.guild?.id !== DBIO_GUILD) return null; 20 | const content = message.content; 21 | if (!content) { 22 | return message.sendMessage('No suggestion provided.'); 23 | } else { 24 | const suggestion = content.split(' ').slice(1).join(" "); 25 | if(suggestion.trim().length === 0) return message.sendMessage('<:dBoxCross:707177937375461397> You need to provide a suggestion to send.'); 26 | const suggestionChannel = message.client.channels.get(SUGGESTION_CHANNEL_ID); 27 | if(!suggestionChannel) throw new Error('No channel found'); 28 | return ( ( suggestionChannel).send('', { embed: { 29 | author: { 30 | name: message.author.username, 31 | iconURL: message.author.avatarURL() || undefined 32 | }, 33 | color: 0xFFFF00, 34 | description: `**Suggestion**\n${suggestion}`, 35 | thumbnail: { 36 | url: 'https://cdn.discordapp.com/avatars/660184868772249610/cb8f1853728403ef77590cd967d3b4c4.webp' 37 | }, 38 | timestamp: new Date() 39 | }}).then(() => { 40 | message.sendMessage('<:dBoxCheck:707177937966989353> Your suggestion was submitted.'); 41 | })); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | import { KlasaClientOptions, CommandOptions } from 'klasa'; 2 | 3 | import config from '../config.json'; 4 | import { ClientOptions as dBioClientOptions } from 'dbiowrap/lib/client'; 5 | 6 | export const COMMAND_MESSAGE_LIFETIME = 30000; 7 | 8 | export const DISABLED_STOCK_COMMANDS = ['stats', 'info']; 9 | 10 | export const SUGGESTION_CHANNEL_ID = "661333033655468033"; 11 | 12 | export const DBIO_GUILD = "661331961188712459"; 13 | 14 | export const ClientOptions: KlasaClientOptions = { 15 | prefix: config.prefix, 16 | fetchAllMembers: false, 17 | owners: config.owners, 18 | commandEditing: true, 19 | commandMessageLifetime: COMMAND_MESSAGE_LIFETIME 20 | }; 21 | 22 | export const dBioWrapClientOptions: dBioClientOptions = { 23 | cache: { 24 | userProfiles: { 25 | expire: 60000, 26 | limit: 10 27 | } 28 | } 29 | }; 30 | 31 | export enum CommandRunInTypes { 32 | TEXT = 'text', 33 | DM = 'dm' 34 | } 35 | 36 | export const DefaultCommandOptions: CommandOptions = { 37 | runIn: [CommandRunInTypes.TEXT, CommandRunInTypes.DM], 38 | bucket: 1, 39 | cooldown: 3, 40 | deletable: true, 41 | description: 'No description found', 42 | enabled: true, 43 | extendedHelp: 'No help found', 44 | guarded: true, 45 | nsfw: false, 46 | permissionLevel: 0, 47 | promptLimit: 0, 48 | quotedStringSupport: false, 49 | requiredPermissions: [], 50 | requiredSettings: [], 51 | subcommands: false, 52 | usage: '', 53 | usageDelim: ' ', 54 | }; 55 | 56 | 57 | export const API_URL = 'https://api.discord.bio/'; 58 | export const SITE_URL = 'https://discord.bio/'; 59 | export const DISCORD_SERVER_INVITE = 'https://discord.gg/bWSxwz8'; 60 | export const BOT_INVITE = 'https://discord.com/api/oauth2/authorize?client_id=660184868772249610&permissions=8&scope=bot'; -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { ClientOptions, DISABLED_STOCK_COMMANDS } from './constants'; 2 | import { token } from '../config.json'; 3 | import DiscordBioClient from './client'; 4 | 5 | const client = new DiscordBioClient(ClientOptions); 6 | 7 | (async () => { 8 | await client.login(token).then(() => { 9 | DISABLED_STOCK_COMMANDS.forEach(command => { 10 | const c = client.commands.get(command); 11 | if (c) { 12 | c.disable(); 13 | c.hidden = true; 14 | } 15 | }); 16 | }); 17 | })(); 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "outDir": "./bin", 6 | "downlevelIteration": true, 7 | "strict": true, 8 | "esModuleInterop": true, 9 | "resolveJsonModule": true, 10 | "forceConsistentCasingInFileNames": true 11 | } 12 | } --------------------------------------------------------------------------------