From 0874cbc450d58fc77557b772e0ef2c2c33ec0af4 Mon Sep 17 00:00:00 2001 From: mudkipscience Date: Mon, 9 Mar 2020 12:11:33 +1100 Subject: [PATCH] Updated to 1.1.0 --- .gitignore | 1 + LICENSE => LICENSE.md | 0 README.md | 2 +- package-lock.json | 5623 ------------------- package.json | 71 +- {media/sounds => resources/audio}/WOOMY.mp3 | Bin fax.png => resources/images/fax.png | Bin resources/other/genders.json | 4 + resources/other/lyrics.json | 122 + resources/other/pronouns.json | 3 + resources/other/sexualities.json | 3 + src/commands/8ball.js | 7 - src/commands/about.js | 19 +- src/commands/achievement.js | 14 +- src/commands/adminrole.js | 17 +- src/commands/autorole.js | 31 +- src/commands/avatar.js | 2 +- src/commands/ban.js | 49 +- src/commands/blacklist.js | 2 +- src/commands/bohemian_rhapsody.js | 52 +- src/commands/changelog.js | 2 +- src/commands/colour.js | 55 +- src/commands/credits.js | 2 +- src/commands/creeper.js | 75 +- src/commands/echo.js | 27 - src/commands/emoji.js | 43 + src/commands/emojify.js | 7 +- src/commands/eval.js | 23 +- src/commands/feedback.js | 6 +- src/commands/flip.js | 6 +- src/commands/giverole.js | 25 +- src/commands/hackban.js | 20 +- src/commands/help.js | 4 +- src/commands/inspirobot.js | 33 + src/commands/kick.js | 12 +- src/commands/math.js | 7 +- src/commands/modlogs.js | 1 - src/commands/modrole.js | 17 +- src/commands/mute.js | 57 +- src/commands/mutedrole.js | 19 +- src/commands/nowplaying.js | 6 +- src/commands/owoify.js | 4 + src/commands/ping.js | 8 +- src/commands/play.js | 2 +- src/commands/purge.js | 51 +- src/commands/queue.js | 4 +- src/commands/raidmode.js | 10 +- src/commands/randurban.js | 2 +- src/commands/restart.js | 7 +- src/commands/rolecolour.js | 17 +- src/commands/roleinfo.js | 14 +- src/commands/sans.js | 11 +- src/commands/say.js | 28 + src/commands/servericon.js | 2 +- src/commands/serverinfo.js | 98 +- src/commands/settings.js | 23 +- src/commands/skip.js | 2 +- src/commands/softban.js | 99 + src/commands/stop.js | 2 +- src/commands/takerole.js | 23 +- src/commands/unmute.js | 23 +- src/commands/urban.js | 8 +- src/commands/userinfo.js | 114 +- src/commands/weather.js | 10 +- src/commands/woomy.js | 15 +- src/events/error.js | 2 +- src/events/guildCreate.js | 16 +- src/events/guildDelete.js | 24 +- src/events/guildMemberAdd.js | 34 +- src/events/guildMemberRemove.js | 10 +- src/events/message.js | 30 +- src/events/messageDelete.js | 6 +- src/events/messageUpdate.js | 8 +- src/events/ready.js | 11 +- src/index.js | 67 + src/modules/Logger.js | 67 +- src/modules/functions.js | 56 +- update.json | 4 - version.json | 4 + woomy.js | 63 - 80 files changed, 1067 insertions(+), 6381 deletions(-) rename LICENSE => LICENSE.md (100%) delete mode 100644 package-lock.json rename {media/sounds => resources/audio}/WOOMY.mp3 (100%) rename fax.png => resources/images/fax.png (100%) create mode 100644 resources/other/genders.json create mode 100644 resources/other/lyrics.json create mode 100644 resources/other/pronouns.json create mode 100644 resources/other/sexualities.json delete mode 100644 src/commands/echo.js create mode 100644 src/commands/emoji.js create mode 100644 src/commands/inspirobot.js create mode 100644 src/commands/say.js create mode 100644 src/commands/softban.js create mode 100644 src/index.js delete mode 100644 update.json create mode 100644 version.json delete mode 100644 woomy.js diff --git a/.gitignore b/.gitignore index f2eb756..656811d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules data config.js +package-lock.json \ No newline at end of file diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/README.md b/README.md index 04c4ee8..693f553 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Self hosting is generally not recommended, but instructions are provided below i # Requirements - git -- node.js v8.0.0 or higher +- node.js v12.0.0 or higher - node-gyp build tools - ffmpeg diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index cee4589..0000000 --- a/package-lock.json +++ /dev/null @@ -1,5623 +0,0 @@ -{ - "name": "woomy", - "version": "0.5.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "11.15.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.4.tgz", - "integrity": "sha512-z7deEbNOPcS7pb7uyaZhbITh18ruGghYh86VmUL2zJPKeu9tEAqF0goQH0dhWamHoBJpkyWroNxPZjzNvbYVCw==" - }, - "JSONSelect": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", - "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async.eachof": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.eachof/-/async.eachof-0.5.2.tgz", - "integrity": "sha1-Y3//bnAwJ1NCJX/19Ys7hPYc7KY=", - "requires": { - "async.util.keyiterator": "0.5.2", - "async.util.noop": "0.5.2", - "async.util.once": "0.5.2", - "async.util.onlyonce": "0.5.2" - } - }, - "async.parallel": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.parallel/-/async.parallel-0.5.2.tgz", - "integrity": "sha1-wv2ZWkfriRlS+p3g3Qth2m+tvxE=", - "requires": { - "async.eachof": "0.5.2", - "async.util.parallel": "0.5.2" - } - }, - "async.util.isarray": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.isarray/-/async.util.isarray-0.5.2.tgz", - "integrity": "sha1-5i2sjyY29lh13PdSHC0k0N+yu98=" - }, - "async.util.isarraylike": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.isarraylike/-/async.util.isarraylike-0.5.2.tgz", - "integrity": "sha1-jn+H2pFB8vCZboBAR30NTv4/UPg=", - "requires": { - "async.util.isarray": "0.5.2" - } - }, - "async.util.keyiterator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.keyiterator/-/async.util.keyiterator-0.5.2.tgz", - "integrity": "sha1-M55s6PidAAQz+3gU4ico8/F1CQ0=", - "requires": { - "async.util.isarraylike": "0.5.2", - "async.util.keys": "0.5.2" - } - }, - "async.util.keys": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.keys/-/async.util.keys-0.5.2.tgz", - "integrity": "sha1-XDTd2KPtt6eIPJtf4hJngbIJivY=" - }, - "async.util.noop": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.noop/-/async.util.noop-0.5.2.tgz", - "integrity": "sha1-vdYrl8sKo/YLWGrRSEaGmJdeWLk=" - }, - "async.util.once": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.once/-/async.util.once-0.5.2.tgz", - "integrity": "sha1-FFPLdATK0IImlPq6vEepblyqchY=" - }, - "async.util.onlyonce": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz", - "integrity": "sha1-uOb8AErckjFk154y8oE+5GXCT/I=" - }, - "async.util.parallel": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.parallel/-/async.util.parallel-0.5.2.tgz", - "integrity": "sha1-IzUk49b6/9XplddUdrjZJPloCM0=", - "requires": { - "async.util.isarraylike": "0.5.2", - "async.util.noop": "0.5.2", - "async.util.restparam": "0.5.2" - } - }, - "async.util.restparam": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/async.util.restparam/-/async.util.restparam-0.5.2.tgz", - "integrity": "sha1-A+/r88Ane5ciDlJaunUPXgT8gM0=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "augment": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/augment/-/augment-3.2.1.tgz", - "integrity": "sha1-7F2elFYUDvqxEQ/ds1LL5U5/sxw=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } - } - }, - "better-sqlite-pool": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/better-sqlite-pool/-/better-sqlite-pool-0.2.2.tgz", - "integrity": "sha512-EZCfYtrc80kGSQ4AXLChEeSV5agMF8BSRqBaH4X852Nk0qoCA1GFv5j9r5JjpUDlQR0GDa10rosivMX15CH+Dw==", - "requires": { - "better-sqlite3": "^5.4.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "better-sqlite3": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-5.4.2.tgz", - "integrity": "sha512-BtRGasolxvhCwgsak876fBZiXMn0YNOfvy9RYXT0RO3G8RkL9z45qXTuavuMXUL6bx4cxdxP1k4pC0xOfVKwvg==", - "requires": { - "integer": "^2.1.0", - "tar": "^4.4.10" - } - }, - "integer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/integer/-/integer-2.1.0.tgz", - "integrity": "sha512-vBtiSgrEiNocWvvZX1RVfeOKa2mCHLZQ2p9nkQkQZ/BvEiY+6CcUz0eyjvIiewjJoeNidzg2I+tpPJvpyspL1w==" - } - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" - }, - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" - }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "boom": { - "version": "2.10.1", - "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.x.x" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cheerio": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", - "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=", - "requires": { - "css-select": "~1.0.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "~3.8.1", - "lodash": "^3.2.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" - } - }, - "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, - "cli-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", - "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", - "requires": { - "ansi-regex": "^2.1.1", - "d": "1", - "es5-ext": "^0.10.12", - "es6-iterator": "2", - "memoizee": "^0.4.3", - "timers-ext": "0.1" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cpu-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cpu-stats/-/cpu-stats-1.0.0.tgz", - "integrity": "sha1-Mqkp1xk3nzXQ0+4MLS0T72zhX+8=" - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.x.x" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "css-select": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", - "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "1.0", - "domutils": "1.4", - "nth-check": "~1.0.0" - } - }, - "css-what": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", - "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w=" - }, - "d": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "^0.10.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dasu": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.0.23.tgz", - "integrity": "sha1-xKlmZn7nqDykPF+B3fivi6kKmyw=" - }, - "dblapi.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.3.0.tgz", - "integrity": "sha512-8uZQMBg1coJsL5SEN1oPj2dgjgfm0DW7FhP8XWnG2V/xcOJnQNM2kCId1g/pyqm8PYH9346olL1IrLJQ6m0wOg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "discord.js": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.5.1.tgz", - "integrity": "sha512-tGhV5xaZXE3Z+4uXJb3hYM6gQ1NmnSxp9PClcsSAYFVRzH6AJH74040mO3afPDMWEAlj8XsoPXXTJHTxesqcGw==", - "requires": { - "long": "^4.0.0", - "prism-media": "^0.0.3", - "snekfetch": "^3.6.4", - "tweetnacl": "^1.0.0", - "ws": "^6.0.0" - }, - "dependencies": { - "prism-media": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.3.tgz", - "integrity": "sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ==" - } - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } - } - }, - "domelementtype": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz", - "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", - "requires": { - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ebnf-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", - "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "enmap": { - "version": "4.8.7", - "resolved": "https://registry.npmjs.org/enmap/-/enmap-4.8.7.tgz", - "integrity": "sha512-uDdns7BXSohCQSFO+5RGgJQlgIgKWUHoLY0IPdXmiz90OdlfW+e2SOFAsuaXDCJxdXeKGcJJ9JUvv3wIwF80/Q==", - "requires": { - "lodash": "^4.17.11" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "es-abstract": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.1.tgz", - "integrity": "sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.0.0", - "string.prototype.trimright": "^2.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.21.tgz", - "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=", - "requires": { - "esprima": "~1.0.2", - "estraverse": "~0.0.4", - "source-map": ">= 0.1.2" - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" - }, - "estraverse": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", - "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "ffmpeg": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/ffmpeg/-/ffmpeg-0.0.4.tgz", - "integrity": "sha1-HEYN+OfaUSf2LO70v6BsWciWMMs=", - "requires": { - "when": ">= 0.0.1" - } - }, - "ffmpeg-static": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-2.5.0.tgz", - "integrity": "sha512-4HI5aUFq9As3vNOm/0p4Pj47D8AxUqg0qnzaOuXwFMQ6uYhaLXGneUX/8b3C6gbU4ljASI+Ne7WKHpYFnLtK3A==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "garfield": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/garfield/-/garfield-1.1.2.tgz", - "integrity": "sha1-C3PcRfUYmgU/9LU9eydOKf5Hy/Y=", - "requires": { - "moment": "^2.17.1" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "get-youtube-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-youtube-id/-/get-youtube-id-1.0.1.tgz", - "integrity": "sha512-5yidLzoLXbtw82a/Wb7LrajkGn29BM6JuLWeHyNfzOGp1weGyW4+7eMz6cP23+etqj27VlOFtq8fFFDMLq/FXQ==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "hawk": { - "version": "3.1.3", - "resolved": "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jison": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.4.tgz", - "integrity": "sha1-hrA7Ze/sAHqR9JPs6r5W+QqmtDk=", - "requires": { - "JSONSelect": "0.4.0", - "ebnf-parser": "0.1.x", - "escodegen": "0.0.21", - "esprima": "1.0.x", - "jison-lex": "0.2.x", - "lex-parser": "0.1.x", - "nomnom": "1.5.2" - } - }, - "jison-lex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.2.1.tgz", - "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=", - "requires": { - "lex-parser": "0.1.x", - "nomnom": "1.5.2" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keypress": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", - "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=" - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "^4.0.0" - } - }, - "lex": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lex/-/lex-1.7.4.tgz", - "integrity": "sha1-M91muYCjjXemxCTXFz5vQNYCwMU=" - }, - "lex-parser": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", - "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "~0.10.2" - } - }, - "m3u8stream": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.4.tgz", - "integrity": "sha512-9WLF1VAtbVij03HWJKbVZ8L0orsoZiP53UljR5EwaDrozQFMsTGRDPe3PbzWV73He8a+j5H/hWZNoI2VkUSsiw==", - "requires": { - "miniget": "^1.6.1", - "sax": "^1.2.4" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "miniget": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.6.1.tgz", - "integrity": "sha512-I5oBwZmcaOuJrjQn7lpS29HM+aAZDbzKbX5ouxVyhFYdg6fA6YKOTwOCgzZQwlHuMek3FlCxz6eNrd4pOXbwOA==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "moment-duration-format": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.2.2.tgz", - "integrity": "sha1-uVdhLeJgFsmtnrYIfAVFc+USd3k=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" - }, - "node-opus": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/node-opus/-/node-opus-0.3.2.tgz", - "integrity": "sha512-o7hKgNncfbgF1j25lCK7cPqs9DEMroP3LWW0BMb/Ismc33cXo7LcaLqS0+/VV+NOotIy43fb7juLg6akflzBEw==", - "requires": { - "bindings": "~1.2.1", - "commander": "^2.9.0", - "nan": "^2.14.0", - "ogg-packet": "^1.0.0" - }, - "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - } - } - }, - "nodemon": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz", - "integrity": "sha512-GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxsWmIEOjoN+P4IU6Hcaw==", - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "nomnom": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", - "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=", - "requires": { - "colors": "0.5.x", - "underscore": "1.1.x" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm": { - "version": "6.13.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.4.tgz", - "integrity": "sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA==", - "requires": { - "JSONStream": "^1.3.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "aproba": "^2.0.0", - "archy": "~1.0.0", - "bin-links": "^1.1.6", - "bluebird": "^3.5.5", - "byte-size": "^5.0.1", - "cacache": "^12.0.3", - "call-limit": "^1.1.1", - "chownr": "^1.1.3", - "ci-info": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.5.1", - "cmd-shim": "^3.0.3", - "columnify": "~1.5.4", - "config-chain": "^1.1.12", - "debuglog": "*", - "detect-indent": "~5.0.0", - "detect-newline": "^2.1.0", - "dezalgo": "~1.0.3", - "editor": "~1.0.0", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "fs-vacuum": "~1.2.10", - "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.3.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.5", - "iferr": "^1.0.2", - "imurmurhash": "*", - "infer-owner": "^1.0.4", - "inflight": "~1.0.6", - "inherits": "^2.0.4", - "ini": "^1.3.5", - "init-package-json": "^1.10.3", - "is-cidr": "^3.0.0", - "json-parse-better-errors": "^1.0.2", - "lazy-property": "~1.0.0", - "libcipm": "^4.0.7", - "libnpm": "^3.0.1", - "libnpmaccess": "^3.0.2", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "libnpx": "^10.2.0", - "lock-verify": "^2.1.0", - "lockfile": "^1.0.4", - "lodash._baseindexof": "*", - "lodash._baseuniq": "~4.6.0", - "lodash._bindcallback": "*", - "lodash._cacheindexof": "*", - "lodash._createcache": "*", - "lodash._getnative": "*", - "lodash.clonedeep": "~4.5.0", - "lodash.restparam": "*", - "lodash.union": "~4.6.0", - "lodash.uniq": "~4.5.0", - "lodash.without": "~4.4.0", - "lru-cache": "^5.1.1", - "meant": "~1.0.1", - "mississippi": "^3.0.0", - "mkdirp": "~0.5.1", - "move-concurrently": "^1.0.1", - "node-gyp": "^5.0.5", - "nopt": "~4.0.1", - "normalize-package-data": "^2.5.0", - "npm-audit-report": "^1.3.2", - "npm-cache-filename": "~1.0.2", - "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", - "npm-package-arg": "^6.1.1", - "npm-packlist": "^1.4.7", - "npm-pick-manifest": "^3.0.2", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.2", - "npm-user-validate": "~1.0.0", - "npmlog": "~4.1.2", - "once": "~1.4.0", - "opener": "^1.5.1", - "osenv": "^0.1.5", - "pacote": "^9.5.11", - "path-is-inside": "~1.0.2", - "promise-inflight": "~1.0.1", - "qrcode-terminal": "^0.12.0", - "query-string": "^6.8.2", - "qw": "~1.0.1", - "read": "~1.0.7", - "read-cmd-shim": "^1.0.5", - "read-installed": "~4.0.3", - "read-package-json": "^2.1.1", - "read-package-tree": "^5.3.1", - "readable-stream": "^3.4.0", - "readdir-scoped-modules": "^1.1.0", - "request": "^2.88.0", - "retry": "^0.12.0", - "rimraf": "^2.6.3", - "safe-buffer": "^5.1.2", - "semver": "^5.7.1", - "sha": "^3.0.0", - "slide": "~1.1.6", - "sorted-object": "~2.0.1", - "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", - "stringify-package": "^1.0.1", - "tar": "^4.4.13", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "uid-number": "0.0.6", - "umask": "~1.1.0", - "unique-filename": "^1.1.1", - "unpipe": "~1.0.0", - "update-notifier": "^2.5.0", - "uuid": "^3.3.3", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^1.3.1", - "worker-farm": "^1.7.0", - "write-file-atomic": "^2.4.3" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.5", - "bundled": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "agent-base": { - "version": "4.3.0", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "bundled": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "5.5.2", - "bundled": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "bundled": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "asn1": { - "version": "0.2.4", - "bundled": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "bundled": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true - }, - "aws-sign2": { - "version": "0.7.0", - "bundled": true - }, - "aws4": { - "version": "1.8.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "1.1.6", - "bundled": true, - "requires": { - "bluebird": "^3.5.3", - "cmd-shim": "^3.0.0", - "gentle-fs": "^2.3.0", - "graceful-fs": "^4.1.15", - "npm-normalize-package-bin": "^1.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "bluebird": { - "version": "3.5.5", - "bundled": true - }, - "boxen": { - "version": "1.3.0", - "bundled": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.0.0", - "bundled": true - }, - "builtins": { - "version": "1.0.3", - "bundled": true - }, - "byline": { - "version": "5.0.0", - "bundled": true - }, - "byte-size": { - "version": "5.0.1", - "bundled": true - }, - "cacache": { - "version": "12.0.3", - "bundled": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "call-limit": { - "version": "1.1.1", - "bundled": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true - }, - "chalk": { - "version": "2.4.1", - "bundled": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.3", - "bundled": true - }, - "ci-info": { - "version": "2.0.0", - "bundled": true - }, - "cidr-regex": { - "version": "2.0.10", - "bundled": true, - "requires": { - "ip-regex": "^2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "bundled": true - }, - "cli-columns": { - "version": "3.1.2", - "bundled": true, - "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "cli-table3": { - "version": "0.5.1", - "bundled": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "3.0.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" - } - }, - "co": { - "version": "4.6.0", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "color-convert": { - "version": "1.9.1", - "bundled": true, - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true - }, - "colors": { - "version": "1.3.3", - "bundled": true, - "optional": true - }, - "columnify": { - "version": "1.5.4", - "bundled": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.6", - "bundled": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "concat-stream": { - "version": "1.6.2", - "bundled": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "bundled": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "bundled": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "copy-concurrently": { - "version": "1.0.5", - "bundled": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "create-error-class": { - "version": "3.0.2", - "bundled": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "bundled": true - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "bundled": true - }, - "cyclist": { - "version": "0.2.2", - "bundled": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "bundled": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-indent": { - "version": "5.0.0", - "bundled": true - }, - "detect-newline": { - "version": "2.1.0", - "bundled": true - }, - "dezalgo": { - "version": "1.0.3", - "bundled": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "bundled": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "bundled": true - }, - "duplexer3": { - "version": "0.1.4", - "bundled": true - }, - "duplexify": { - "version": "3.6.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editor": { - "version": "1.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "1.0.0", - "bundled": true - }, - "err-code": { - "version": "1.1.2", - "bundled": true - }, - "errno": { - "version": "0.1.7", - "bundled": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "bundled": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "bundled": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "bundled": true - }, - "es6-promisify": { - "version": "5.0.0", - "bundled": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "extend": { - "version": "3.0.2", - "bundled": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "bundled": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "bundled": true - }, - "figgy-pudding": { - "version": "3.5.1", - "bundled": true - }, - "find-npm-prefix": { - "version": "1.0.2", - "bundled": true - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true - }, - "form-data": { - "version": "2.3.2", - "bundled": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "from2": { - "version": "2.3.0", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "requires": { - "minipass": "^2.6.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "fs-vacuum": { - "version": "1.2.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "bundled": true - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "genfun": { - "version": "5.0.0", - "bundled": true - }, - "gentle-fs": { - "version": "2.3.0", - "bundled": true, - "requires": { - "aproba": "^1.1.2", - "chownr": "^1.1.2", - "cmd-shim": "^3.0.3", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "infer-owner": "^1.0.4", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "get-caller-file": { - "version": "1.0.2", - "bundled": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "bundled": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "bundled": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "bundled": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "bundled": true - }, - "har-schema": { - "version": "2.0.0", - "bundled": true - }, - "har-validator": { - "version": "5.1.0", - "bundled": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true - }, - "has-symbols": { - "version": "1.0.0", - "bundled": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "2.8.5", - "bundled": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "bundled": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "bundled": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "http-signature": { - "version": "1.2.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "bundled": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "1.0.2", - "bundled": true - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "bundled": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "init-package-json": { - "version": "1.10.3", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true - }, - "ip": { - "version": "1.1.5", - "bundled": true - }, - "ip-regex": { - "version": "2.1.0", - "bundled": true - }, - "is-callable": { - "version": "1.1.4", - "bundled": true - }, - "is-ci": { - "version": "1.1.0", - "bundled": true, - "requires": { - "ci-info": "^1.0.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "bundled": true - } - } - }, - "is-cidr": { - "version": "3.0.0", - "bundled": true, - "requires": { - "cidr-regex": "^2.0.10" - } - }, - "is-date-object": { - "version": "1.0.1", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "bundled": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "bundled": true - }, - "is-obj": { - "version": "1.0.1", - "bundled": true - }, - "is-path-inside": { - "version": "1.0.1", - "bundled": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "bundled": true - }, - "is-regex": { - "version": "1.0.4", - "bundled": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "bundled": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "is-symbol": { - "version": "1.0.2", - "bundled": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "bundled": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "latest-version": { - "version": "3.1.0", - "bundled": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-property": { - "version": "1.0.0", - "bundled": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "libcipm": { - "version": "4.0.7", - "bundled": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "graceful-fs": "^4.1.11", - "ini": "^1.3.5", - "lock-verify": "^2.0.2", - "mkdirp": "^0.5.1", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "pacote": "^9.1.0", - "read-package-json": "^2.0.13", - "rimraf": "^2.6.2", - "worker-farm": "^1.6.0" - } - }, - "libnpm": { - "version": "3.0.1", - "bundled": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.3", - "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.2", - "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmpublish": "^1.1.2", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "lock-verify": "^2.0.2", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.0", - "npmlog": "^4.1.2", - "pacote": "^9.5.3", - "read-package-json": "^2.0.13", - "stringify-package": "^1.0.0" - } - }, - "libnpmaccess": { - "version": "3.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmconfig": { - "version": "1.2.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "bundled": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "bundled": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true - } - } - }, - "libnpmhook": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmorg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmpublish": { - "version": "1.1.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - } - }, - "libnpmsearch": { - "version": "2.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmteam": { - "version": "1.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpx": { - "version": "10.2.0", - "bundled": true, - "requires": { - "dotenv": "^5.0.1", - "npm-package-arg": "^6.0.0", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.0", - "update-notifier": "^2.3.0", - "which": "^1.3.0", - "y18n": "^4.0.0", - "yargs": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lock-verify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "npm-package-arg": "^6.1.0", - "semver": "^5.4.1" - } - }, - "lockfile": { - "version": "1.0.4", - "bundled": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash._baseindexof": { - "version": "3.1.0", - "bundled": true - }, - "lodash._baseuniq": { - "version": "4.6.0", - "bundled": true, - "requires": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "lodash._bindcallback": { - "version": "3.0.1", - "bundled": true - }, - "lodash._cacheindexof": { - "version": "3.0.2", - "bundled": true - }, - "lodash._createcache": { - "version": "3.1.2", - "bundled": true, - "requires": { - "lodash._getnative": "^3.0.0" - } - }, - "lodash._createset": { - "version": "4.0.3", - "bundled": true - }, - "lodash._getnative": { - "version": "3.9.1", - "bundled": true - }, - "lodash._root": { - "version": "3.0.1", - "bundled": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "bundled": true - }, - "lodash.restparam": { - "version": "3.6.1", - "bundled": true - }, - "lodash.union": { - "version": "4.6.0", - "bundled": true - }, - "lodash.uniq": { - "version": "4.5.0", - "bundled": true - }, - "lodash.without": { - "version": "4.4.0", - "bundled": true - }, - "lowercase-keys": { - "version": "1.0.1", - "bundled": true - }, - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "requires": { - "pify": "^3.0.0" - } - }, - "make-fetch-happen": { - "version": "5.0.2", - "bundled": true, - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "meant": { - "version": "1.0.1", - "bundled": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mime-db": { - "version": "1.35.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.19", - "bundled": true, - "requires": { - "mime-db": "~1.35.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mississippi": { - "version": "3.0.0", - "bundled": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "bundled": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true - }, - "mute-stream": { - "version": "0.0.7", - "bundled": true - }, - "node-fetch-npm": { - "version": "2.0.2", - "bundled": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.0.5", - "bundled": true, - "requires": { - "env-paths": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^4.4.12", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "bundled": true, - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "bundled": true - } - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "bundled": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "npm-audit-report": { - "version": "1.3.2", - "bundled": true, - "requires": { - "cli-table3": "^0.5.0", - "console-control-strings": "^1.1.0" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-cache-filename": { - "version": "1.0.2", - "bundled": true - }, - "npm-install-checks": { - "version": "3.0.2", - "bundled": true, - "requires": { - "semver": "^2.3.0 || 3.x || 4 || 5" - } - }, - "npm-lifecycle": { - "version": "3.1.4", - "bundled": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-logical-tree": { - "version": "1.2.1", - "bundled": true - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "6.1.1", - "bundled": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.4.7", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-profile": { - "version": "4.0.2", - "bundled": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "4.0.2", - "bundled": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "bundled": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.0", - "bundled": true - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.9.0", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "object-keys": { - "version": "1.0.12", - "bundled": true - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "bundled": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, - "package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pacote": { - "version": "9.5.11", - "bundled": true, - "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "parallel-transform": { - "version": "1.1.0", - "bundled": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-is-inside": { - "version": "1.0.2", - "bundled": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true - }, - "performance-now": { - "version": "2.1.0", - "bundled": true - }, - "pify": { - "version": "3.0.0", - "bundled": true - }, - "prepend-http": { - "version": "1.0.4", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "1.1.1", - "bundled": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "bundled": true - } - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "bundled": true - }, - "protoduck": { - "version": "5.0.1", - "bundled": true, - "requires": { - "genfun": "^5.0.0" - } - }, - "prr": { - "version": "1.0.1", - "bundled": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true - }, - "psl": { - "version": "1.1.29", - "bundled": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "bundled": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "query-string": { - "version": "6.8.2", - "bundled": true, - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "qw": { - "version": "1.0.1", - "bundled": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true - } - } - }, - "read": { - "version": "1.0.7", - "bundled": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-installed": { - "version": "4.0.3", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "slide": "~1.1.3", - "util-extend": "^1.0.1" - } - }, - "read-package-json": { - "version": "2.1.1", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "bundled": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "readable-stream": { - "version": "3.4.0", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "bundled": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "bundled": true, - "requires": { - "rc": "^1.0.1" - } - }, - "request": { - "version": "2.88.0", - "bundled": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-queue": { - "version": "1.0.3", - "bundled": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "semver": { - "version": "5.7.1", - "bundled": true - }, - "semver-diff": { - "version": "2.1.0", - "bundled": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "sha": { - "version": "3.0.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "slide": { - "version": "1.1.6", - "bundled": true - }, - "smart-buffer": { - "version": "4.1.0", - "bundled": true - }, - "socks": { - "version": "2.3.3", - "bundled": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "bundled": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sorted-object": { - "version": "2.0.1", - "bundled": true - }, - "sorted-union-stream": { - "version": "2.1.3", - "bundled": true, - "requires": { - "from2": "^1.3.0", - "stream-iterate": "^1.1.0" - }, - "dependencies": { - "from2": { - "version": "1.3.0", - "bundled": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.10" - } - }, - "isarray": { - "version": "0.0.1", - "bundled": true - }, - "readable-stream": { - "version": "1.1.14", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "bundled": true - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "bundled": true - }, - "split-on-first": { - "version": "1.1.0", - "bundled": true - }, - "sshpk": { - "version": "1.14.2", - "bundled": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stream-each": { - "version": "1.2.2", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-iterate": { - "version": "1.2.0", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "bundled": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "bundled": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.2.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-package": { - "version": "1.0.1", - "bundled": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "bundled": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "through": { - "version": "2.3.8", - "bundled": true - }, - "through2": { - "version": "2.0.3", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "tough-cookie": { - "version": "2.4.3", - "bundled": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "bundled": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true - }, - "umask": { - "version": "1.1.0", - "bundled": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "bundled": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "bundled": true - }, - "unzip-response": { - "version": "2.0.1", - "bundled": true - }, - "update-notifier": { - "version": "2.5.0", - "bundled": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "bundled": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "util-extend": { - "version": "1.0.3", - "bundled": true - }, - "util-promisify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "bundled": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "bundled": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "requires": { - "string-width": "^1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "2.0.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "bundled": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "2.4.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "bundled": true - }, - "xtend": { - "version": "4.0.1", - "bundled": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true - }, - "yargs": { - "version": "11.0.0", - "bundled": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "bundled": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "ogg-packet": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ogg-packet/-/ogg-packet-1.0.1.tgz", - "integrity": "sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A==", - "optional": true, - "requires": { - "ref-struct": "*" - } - }, - "openweather-apis": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/openweather-apis/-/openweather-apis-4.0.0.tgz", - "integrity": "sha512-QPKZvckZz66GnMj6KlD73UnYGZU7qbgGFk8Ykstn/vC5fGlQ/FgbWLJ96S8ou61h3ARRij5r0HuVC6hZDS7F/w==" - }, - "opusscript": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.7.tgz", - "integrity": "sha512-DcBadTdYTUuH9zQtepsLjQn4Ll6rs3dmeFvN+SD0ThPnxRBRm/WC1zXWPg+wgAJimB784gdZvUMA57gDP7FdVg==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "prism-media": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.0.tgz", - "integrity": "sha512-zjcO/BLVlfxWqFpEUlDyL1R9XXMquasNP4xpeYDPPZi/Zcz0i6OXoqcvxOLgbRVPsJXVd29vlYmRx2bts+hzEw==" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" - }, - "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "randomcolor": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.5.4.tgz", - "integrity": "sha512-nYd4nmTuuwMFzHL6W+UWR5fNERGZeVauho8mrJDUSXdNDbao4rbrUwhuLgKC/j8VCS5+34Ria8CsTDuBjrIrQA==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "requires": { - "picomatch": "^2.0.7" - } - }, - "redstar": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/redstar/-/redstar-0.0.2.tgz", - "integrity": "sha1-nVammAY4yYUaEAsMs799PrkCBcs=", - "requires": { - "minimatch": "~3.0.4" - } - }, - "ref": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ref/-/ref-1.3.5.tgz", - "integrity": "sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA==", - "optional": true, - "requires": { - "bindings": "1", - "debug": "2", - "nan": "2" - } - }, - "ref-struct": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ref-struct/-/ref-struct-1.1.0.tgz", - "integrity": "sha1-XV7mWtQc78Olxf60BYcmHkee3BM=", - "optional": true, - "requires": { - "debug": "2", - "ref": "1" - } - }, - "regex": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-0.1.1.tgz", - "integrity": "sha1-BYCZXRhGxTdqdiudNYuDBo0geu8=", - "requires": { - "augment": "3.2.1", - "jison": "0.4.4", - "lex": "1.7.4", - "statemachines": "0.1.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "^1.0.1" - } - }, - "relevant-urban": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/relevant-urban/-/relevant-urban-2.0.0.tgz", - "integrity": "sha1-abvU9DpnSQjbkI4n8jCWyw8kuLk=", - "requires": { - "snekfetch": "^3.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz", - "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==", - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "^5.0.3" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "snekfetch": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", - "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" - }, - "sntp": { - "version": "1.0.9", - "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.x.x" - } - }, - "sorted-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/sorted-array/-/sorted-array-1.1.0.tgz", - "integrity": "sha1-YamDJeQSu5CZm0usGN/tXzVkEC0=" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "optional": true - }, - "splat2api": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/splat2api/-/splat2api-1.4.0.tgz", - "integrity": "sha512-64SzsOK430s2KD5E+uqlwqhoveuGcmkxq3a8nIdRoK9UVK5CRjZOcY3YOo6oJ9QAlF0vmmKZNdH04tfNybtjCw==", - "requires": { - "node-fetch": "^2.3.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } - } - }, - "statemachines": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/statemachines/-/statemachines-0.1.0.tgz", - "integrity": "sha1-tUX9PYpVKA8wK4aW8ZwKEcTjOt4=", - "requires": { - "augment": "3.2.1", - "sorted-array": "1.1.0" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.trimleft": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz", - "integrity": "sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.0.2" - } - }, - "string.prototype.trimright": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz", - "integrity": "sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "^0.7.0" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "ttys": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/ttys/-/ttys-0.0.3.tgz", - "integrity": "sha1-FbrN54MQIN5fLyjwGxcy7wNlH00=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", - "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==" - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "requires": { - "debug": "^2.2.0" - } - }, - "underscore": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", - "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=" - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "urban": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/urban/-/urban-0.3.2.tgz", - "integrity": "sha512-B0/cCQNb1XCwHA0YGw1u9IavHMbHe8ruxkUNUlYHobMCAWdk0/gFfOCQQ11CQDmlFu4SUZRoVxrUF3kbE0gdog==", - "requires": { - "commander": ">=0.3.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "weather-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/weather-js/-/weather-js-2.0.0.tgz", - "integrity": "sha1-DZvNsFpPhNBrm585kAKKYB6kofw=", - "requires": { - "request": "2.x.x", - "xml2js": "0.4.x" - } - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "requires": { - "string-width": "^2.1.1" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", - "requires": { - "sax": ">=0.6.0", - "util.promisify": "~1.0.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "youtube-info": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/youtube-info/-/youtube-info-1.3.2.tgz", - "integrity": "sha512-LnBZxCuCof0bwFNtLSxklLYgaU1XR8OK+cGieWyPS10rn3P0TMHdIikRpO/W/duE9SR9JfzOk8ThgwDgx0B3Vw==", - "requires": { - "cheerio": "^0.19.0", - "debug": "^2.2.0", - "lodash.isfunction": "^3.0.6", - "request": "2.81.0", - "request-promise": "^4.2.2" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "^1.4.1" - } - } - } - }, - "yt-search": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-0.4.1.tgz", - "integrity": "sha512-YnmLUl2RlNv083efzaQlFitIAeQd3vHDOfSV3ipQUjBcuVefU/NLeCHo2uX2QDU8ef1LzKL0tiJHQyV4+al2uA==", - "requires": { - "async.parallel": "~0.5.2", - "cheerio": "~0.22.0", - "dasu": "0.0.23", - "minimist": "~1.2.0", - "node-fzf": "~0.1.2" - }, - "dependencies": { - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "node-fzf": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/node-fzf/-/node-fzf-0.1.2.tgz", - "integrity": "sha512-BGQk7yZypMIXTdIz/+9sYTe41g/j+TygSwSkcXkqennqRDxWdOlmVZ9Nlzz2UBCr2n0Arzn79qOGG0ouRyfzcQ==", - "requires": { - "cli-color": "~1.2.0", - "keypress": "~0.2.1", - "minimist": "~1.2.0", - "redstar": "0.0.2", - "string-width": "~2.1.1", - "ttys": "0.0.3" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "ytdl-core": { - "version": "0.29.5", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.29.5.tgz", - "integrity": "sha512-6WOoLQCeovo/aFYeMKeEXjvS/L+0j/vq85AYF86KSmkSA3lMzUzMdtmlo0GjsrOUN79S03MDkSgXEWOZBWL1Rg==", - "requires": { - "html-entities": "^1.1.3", - "m3u8stream": "^0.6.2", - "miniget": "^1.5.3", - "sax": "^1.1.3" - }, - "dependencies": { - "m3u8stream": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.2.tgz", - "integrity": "sha512-WsuM2bd5pPN80xvfrB+1DZqr4M7+kJl8byi6+ZCy6cmVjEiHhmr/desN53Ngsa6Hs13kYumeVgT4wL0oIJ+v6g==", - "requires": { - "miniget": "^1.4.0", - "sax": "^1.2.4" - } - }, - "miniget": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.5.3.tgz", - "integrity": "sha512-6xiJs3ZGBdrNMlPNlEWirHhY53hSW33nG1Ytub9Cg5+jLhFPn9PGe4FmPZK9WlmDE1N7/8DEL7PGr7r9kbxwgw==" - } - } - }, - "ytdl-core-discord": { - "version": "github:amishshah/ytdl-core-discord#daee86b063e37a7c54c7cb55aac3c69eac6a1b7b", - "from": "github:amishshah/ytdl-core-discord", - "requires": { - "@types/node": "^11.11.3", - "prism-media": "^1.0.1", - "ytdl-core": "^1.0.3" - }, - "dependencies": { - "ytdl-core": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-1.0.7.tgz", - "integrity": "sha512-gECPN5g5JnSy8hIq11xHIGe1T/Xzy0mWxQin3zhlJ3nG/YjPcEVEejrdd2XmA4Vv2Zw3+b1ZyDjmt37XfZri6A==", - "requires": { - "html-entities": "^1.1.3", - "m3u8stream": "^0.6.3", - "miniget": "^1.6.0", - "sax": "^1.1.3" - } - } - } - } - } -} diff --git a/package.json b/package.json index d72ed74..7210610 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,42 @@ { "name": "woomy", - "version": "0.5.0", - "description": "Discord bot made with <3 by mudkipscience#0001", - "main": "woomy.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "node woomy.js" + "version": "1.1.0", + "description": "Woomy is a all-purpose discord bot built off the guidebot base and coded in node.js using discord.js.", + "main": "index.js", + "dependencies": { + "better-sqlite3": "^5.4.1", + "chalk": "^3.0.0", + "dblapi.js": "^2.3.1", + "discord.js": "^12.0.1", + "enmap": "^5.2.4", + "garfield": "^1.1.2", + "get-youtube-id": "^1.0.1", + "hastebin-gen": "^2.0.5", + "moment": "^2.24.0", + "moment-duration-format": "^2.3.2", + "prism-media": "^1.2.1", + "randomcolor": "^0.5.4", + "request": "^2.88.2", + "relevant-urban": "^2.0.0", + "urban": "^0.3.2", + "url-unshort": "^5.0.0", + "url-unshorten": "^1.0.6", + "weather-js": "^2.0.0", + "youtube-info": "^1.3.2", + "ytdl-core-discord": "^1.1.0" }, - "engines": { - "node": ">=8" + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/mudkipscience/woomy.git" }, "author": "mudkipscience", - "dependencies": { - "better-sqlite-pool": "^0.2.2", - "chalk": "^2.4.2", - "cpu-stats": "^1.0.0", - "dblapi.js": "^2.3.0", - "discord.js": "^11.5.1", - "enmap": "^4.8.1", - "ffmpeg": "0.0.4", - "ffmpeg-static": "^2.5.0", - "garfield": "^1.1.2", - "get-youtube-id": "^1.0.1", - "moment": "^2.24.0", - "moment-duration-format": "^2.2.2", - "node-opus": "^0.3.2", - "nodemon": "^2.0.2", - "npm": "^6.13.4", - "openweather-apis": "^4.0.0", - "opusscript": "0.0.7", - "prism-media": "^1.2.0", - "randomcolor": "^0.5.4", - "regex": "^0.1.1", - "relevant-urban": "^2.0.0", - "request": "^2.88.0", - "splat2api": "^1.4.0", - "urban": "^0.3.2", - "weather-js": "^2.0.0", - "youtube-info": "^1.3.2", - "yt-search": "^0.4.1", - "ytdl-core": "^0.29.1", - "ytdl-core-discord": "github:amishshah/ytdl-core-discord" - } + "license": "MIT", + "bugs": { + "url": "https://github.com/mudkipscience/woomy/issues" + }, + "homepage": "https://github.com/mudkipscience/woomy#readme" } diff --git a/media/sounds/WOOMY.mp3 b/resources/audio/WOOMY.mp3 similarity index 100% rename from media/sounds/WOOMY.mp3 rename to resources/audio/WOOMY.mp3 diff --git a/fax.png b/resources/images/fax.png similarity index 100% rename from fax.png rename to resources/images/fax.png diff --git a/resources/other/genders.json b/resources/other/genders.json new file mode 100644 index 0000000..3b50663 --- /dev/null +++ b/resources/other/genders.json @@ -0,0 +1,4 @@ +{ + "cisgender": "Someone who identifies with their assigned gender at birth.", + "transgender": "Someone who identifies with a gender that is not their assigned gender at birth." +} \ No newline at end of file diff --git a/resources/other/lyrics.json b/resources/other/lyrics.json new file mode 100644 index 0000000..cd753d2 --- /dev/null +++ b/resources/other/lyrics.json @@ -0,0 +1,122 @@ +{ + "bohemian_rhapsody": [ + "Is this the real life?", + "Is this just fantasy?", + "Caught in a landslide, no escape from reality", + "Open your eyes, look up to the skies and see", + "I'm just a poor boy, I need no sympathy", + "Because I'm easy come, easy go, little high, little low", + "Any way the wind blows doesn't really matter to me, to me", + "Mama, just killed a man", + "Put a gun against his head, pulled my trigger, now he's dead", + "Mama, life had just begun", + "But now I've gone and thrown it all away", + "Mama, ooh, didn't mean to make you cry", + "If I'm not back again this time tomorrow", + "Carry on, carry on as if nothing really matters", + "Too late, my time has come", + "sends shivers down my spine, body's aching all the time", + "Goodbye, everybody, I've got to go", + "Gotta leave you all behind and face the truth", + "Mama, ooh, (Anyway the wind blows)", + "I don't wanna die", + "I sometimes wish I'd never been born at all", + "i see a little silhouetto of a man", + "Scaramouche! Scaramouche! will you do the Fandango?", + "Thunderbolt and lightning, very, very fright'ning me", + "(Galileo) Galileo, (Galileo) Galileo, Galileo Figaro magnifico", + "I'm just a poor boy, nobody loves me", + "He's just a poor boy from a poor family", + "spare him his life from this monstrosity", + "Easy come, easy go, will you not let me go?", + "Bismillah! No, we will not let you go", + "(Let him go!) Bismillah! We will not let you go", + "(Let him go!) Bismillah! We will not let you go", + "(Let me go) Will not let you go", + "(Let me go) Will not let you go", + "(Let me go) Ah", + "no, no, no, no, no, no, no", + "(Oh mamma mia, mamma mia) Mamma mia, let me go", + "Beelzebub has the devil put aside for me, for me, for me!", + "So you think you can stone me and spit in my eye?", + "so you think you can love me and leave me to die?", + "Oh baby, can't do this to me, baby!", + "Just gotta get out, just gotta get right outta here!", + "Nothing really matters, anyone can see", + "nothing really matters", + "Nothing really matters, to me", + "any way the wind blows" + ], + + "creeper": [ + "Aw man", + "So we back in the mine", + "Got our pickaxe swinging from side to side", + "Side side to side", + "This task a grueling one", + "Hope to find some diamonds tonight night night", + "Diamonds tonight", + "Heads up", + "You hear a sound turn around and look up", + "Total shock fills your body", + "Oh no it's you again", + "I can never forget those eyes eyes eyes", + "Eyes-eye-eyes", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again", + "Cause baby tonight", + "You grab your pick, shovel and bolt again", + "And run run until it's done done", + "Until the sun comes up in the morn", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again", + "Just when you think you're safe", + "Overhear some hissing from right behind", + "Right right behind", + "That's a nice life you have", + "Shame it's gotta end at this time time time", + "Time-time-time-time", + "Blows up", + "Then your health bar drops and you could use a one up", + "Get inside, don't be tardy", + "So now you're stuck in there", + "Half a heart is left, but don't die die die", + "Die-die-die", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again", + "Cause baby tonight", + "You grab your pick shovel and bolt again", + "And run run until it's done done", + "Until the sun comes up in the morn", + "Cause baby tonight?", + "The creeper's tryna steal all our stuff again", + "Dig up diamonds and craft those diamonds", + "And make some armor, get it baby", + "Go and forge that like you so MLG pro", + "The sword's made of diamonds, so come at me bro, huh", + "Training in your room under the torchlight", + "Hone that form to get you ready for the big fight", + "Every single day and the whole night", + "Creeper's out prowlin', hoo, alright", + "Look at me, look at you", + "Take my revenge, that's what I'm gonna do", + "I'm a warrior baby, what else is new", + "And my blade's gonna tear through you, bring it", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again", + "(Gather your stuff, yeah, let's take back the world)", + "Yeah baby tonight", + "Grab your sword armor and go", + "Take your revenge", + "So fight fight like it's the last last night", + "Of your life life show them your bite", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again", + "Cause baby tonight", + "You grab your pick shovel and bolt again", + "And run run until it's done done", + "Until the sun comes up in the morn", + "Cause baby tonight", + "The creeper's tryna steal all our stuff again" + ] +} \ No newline at end of file diff --git a/resources/other/pronouns.json b/resources/other/pronouns.json new file mode 100644 index 0000000..544b7b4 --- /dev/null +++ b/resources/other/pronouns.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/resources/other/sexualities.json b/resources/other/sexualities.json new file mode 100644 index 0000000..544b7b4 --- /dev/null +++ b/resources/other/sexualities.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/commands/8ball.js b/src/commands/8ball.js index ae7dc20..ef69684 100644 --- a/src/commands/8ball.js +++ b/src/commands/8ball.js @@ -19,13 +19,6 @@ exports.run = async (client, message, args) => { ]; let mess = ball.random(); - var msg = message.content.toLowerCase(); - - if (msg.includes("is donald trump a good president".toLowerCase())) { - return message.channel.send( - ":8ball: Stupid question. You should be ashamed of yourself for even asking." - ); - }; message.channel.send(":8ball: " + mess); }; diff --git a/src/commands/about.js b/src/commands/about.js index f41686a..02b2c2c 100644 --- a/src/commands/about.js +++ b/src/commands/about.js @@ -8,8 +8,8 @@ exports.run = (client, message) => { .duration(client.uptime) .format(" D [days], H [hrs], m [mins], s [secs]"); - var mud = client.users.get(client.config.owners[0]).tag; - var flgx = client.users.get(client.config.owners[1]).tag; + var mud = client.users.cache.get(client.config.owners[0]).tag; + var flgx = client.users.cache.get(client.config.owners[1]).tag; var build; var prefix; @@ -25,21 +25,18 @@ exports.run = (client, message) => { build = "production" } - embed = new Discord.RichEmbed(); + embed = new Discord.MessageEmbed(); embed.setTitle(`Woomy`); embed.setColor(client.embedColour(message)); - embed.setDescription( - `Woomy is a multipurpose bot developed by ${mud} and ${flgx}. You can suggest new features by joining my support server, - or using \`${prefix}feedback\`` + embed.setThumbnail(client.user.avatarURL({format: "png", dynamic: true})) + embed.addField( + "General:", `• users: \`${client.users.cache.size}\`\n• channels: \`${client.channels.cache.size}\`\n• servers: \`${client.guilds.cache.size}\`\n• commands: \`${client.commands.size}\`\n• uptime: \`${duration}\``,true ); embed.addField( - "General", `users: \`${client.users.size}\`\nchannels: \`${client.channels.size}\`\nservers: \`${client.guilds.size}\`\ncommands: \`${client.commands.size}\`\nuptime: \`${duration}\``,true + `Technical:`, `• RAM Usage: \`${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MB\`\n• OS: \`${require("os").type}\`\n• bot version: \`${client.version.number} (${build})\`\n• discord.js version: \`v${version}\`\n• node.js version: \`${process.version}\``,true ); embed.addField( - `Technical`, `RAM Usage: \`${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MB\`\nOS: \`${require("os").type}\`\nbot version: \`${client.update.version} (${build})\`\ndiscord.js version: \`v${version}\`\nnode.js version: \`${process.version}\``,true - ); - embed.addField( - "Links", "[Support](https://discord.gg/HCF8mdv) | [GitHub](https://github.com/mudkipscience/woomy) | [db.org](https://discordbots.org/bot/435961704145485835/vote) | [BFD](https://botsfordiscord.com/bots/435961704145485835/vote) | [top.gg](https://discordbotlist.com/bots/435961704145485835) | [discord.js](https://discord.js.org/#/) | [guidebot](https://github.com/AnIdiotsGuide/guidebot/)" + "Links:", "[Support](https://discord.gg/HCF8mdv) | [GitHub](https://github.com/mudkipscience/woomy) | [db.org](https://discordbots.org/bot/435961704145485835/vote) | [BFD](https://botsfordiscord.com/bots/435961704145485835/vote) | [top.gg](https://discordbotlist.com/bots/435961704145485835) | [discord.js](https://discord.js.org/#/) | [guidebot](https://github.com/AnIdiotsGuide/guidebot/)" ); message.channel.send(embed); diff --git a/src/commands/achievement.js b/src/commands/achievement.js index 8c93335..49b75f7 100644 --- a/src/commands/achievement.js +++ b/src/commands/achievement.js @@ -13,10 +13,16 @@ exports.run = (client, message, args) => { message.channel.startTyping(); let params = "h=Achievement+Get%21&i=1&t=" + encodeURIComponent(text); - message.channel.send({ - files: [new Discord.Attachment(url + "?" + params, "achievement.png")] - }); - message.channel.stopTyping(); + try { + message.channel.stopTyping(); + message.channel.send({ + files: [new Discord.MessageAttachment(url + "?" + params, "achievement.png")] + }); + + } catch(err) { + message.channel.stopTyping(); + message.channel.send(`<:error:466995152976871434> Error when generating image: \`${err}\``) + } }; exports.conf = { diff --git a/src/commands/adminrole.js b/src/commands/adminrole.js index 09864f0..6e3d231 100644 --- a/src/commands/adminrole.js +++ b/src/commands/adminrole.js @@ -6,7 +6,7 @@ exports.run = async (client, message, args) => { client.settings.set(message.guild.id, {}); } - var adminRole = message.guild.roles.get(settings.adminRole) + var adminRole = message.guild.roles.cache.get(settings.adminRole) if (!args[0]) { if(!adminRole) { @@ -31,17 +31,16 @@ exports.run = async (client, message, args) => { ); }; - let roleExists = message.guild.roles.find(r => r.name === args.join(" ")); - if (!roleExists) { - return message.channel.send( - "<:error:466995152976871434> The specified role does not exist." - ); - } + let role = client.findRole(joinedValue, message); - client.settings.set(message.guild.id, roleExists.id, "adminRole"); + if (!role) { + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; + + client.settings.set(message.guild.id, role.id, "adminRole"); message.channel.send( - `<:success:466995111885144095> The admin role has been set to \`${joinedValue}\` + `<:success:466995111885144095> The admin role has been set to \`${role.name}\` `); }; }; diff --git a/src/commands/autorole.js b/src/commands/autorole.js index 0024dae..2aae88d 100644 --- a/src/commands/autorole.js +++ b/src/commands/autorole.js @@ -6,11 +6,7 @@ exports.run = async (client, message, args) => { client.settings.set(message.guild.id, {}); } - if(!message.channel.permissionsFor(client.user).has("MANAGE_ROLES")) { - return message.channel.send("<:error:466995152976871434> This command requires the `manage roles` permission to work.") - } - - var autorole = message.guild.roles.get(settings.autorole) + var autorole = message.guild.roles.cache.get(settings.autorole) if (!args[0]) { if(!autorole) { @@ -21,7 +17,15 @@ exports.run = async (client, message, args) => { message.channel.send(`Users recieve this role upon joining: \`${autorole.name}\``) } + } else if(args.join(" ").toLowerCase() == "off") { + if(settings.autorole == "off") { + return message.channel.send("<:error:466995152976871434> Autoroling has not been enabled.") + } + + client.settings.set(message.guild.id, "off", "autorole"); + return message.channel.send("<:success:466995111885144095> Autoroling has been disabled.") } else { + const joinedValue = args.join(" "); if (joinedValue.length < 1) { return message.channel.send( @@ -35,17 +39,16 @@ exports.run = async (client, message, args) => { ); }; - let roleExists = message.guild.roles.find(r => r.name === args.join(" ")); - if (!roleExists) { - return message.channel.send( - "<:error:466995152976871434> The specified role does not exist." - ); - } + role = client.findRole(joinedValue, message); - client.settings.set(message.guild.id, roleExists.id, "autorole"); + if (!role) { + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; + + client.settings.set(message.guild.id, role.id, "autorole"); message.channel.send( - `<:success:466995111885144095> The autorole has been set to \`${joinedValue}\` + `<:success:466995111885144095> The autorole has been set to \`${role.name}\` `); }; }; @@ -55,7 +58,7 @@ exports.conf = { guildOnly: true, aliases: [], permLevel: "Administrator", - requiredPerms: [] + requiredPerms: ["MANAGE_ROLES"] }; exports.help = { diff --git a/src/commands/avatar.js b/src/commands/avatar.js index e988a97..1bbb9e4 100644 --- a/src/commands/avatar.js +++ b/src/commands/avatar.js @@ -19,7 +19,7 @@ exports.run = (client, message, args) => { user = users[0]; user = user.user; } - message.channel.send(`**${user.tag}'s** avatar is: ${user.avatarURL}`); + message.channel.send(`**${user.tag}'s** avatar is: ${user.avatarURL({format: "png", dynamic: true})}`); }; exports.conf = { diff --git a/src/commands/ban.js b/src/commands/ban.js index b301741..fe403c2 100644 --- a/src/commands/ban.js +++ b/src/commands/ban.js @@ -7,36 +7,34 @@ exports.run = async (client, message, args) => { ); }; - let user = message.mentions.members.first(); + let user = message.mentions.members.first(); - if (!user) { - let users; - users = client.searchForMembers(message.guild, args[0]); - if (users.length > 1) - return message.channel.send( - "<:error:466995152976871434> Found multiple users! Please be more specific or mention the user instead." - ); - else if (users.length == 0) - return message.channel.send( - "<:error:466995152976871434> That user doesn't seem to exist. Try again!" - ); - user = users[0]; - }; - if (user.user.id === client.user.id) { - return message.channel.send("lol no") + if (!user) { + let users; + users = client.searchForMembers(message.guild, args[0]); + if (users.length > 1) + return message.channel.send( + "<:error:466995152976871434> Found multiple users! Please be more specific or mention the user instead." + ); + else if (users.length == 0) + return message.channel.send( + "<:error:466995152976871434> That user doesn't seem to exist. Try again!" + ); + user = users[0]; }; + if (user.user.id === message.guild.owner.id) { return message.channel.send("<:error:466995152976871434> You can't ban the owner!") }; let moderator = message.guild.member(message.author) - if (user.highestRole.position >= moderator.highestRole.position && moderator.user.id !== message.guild.ownerID) { + if (user.roles.highest.position >= moderator.roles.highest.position && moderator.user.id !== message.guild.ownerID) { return message.channel.send( `<:error:466995152976871434> You can't ban people higher ranked than yourself!` ); }; let bot = message.guild.member(client.user) - if (user.highestRole.position >= bot.highestRole.position) { + if (user.roles.highest.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I can't ban people who are higher ranked than me!` ); @@ -49,22 +47,23 @@ exports.run = async (client, message, args) => { let reason = args.slice(1).join(" "); if (!reason) reason = `Banned by ${message.author.tag}`; - await user.ban(reason).catch(console.error); + await message.guild.members.ban(user, {reason: reason}).catch(console.error); message.channel.send(`<:success:466995111885144095> Banned \`${user.user.tag}\``); if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#BC0057"); - embed.setAuthor("User banned!", user.user.avatarURL); - embed.setDescription(`❯ User: ${user.user.tag} (${user.user.id})\n❯ Mod: ${message.author} (${message.author.id})\n - ❯ Reason: ${reason}`) + embed.setAuthor("User banned!", user.user.avatarURL({format: "png", dynamic: true})); + embed.setDescription( + `• User: ${user.user.tag} (${user.user.id})\n• Mod: ${message.author} (${message.author.id})\n• Reason: ${reason}` + ); try { - channel.send({ embed }); + channel.send(embed); } catch (err) { // probably no permissions to send messages/embeds there }; diff --git a/src/commands/blacklist.js b/src/commands/blacklist.js index 28bcafc..20c41aa 100644 --- a/src/commands/blacklist.js +++ b/src/commands/blacklist.js @@ -45,7 +45,7 @@ exports.run = async (client, message, [action, ...member]) => { }; let admin = message.guild.member(message.author) - if (user.highestRole.position >= admin.highestRole.position && admin.user.id !== message.guild.ownerID) { + if (user.roles.highest.position >= admin.roles.highest.position && admin.user.id !== message.guild.ownerID) { return message.channel.send( `<:error:466995152976871434> You can't blacklist people higher ranked than yourself!` ); diff --git a/src/commands/bohemian_rhapsody.js b/src/commands/bohemian_rhapsody.js index dffaf2b..c9bb3ef 100644 --- a/src/commands/bohemian_rhapsody.js +++ b/src/commands/bohemian_rhapsody.js @@ -1,61 +1,13 @@ const Discord = require("discord.js"); +const lyric = require('../../resources/other/lyrics.json') exports.run = async (client, message, args, level) => { - const lyrics = [ - "Is this the real life?", - "i this just fantasy?", - "Caught in a landslide, no escape from reality", - "open your eyes, look up to the skies and see", - "I'm just a poor boy, I need no sympathy", - "because I'm easy come, easy go, little high, little low", - "Any way the wind blows doesn't really matter to me, to me", - "mama, just killed a man", - "Put a gun against his head, pulled my trigger, now he's dead", - "mama, life had just begun", - "But now I've gone and thrown it all away", - "mama, ooh, didn't mean to make you cry", - "If I'm not back again this time tomorrow", - "carry on, carry on as if nothing really matters", - "Too late, my time has come", - "sends shivers down my spine, body's aching all the time", - "Goodbye, everybody, I've got to go", - "gotta leave you all behind and face the truth", - "Mama, ooh, (Anyway the wind blows)", - "i don't wanna die", - "I sometimes wish I'd never been born at all", - "i see a little silhouetto of a man", - "Scaramouche! Scaramouche! will you do the Fandango?", - "thunderbolt and lightning, very, very fright'ning me", - "(Galileo) Galileo, (Galileo) Galileo, Galileo Figaro magnifico", - "i'm just a poor boy, nobody loves me", - "He's just a poor boy from a poor family", - "spare him his life from this monstrosity", - "Easy come, easy go, will you not let me go?", - "bismillah! No, we will not let you go", - "(Let him go!) Bismillah! We will not let you go", - "(let him go!) Bismillah! We will not let you go", - "(Let me go) Will not let you go", - "(let me go) Will not let you go", - "(Let me go) Ah", - "no, no, no, no, no, no, no", - "(Oh mamma mia, mamma mia) Mamma mia, let me go", - "beelzebub has the devil put aside for me, for me, for me!", - "So you think you can stone me and spit in my eye?", - "so you think you can love me and leave me to die?", - "Oh baby, can't do this to me, baby!", - "just gotta get out, just gotta get right outta here!", - "Nothing really matters, anyone can see", - "nothing really matters", - "Nothing really matters, to me", - "any way the wind blows" - ]; - + const lyrics = lyric.bohemian_rhapsody; var runtop = true; var runbottom = false; for(var br = 0; br < lyrics.length; br++) { { if (runtop === true) { var response = await client.awaitReply(message, lyrics[br]); - response = response.toLowerCase(); runbottom = false; }; diff --git a/src/commands/changelog.js b/src/commands/changelog.js index 40d50c2..a604a98 100644 --- a/src/commands/changelog.js +++ b/src/commands/changelog.js @@ -1,5 +1,5 @@ exports.run = (client, message) => { - message.channel.send(client.update.changelog) + message.channel.send(client.version.changelog) }; exports.conf = { diff --git a/src/commands/colour.js b/src/commands/colour.js index 44bcca7..bdcbf61 100644 --- a/src/commands/colour.js +++ b/src/commands/colour.js @@ -1,29 +1,46 @@ const randomColour = require("randomcolor"); exports.run = async (client, message, args, level) => { + var colour; if(!args[0]) { - var colour = randomColour(); - } + colour = randomColour(); + } else if(isHex(args.join(" ")) != true) { + colour = stringToHex(args.join(" ")); + } else { + colour = args[0] + } - if(args[0]) { - if(args[0].startsWith('#')) { - colour = args[0]; - } else { - colour = `#${args[0]}`; - } - if(colour.length > 7) return message.channel.send( - `<:error:466995152976871434> Has to be a hex code! Usage: \`${client.commands.get(`colour`).help.usage}\`` - ); - if(colour.length < 7) return message.channel.send( - `<:error:466995152976871434> Has to be a hex code! Usage: \`${client.commands.get(`colour`).help.usage}\`` - ); - }; - - embed = new Discord.RichEmbed(); + embed = new Discord.MessageEmbed(); + embed.setTitle(colour) embed.setColor(colour); - embed.setDescription(colour) + embed.setImage("https://api.alexflipnote.xyz/colour/image/" + colour.replace("#", "")); message.channel.send(embed) }; +function isHex(string) { + var str = string; + if(str.charAt(0) == "#") { + str = str.slice(1) + }; + + return typeof str === 'string' + && str.length === 6 + && !isNaN(Number('0x' + str)) +} + +function stringToHex(string) { + var hash = 0; + for (var i = 0; i < string.length; i++) { + hash = string.charCodeAt(i) + ((hash << 5) - hash); + } + var colour = '#'; + for (var i = 0; i < 3; i++) { + var value = (hash >> (i * 8)) & 0xFF; + colour += ('00' + value.toString(16)).substr(-2); + } + return colour; +}; + + exports.conf = { enabled: true, guildOnly: false, @@ -36,5 +53,5 @@ exports.help = { name: "colour", category: "Utility", description: "Gives you a random colour", - usage: "colour " + usage: "colour **OR** colour " }; \ No newline at end of file diff --git a/src/commands/credits.js b/src/commands/credits.js index 9e8a464..b3f8516 100644 --- a/src/commands/credits.js +++ b/src/commands/credits.js @@ -1,6 +1,6 @@ exports.run = async (client, message, args) => { message.channel.send( - `**Credits:**\n❯ \`mudkipscience#3739\` and \`FLGX#9896\`for developing the bot\n❯ \`An Idiots Guide\` for the Guidebot bot base\n❯ \`dellannie#6057\` for helping with the music commands\n❯ \`TheCakeChicken#9088\` and \`Tina the Cyclops girl#0064\` for helping me not suck at coding\n❯ \`AirVentTrent\` for the icon, find him on Instagram` + `**Credits:**\n• \`mudkipscience#8904\` and \`FLGX#9896\`for developing the bot\n• \`An Idiots Guide\` for the Guidebot bot base\n• \`dellannie#6057\` for helping with the music commands\n• \`TheCakeChicken#9088\` and \`Tina the Cyclops girl#0064\` for helping me not suck at coding\n• \`AirVentTrent\` for the icon, find him on Instagram` ); }; diff --git a/src/commands/creeper.js b/src/commands/creeper.js index 914bf49..80ac90b 100644 --- a/src/commands/creeper.js +++ b/src/commands/creeper.js @@ -1,75 +1,7 @@ + +const lyric = require('../../resources/other/lyrics.json') exports.run = async (client, message, args, level) => { - const lyrics = [ -"Aw man", -"so we back in the mine", -"Got our pickaxe swinging from side to side", -"side side to side", -"This task a grueling one", -"hope to find some diamonds tonight night night", -"Diamonds tonight", -"heads up", -"You hear a sound turn around and look up", -"total shock fills your body", -"Oh no it's you again", -"i can never forget those eyes eyes eyes", -"Eyes-eye-eyes", -"cause baby tonight", -"The creeper's tryna steal all our stuff again", -"cause baby tonight", -"You grab your pick, shovel and bolt again", -"and run run until it's done done", -"Until the sun comes up in the morn", -"cause baby tonight", -"The creeper's tryna steal all our stuff again", -"just when you think you're safe", -"Overhear some hissing from right behind", -"right right behind", -"That's a nice life you have", -"shame it's gotta end at this time time time", -"Time-time-time-time", -"blows up", -"Then your health bar drops and you could use a one up", -"get inside, don't be tardy", -"So now you're stuck in there", -"half a heart is left, but don't die die die", -"Die-die-die", -"cause baby tonight", -"The creeper's tryna steal all our stuff again", -"cause baby tonight", -"You grab your pick shovel and bolt again", -"and run run until it's done done", -"Until the sun comes up in the morn", -"cause baby tonight?", -"The creeper's tryna steal all our stuff again", -"dig up diamonds and craft those diamonds", -"And make some armor, get it baby", -"go and forge that like you so MLG pro", -"The sword's made of diamonds, so come at me bro, huh", -"training in your room under the torchlight", -"Hone that form to get you ready for the big fight", -"every single day and the whole night", -"Creeper's out prowlin', hoo, alright", -"look at me, look at you", -"Take my revenge, that's what I'm gonna do", -"i'm a warrior baby, what else is new", -"And my blade's gonna tear through you, bring it", -"cause baby tonight", -"The creeper's tryna steal all our stuff again", -"(gather your stuff, yeah, let's take back the world)", -"Yeah baby tonight", -"grab your sword armor and go", -"Take your revenge", -"so fight fight like it's the last last night", -"Of your life life show them your bite", -"cause baby tonight", -"The creeper's tryna steal all our stuff again", -"cause baby tonight", -"You grab your pick shovel and bolt again", -"and run run until it's done done", -"Until the sun comes up in the morn", -"cause baby tonight", -"The creeper's tryna steal all our stuff again" - ]; + var lyrics = lyric.creeper; var runtop = true; var runbottom = false; @@ -77,7 +9,6 @@ exports.run = async (client, message, args, level) => { { if (runtop === true) { var response = await client.awaitReply(message, lyrics[br]); - response = response.toLowerCase(); runbottom = false; }; diff --git a/src/commands/echo.js b/src/commands/echo.js deleted file mode 100644 index 910b0ea..0000000 --- a/src/commands/echo.js +++ /dev/null @@ -1,27 +0,0 @@ -exports.run = (client, message, args, level) => { - if(!args[0]) { - return message.channel.send( - `<:error:466995152976871434> No message provided. - Usage: \`${client.commands.get(`echo`).help.usage}\`` - ); - }; - if (message.content.includes("@everyone")) return message.channel.send(message.author); - const sayMessage = args.join(" "); - message.delete().catch(O_o => {}); - message.channel.send(sayMessage); -}; - -exports.conf = { - enabled: true, - guildOnly: false, - aliases: ["say"], - permLevel: "User", - requiredPerms: [] -}; - -exports.help = { - name: "echo", - category: "Fun", - description: "Makes Woomy copy what the user says.", - usage: "echo [message]" -}; diff --git a/src/commands/emoji.js b/src/commands/emoji.js new file mode 100644 index 0000000..795686c --- /dev/null +++ b/src/commands/emoji.js @@ -0,0 +1,43 @@ +exports.run = async (client, message, args) => { + if(!args[0]) { + return message.channel.send(`You need to specify a custom emoji. Usage: \`${client.commands.get(`emoji`).help.usage}\``) + }; + + var ID; + var format = ".png" + var string = args[0].replace(/\D/g,''); + + if(args[0].charAt(1) == "a" && args[0].charAt(2) == ":") { + format = ".gif" + }; + + console.log(string.length) + if(string.length > 18) { + ID = string.slice(string.length - 18); + } else { + ID = string; + }; + + if(!ID) { + return message.channel.send(`<:error:466995152976871434> Invalid emoji. This command only works with custom emojis.`) + }; + + + + message.channel.send("https://cdn.discordapp.com/emojis/" + ID + format) +}; + +exports.conf = { + enabled: true, + guildOnly: false, + aliases: [], + permLevel: "User", + requiredPerms: [] +}; + +exports.help = { + name: "emoji", + category: "Utility", + description: "Enlarges and links an custom emoji", + usage: "emoji [emoji]" +}; diff --git a/src/commands/emojify.js b/src/commands/emojify.js index a690bb0..058faa3 100644 --- a/src/commands/emojify.js +++ b/src/commands/emojify.js @@ -30,7 +30,12 @@ exports.run = (client, message, args) => { return `${specialChars[letter]} ` }; return letter - }).join(''); + }).join(''); + + if(emojified.length > 2000) { + return message.channel.send("<:error:466995152976871434> The emojified message exceeds 2000 characters.") + } + message.channel.send(emojified); }; diff --git a/src/commands/eval.js b/src/commands/eval.js index 5192b34..2fef95f 100644 --- a/src/commands/eval.js +++ b/src/commands/eval.js @@ -1,11 +1,32 @@ +const hastebin = require('hastebin-gen'); exports.run = async (client, message, args) => { const code = args.join(" "); try { const evaled = eval(code); const clean = await client.clean(client, evaled); + + if(clean.length > 2000) { + hastebin(clean, { extension: "txt" }).then(haste => { + return message.channel.send('`OUTPUT`\n' + haste); + }).catch(error => { + client.logger.err(error); + }); + + return; + } message.channel.send(`\`OUTPUT\` \`\`\`js\n${await clean}\n\`\`\``); } catch (err) { - message.channel.send(`\`ERROR\` \`\`\`xl\n${await client.clean(client, err)}\n\`\`\``); + const errclean = await client.clean(client, err); + if(errclean.length > 2000) { + hastebin(errclean, { extension: "txt" }).then(haste => { + return message.channel.send('`ERROR`\n' + haste); + }).catch(error => { + client.logger.err(error); + }); + + return; + } + message.channel.send(`\`ERROR\` \`\`\`xl\n${await errclean}\n\`\`\``); } }; diff --git a/src/commands/feedback.js b/src/commands/feedback.js index d4526aa..9f4e436 100644 --- a/src/commands/feedback.js +++ b/src/commands/feedback.js @@ -1,9 +1,9 @@ exports.run = (client, message, args, level) => { if(!args[0]) return message.channel.send(`<:error:466995152976871434> You didn't give me any feedback! Usage: \`${client.commands.get(`feedback`).help.usage}\``) const feedback = args.join(" ") - let guild = client.guilds.get("410990517841690625") - let channel = guild.channels.get("438825830949453824") - let embed = new Discord.RichEmbed() + let guild = client.guilds.cache.get("410990517841690625") + let channel = guild.channels.cache.get("438825830949453824") + let embed = new Discord.MessageEmbed() .setTitle(`Feedback:`) .setColor(client.embedColour(message)) .addField("User:",message.author.tag) diff --git a/src/commands/flip.js b/src/commands/flip.js index 31b6774..99ba778 100644 --- a/src/commands/flip.js +++ b/src/commands/flip.js @@ -1,13 +1,13 @@ exports.run = (client, message, args) => { if(!args[0]) { return message.channel.send( - `<:error:466995152976871434> Invalid choice. Usage: \`${client.commands.get(`emojify`).help.usage}\`` + `<:error:466995152976871434> Invalid choice. Usage: \`${client.commands.get(`flip`).help.usage}\`` ); }; - if(args[0].toLowerCase() != "heads" || args[0].toLowerCase() != "tails") { + if(args[0].toLowerCase() != "heads" && args[0].toLowerCase() != "tails") { return message.channel.send( - `<:error:466995152976871434> Invalid choice. Usage: \`${client.commands.get(`emojify`).help.usage}\`` + `<:error:466995152976871434> Invalid choice. Usage: \`${client.commands.get(`flip`).help.usage}\`` ); }; var coin = [ diff --git a/src/commands/giverole.js b/src/commands/giverole.js index 6b2db13..356cd74 100644 --- a/src/commands/giverole.js +++ b/src/commands/giverole.js @@ -18,48 +18,49 @@ exports.run = async (client, message, [member, ...role2add], query) => { ); user = users[0]; } - let role = role2add.join(" "); + let joinedValue = role2add.join(" "); + + let gRole = client.findRole(joinedValue, message); - let gRole = message.guild.roles.find(r => r.name === role); if (!gRole) { return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); - } + }; let moderator = message.guild.member(message.author) - if (gRole.position >= moderator.highestRole.position) { + if (gRole.position >= moderator.roles.highest.position) { return message.channel.send( "<:error:466995152976871434> You cannot give roles higher than your own!" ); } - var bot = message.guild.members.get(client.user.id) - if (gRole.position >= bot.highestRole.position) { + var bot = message.guild.members.cache.get(client.user.id) + if (gRole.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I cannot give roles higher than my own!` ); } - if (user.roles.has(gRole.id)) { + if (user.roles.cache.has(gRole.id)) { return message.channel.send( "<:error:466995152976871434> They already have that role!" ); } - await user.addRole(gRole.id); + await user.roles.add(gRole.id); message.channel.send( `<:success:466995111885144095> Gave \`${user.user.tag}\` the \`${gRole.name}\` role.` ); if (client.getSettings(message.guild.id).modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === client.getSettings(message.guild.id).modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#00c09a"); - embed.setAuthor("Role given:", user.user.avatarURL); - embed.setDescription(`‏‏‎❯ User: ${user} (${user.user.id})\n‏‏‎❯ Mod: ${message.author} (${message.author.id})\n‏‏‎❯ Role: ${gRole}`) + embed.setAuthor("Role given:", user.user.avatarURL({format: "png", dynamic: true})); + embed.setDescription(`‏‏‎• User: ${user} (${user.user.id})\n‏‏‎• Mod: ${message.author} (${message.author.id})\n‏‏‎• Role: ${gRole}`) try { channel.send({ embed }); } catch (err) { diff --git a/src/commands/hackban.js b/src/commands/hackban.js index 3b1c80c..c18b880 100644 --- a/src/commands/hackban.js +++ b/src/commands/hackban.js @@ -7,7 +7,7 @@ exports.run = async (client, message, args) => { ); }; - user = client.users.get(args[0]) + user = client.users.cache.get(args[0]) if(!user) { return message.channel.send("<:error:466995152976871434> Invalid ID") } @@ -20,25 +20,27 @@ exports.run = async (client, message, args) => { let reason = args.slice(1).join(" "); if (!reason) reason = `Banned by ${message.author.tag}`; - await message.guild.ban(args[0], reason).catch(console.error); + await message.guild.members.ban(args[0], {reason: reason}).catch(console.error); message.channel.send(`<:success:466995111885144095> Hackbanned \`${user.tag}\``); if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); - embed.setColor("#7c0136"); - embed.setAuthor("User preemptively banned!", user.avatarURL); - embed.setDescription(`❯ User: ${user.tag} (${user.id})\n❯ Mod: ${message.author} (${message.author.id})\n❯ Reason: ${reason}`) + let embed = new Discord.MessageEmbed(); + embed.setColor("#BC0057"); + embed.setAuthor("User banned!", user.avatarURL({format: "png", dynamic: true})); + embed.setDescription( + `• User: ${user.tag} (${user.id})\n• Mod: ${message.author} (${message.author.id})\n• Reason: ${reason}` + ); try { - channel.send({ embed }); + channel.send(embed); } catch (err) { // probably no permissions to send messages/embeds there }; - }; + } }; }; diff --git a/src/commands/help.js b/src/commands/help.js index c6266aa..9ccb578 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -1,5 +1,5 @@ exports.run = (client, message, args, level) => { - embed = new Discord.RichEmbed(); + embed = new Discord.MessageEmbed(); embed.setColor(client.embedColour(message)); var ran = false; @@ -141,7 +141,7 @@ exports.run = (client, message, args, level) => { embed.setTitle(prefix + command.help.name); embed.setDescription( - `❯ **Description:** ${command.help.description}\n❯ **Usage:** ${prefix + command.help.usage}\n❯ **Permission Level:** ${cmd.conf.permLevel} \n❯ **Guild Only:** ${cmd.conf.guildOnly}\n❯ **Aliases:** ${aliases}\n❯ **Required perms:** ${requiredPerms}` + `• **Description:** ${command.help.description}\n• **Usage:** ${prefix + command.help.usage}\n• **Permission Level:** ${cmd.conf.permLevel} \n• **Guild Only:** ${cmd.conf.guildOnly}\n• **Aliases:** ${aliases}\n• **Required perms:** ${requiredPerms}` ); embed.setFooter("Arguments in [] are required, <> are optional."); diff --git a/src/commands/inspirobot.js b/src/commands/inspirobot.js new file mode 100644 index 0000000..6a26ee7 --- /dev/null +++ b/src/commands/inspirobot.js @@ -0,0 +1,33 @@ +const request = require('request') +exports.run = async (client, message) => { + message.channel.startTyping(); + request({ + url: "http://inspirobot.me/api?generate=true" + }, + function(error, res, body) { + if(body.length > 0) { + message.channel.send({ + files: [new Discord.MessageAttachment(body)] + }); + message.channel.stopTyping(); + } else { + message.channel.send('<:error:466995152976871434> API error, please retry.') + message.channel.stopTyping(); + }; + }); +}; + +exports.conf = { + enabled: true, + guildOnly: false, + aliases: [], + permLevel: "User", + requiredPerms: [] +}; + +exports.help = { + name: "inspirobot", + category: "Fun", + description: "Returns an inspirational message generated by inspirobot.", + usage: "inspirobot" +}; diff --git a/src/commands/kick.js b/src/commands/kick.js index 0ebc5d9..0002f44 100644 --- a/src/commands/kick.js +++ b/src/commands/kick.js @@ -27,14 +27,14 @@ if (user.user.id === message.guild.owner.id) { return message.channel.send("<:error:466995152976871434> You can't kick the owner!") } let moderator = message.guild.member(message.author) -if (user.highestRole.position >= moderator.highestRole.position && moderator.user.id !== message.guild.ownerID) { +if (user.roles.highest.position >= moderator.roles.highest.position && moderator.user.id !== message.guild.ownerID) { return message.channel.send( `<:error:466995152976871434> You can't kick people higher ranked than yourself!` ); } let bot = message.guild.member(client.user) -if (user.highestRole.position >= bot.highestRole.position) { +if (user.roles.highest.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I can't kick people who are higher ranked than me!` ); @@ -51,16 +51,16 @@ await user.kick(reason).catch(console.error); message.channel.send(`<:success:466995111885144095> Kicked \`${user.user.tag}\``); if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#fd0061"); - embed.setAuthor("User kicked!", user.user.avatarURL); + embed.setAuthor("User kicked!", user.user.avatarURL({format: "png", dynamic: true})); embed.setDescription( - `❯ User: ${user.user.tag} (${user.user.id})\n❯ Mod: ${message.author} (${message.author.id})\n❯ Reason: ${reason}` + `• User: ${user.user.tag} (${user.user.id})\n• Mod: ${message.author} (${message.author.id})\n• Reason: ${reason}` ); try { channel.send({ embed }); diff --git a/src/commands/math.js b/src/commands/math.js index 15ca6cc..05f0d78 100644 --- a/src/commands/math.js +++ b/src/commands/math.js @@ -22,17 +22,14 @@ exports.run = (client, message, args) => { } let result = (new Function( 'return ' + exercise )()); - if (exercise === "9+10" || exercise === "9 + 10") { - result = "21" - } - message.channel.send(`\`RESULTS:\`\n\`\`\`${result}\`\`\``); + message.channel.send(`\`RESULT:\`\n\`\`\`${result}\`\`\``); }; exports.conf = { enabled: true, guildOnly: false, - aliases: ["calculate"], + aliases: ["calculate", "calc"], permLevel: "User", requiredPerms: [] }; diff --git a/src/commands/modlogs.js b/src/commands/modlogs.js index b79d230..3c0c2c0 100644 --- a/src/commands/modlogs.js +++ b/src/commands/modlogs.js @@ -1,5 +1,4 @@ exports.run = async (client, message) => { - const settings = message.settings; if (!client.settings.has(message.guild.id)) client.settings.set(message.guild.id, {}); diff --git a/src/commands/modrole.js b/src/commands/modrole.js index ded4956..817d89a 100644 --- a/src/commands/modrole.js +++ b/src/commands/modrole.js @@ -6,7 +6,7 @@ exports.run = async (client, message, args) => { client.settings.set(message.guild.id, {}); } - var modRole = message.guild.roles.get(settings.modRole) + var modRole = message.guild.roles.cache.get(settings.modRole) if (!args[0]) { if(!modRole) { @@ -31,17 +31,16 @@ exports.run = async (client, message, args) => { ); }; - let roleExists = message.guild.roles.find(r => r.name === args.join(" ")); - if (!roleExists) { - return message.channel.send( - "<:error:466995152976871434> The specified role does not exist." - ); - } + let role = client.findRole(joinedValue, message); - client.settings.set(message.guild.id, roleExists.id, "modRole"); + if (!role) { + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; + + client.settings.set(message.guild.id, role.id, "modRole"); message.channel.send( - `<:success:466995111885144095> The mod role has been set to \`${joinedValue}\` + `<:success:466995111885144095> The mod role has been set to \`${role.name}\` `); }; }; diff --git a/src/commands/mute.js b/src/commands/mute.js index 889542a..a59f72d 100644 --- a/src/commands/mute.js +++ b/src/commands/mute.js @@ -24,12 +24,12 @@ exports.run = async (client, message, [args, ...reason], level) => { }; let moderator = message.guild.member(message.author) - if (message.settings.mutedRole.position >= moderator.highestRole.position && level < 2) { + if (message.settings.mutedRole.position >= moderator.roles.highest.position && level < 2) { return message.channel.send( "<:error:466995152976871434> The muted role is positioned above the moderator role! Please move the muted role below the moderator role." ); }; - if (user.highestRole.position >= moderator.highestRole.position && moderator.user.id !== message.guild.ownerID) { + if (user.roles.highest.position >= moderator.roles.highest.position && moderator.user.id !== message.guild.ownerID) { return message.channel.send( `<:error:466995152976871434> You can't mute people who have a higher role than you!` ); @@ -37,56 +37,38 @@ exports.run = async (client, message, [args, ...reason], level) => { let bot = message.guild.member(client.user) - if (user.highestRole.position >= bot.highestRole.position) { + if (user.roles.highest.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I can't mute people who have a higher role than me!` ); } - var role = message.guild.roles.get(settings.mutedRole); - var modrole = message.guild.roles.get(settings.modRole); + var role = message.guild.roles.cache.get(settings.mutedRole); - if(!role) { - if (!modrole.id) { - return message.channel.send( - "<:error:466995152976871434> There is no mod role set for this server. Please set one using `" + message.settings.prefix + "modrole ` before using this command." - ); - }; - let rolepos = (modrole.position) - rolepos = rolepos-1 - try { - role = await message.guild.createRole({ - name: "Muted", - color: "#707fa5", - permissions: [], - position: rolepos - }); - - } catch(e) { - client.logger.log(`Mute command error: \n${e}`, "error") - }; - client.settings.set(message.guild.id, role.id, "mutedRole"); - message.channel.send("Created a `Muted` role, since your server didn't have one.") + if (!role) { + return message.channel.send( + "<:error:466995152976871434> There is no muted role set for this server. Please set one using `" + message.settings.prefix + "mutedrole ` before using this command." + ); }; - if (bot.highestRole.position <= role.position) { + if (bot.roles.highest.position <= role.position) { return message.channel.send( "<:error:466995152976871434> The muted role is above my highest role! Please move the muted role below my highest role." ); }; - message.guild.channels.forEach(async (channel, id) => { - await channel.overwritePermissions(role, { + message.guild.channels.cache.forEach(async (channel, id) => { + await channel.updateOverwrite(role, { SEND_MESSAGES: false, ADD_REACTIONS: false }); }); - if (user.roles.has(role.id)) { + if (user.roles.cache.has(role.id)) { return message.channel.send("<:error:466995152976871434> They're already muted!") } - await user.addRole(role.id); + await user.roles.add(role.id); message.channel.send(`<:success:466995111885144095> Muted \`${user.user.tag}\``) var muteReason = reason.join(" "); @@ -96,20 +78,19 @@ exports.run = async (client, message, [args, ...reason], level) => { } if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#a652bb"); - embed.setAuthor("User muted!", user.user.avatarURL); + embed.setAuthor("User muted!", user.user.avatarURL({format: "png", dynamic: true})); embed.setDescription( - `❯ User: ${user} (${user.user.id})\n❯ Mod: ${message.author} (${message.author.id})\n - ❯ Reason: ${muteReason}` + `• User: ${user} (${user.user.id})\n• Mod: ${message.author} (${message.author.id})\n• Reason: ${muteReason}` ); try { - channel.send({ embed }); + channel.send(embed); } catch (err) { // probably no permissions to send messages/embeds there } @@ -120,7 +101,7 @@ exports.run = async (client, message, [args, ...reason], level) => { exports.conf = { enabled: true, guildOnly: true, - aliases: ["stfu"], + aliases: [], permLevel: "Moderator", requiredPerms: ["MANAGE_ROLES", "MANAGE_CHANNELS"] }; diff --git a/src/commands/mutedrole.js b/src/commands/mutedrole.js index c164f39..1757efd 100644 --- a/src/commands/mutedrole.js +++ b/src/commands/mutedrole.js @@ -6,7 +6,7 @@ exports.run = async (client, message, args) => { client.settings.set(message.guild.id, {}); } - var mutedRole = message.guild.roles.get(settings.mutedRole) + var mutedRole = message.guild.roles.cache.get(settings.mutedRole) if (!args[0]) { if(!mutedRole) { @@ -21,7 +21,7 @@ exports.run = async (client, message, args) => { const joinedValue = args.join(" "); if (joinedValue.length < 1) { return message.channel.send( - `<:error:466995152976871434> You didn't specify a role. Usage: \`${client.commands.get(`mutedRole`).help.usage}\`` + `<:error:466995152976871434> You didn't specify a role. Usage: \`${client.commands.get(`mutedrole`).help.usage}\`` ); }; @@ -31,17 +31,16 @@ exports.run = async (client, message, args) => { ); }; - let roleExists = message.guild.roles.find(r => r.name === args.join(" ")); - if (!roleExists) { - return message.channel.send( - "<:error:466995152976871434> The specified role does not exist." - ); - } + let role = client.findRole(joinedValue, message); - client.settings.set(message.guild.id, roleExists.id, "mutedRole"); + if (!role) { + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; + + client.settings.set(message.guild.id, role.id, "mutedRole"); message.channel.send( - `<:success:466995111885144095> The muted role has been set to \`${joinedValue}\` + `<:success:466995111885144095> The muted role has been set to \`${role.name}\` `); }; }; diff --git a/src/commands/nowplaying.js b/src/commands/nowplaying.js index 3801909..9aa0487 100644 --- a/src/commands/nowplaying.js +++ b/src/commands/nowplaying.js @@ -7,7 +7,7 @@ exports.run = async (client, message) => { } var song = guild.queue[0]; - var elapsedTime = client.createTimestamp(guild.dispatcher.time / 1000); + var elapsedTime = client.createTimestamp(guild.dispatcher.streamTime / 1000); var timestamp; if(song.duration == 0) { @@ -16,14 +16,14 @@ exports.run = async (client, message) => { timestamp = `\`[${elapsedTime + "/" + client.createTimestamp(song.duration)}]\``; }; - embed = new Discord.RichEmbed(); + embed = new Discord.MessageEmbed(); embed.setTitle("Now playing:") embed.setThumbnail(song.thumbnail) embed.setColor(client.embedColour(message)); embed.setDescription(`**[${song.title}](https://www.youtube.com/watch?v=${song.id})**`) embed.addField("Channel:", song.author, true) embed.addField("Time:", timestamp, true) - embed.setFooter("Requested by " + song.requestedBy.tag, song.requestedBy.avatarURL) + embed.setFooter("Requested by " + song.requestedBy.tag, song.requestedBy.avatarURL({format: "png", dynamic: true})) message.channel.send(embed) }; diff --git a/src/commands/owoify.js b/src/commands/owoify.js index 768fd16..ae8b9a5 100644 --- a/src/commands/owoify.js +++ b/src/commands/owoify.js @@ -12,6 +12,10 @@ exports.run = (client, message, args) => { owoified = owoified.replace(/ove/g, 'uv') owoified = owoified.replace(/!+/g, ' ' + faces[~~(Math.random() * faces.length)] + ' ') + if(owoified.length > 2000) { + return message.channel.send("<:error:466995152976871434> The owoified message exceeds 2000 characters.") + } + message.channel.send(owoified) }; diff --git a/src/commands/ping.js b/src/commands/ping.js index 7f9e240..6f6d674 100644 --- a/src/commands/ping.js +++ b/src/commands/ping.js @@ -1,8 +1,8 @@ -exports.run = async (client, message) => { // eslint-disable-line no-unused-vars - const msg = await message.channel.send("<:wait:467115775849922570> Please wait..."); +exports.run = async (client, message) => { + const msg = await message.channel.send("⏱️ Please wait..."); msg.edit( - `:ping_pong: Pong! Latency is ${msg.createdTimestamp - message.createdTimestamp}ms, API Latency is ${Math.round(client.ping)}ms` - ); + `:ping_pong: Pong! Latency is ${msg.createdTimestamp - message.createdTimestamp}ms, API Latency is ${Math.round(client.ws.ping)}ms` + ); }; exports.conf = { diff --git a/src/commands/play.js b/src/commands/play.js index 724500d..d9c8866 100644 --- a/src/commands/play.js +++ b/src/commands/play.js @@ -9,7 +9,7 @@ module.exports.run = (client, message, args, level) =>{ return; } - let voiceChannel = message.member.voiceChannel; + let voiceChannel = message.member.voice.channel; if(!voiceChannel) return message.channel.send('<:error:466995152976871434> You need to be in a voice channel to use this command!'); message.channel.send(`🔎 searching YouTube for \`${args.join(" ")}\``); diff --git a/src/commands/purge.js b/src/commands/purge.js index 7f1fbb9..406bf64 100644 --- a/src/commands/purge.js +++ b/src/commands/purge.js @@ -1,4 +1,4 @@ -exports.run = (client, message, args, level) => { +exports.run = async (client, message, args, level) => { const settings = message.settings; if(message.channel.name === settings.chatlogsChannel) { @@ -13,36 +13,35 @@ exports.run = (client, message, args, level) => { return message.channel.send("<:error:466995152976871434> Can only purge a maximum of 100 messages!") } - if (!amount) return message.channel.send( - '<:error:466995152976871434> You didn\'t tell me how many messages to purge. Usage: \`' + client.commands.get(`purge`).help.usage + "`" - ); - - message.delete().catch(O_o => {}); + if (!amount) return message.channel.send( + '<:error:466995152976871434> You didn\'t tell me how many messages to purge. Usage: \`' + client.commands.get(`purge`).help.usage + "`" + ); - message.channel.fetchMessages({ - limit: amount, - }).then((messages) => { - message.channel.bulkDelete(messages, true).catch(console.error); - message.channel.send(`<:success:466995111885144095> Purged ${amount} messages!`).then(m => m.delete(5000)); - }); + await message.delete().catch(O_o => {}); - if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( - channel => channel.name === settings.modlogsChannel - ); + message.channel.messages.fetch({ + limit: amount, + }).then((messages) => { + message.channel.bulkDelete(messages, true).catch(console.error); + message.channel.send(`<:success:466995111885144095> Purged ${amount} messages!`).then(m => m.delete({timeout: 5000})); + }); + + if (settings.modlogsChannel !== "off") { + const channel = message.guild.channels.cache.find( + channel => channel.name === settings.modlogsChannel + ); - if (channel) { - let embed = new Discord.RichEmbed(); - embed.setColor("#a62019"); - embed.setAuthor(`${amount} messages purged!`, message.author.avatarURL); - embed.setDescription(`❯ Mod: ${message.author} (${message.author.id})`) - try { - channel.send({ embed }); - } catch (err) { - // probably no permissions to send messages/embeds there - }; + if (channel) { + let embed = new Discord.MessageEmbed(); + embed.setColor("#a62019"); + embed.setAuthor(`${amount} messages purged!`, message.author.avatarURL({format: "png", dynamic: true})); + embed.setDescription(`• Channel: ${message.channel.name} (${message.channel.id})\n• Mod: ${message.author} (${message.author.id})\n• Amount: \`${amount}\``) + try { + channel.send({ embed }); + } catch (err) { }; }; + }; }; exports.conf = { diff --git a/src/commands/queue.js b/src/commands/queue.js index c36b97d..0bdc87e 100644 --- a/src/commands/queue.js +++ b/src/commands/queue.js @@ -60,11 +60,11 @@ exports.run = (client, message, args) => { return false; } - var embed = new Discord.RichEmbed(); + var embed = new Discord.MessageEmbed(); embed.setTitle(`Queue for: ${message.guild.name}`); embed.setColor(client.embedColour(message)); - var elapsedTime = client.music.getGuild(message.guild.id).dispatcher.time / 1000 + var elapsedTime = client.music.getGuild(message.guild.id).dispatcher.streamTime / 1000 var totalDuration = queue[0].duration - elapsedTime; let timeRemaining = ""; diff --git a/src/commands/raidmode.js b/src/commands/raidmode.js index bd5b8b5..976d2ae 100644 --- a/src/commands/raidmode.js +++ b/src/commands/raidmode.js @@ -8,7 +8,7 @@ exports.run = async (client, message, args, level) => { var raidToggle; var embColour; - var mutedRole = message.guild.roles.get(settings.mutedRole) + var mutedRole = message.guild.roles.cache.get(settings.mutedRole) if(!mutedRole) { return message.channel.send( @@ -36,15 +36,15 @@ exports.run = async (client, message, args, level) => { }; }; if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor(embColour); - embed.setAuthor(raidToggle, message.author.avatarURL); - embed.setDescription(`Mod: ${message.author} (${message.author.id})`) + embed.setAuthor(raidToggle, message.author.avatarURL({dynamic: true})); + embed.setDescription(`• Mod: ${message.author} (${message.author.id})`) try { channel.send({ embed }); } catch (err) { diff --git a/src/commands/randurban.js b/src/commands/randurban.js index 43b590c..1a6a42b 100644 --- a/src/commands/randurban.js +++ b/src/commands/randurban.js @@ -11,7 +11,7 @@ exports.run = (client, message) => { "<:error:466995152976871434> Example cannot exceed 2000 characters!" ); - embed = new Discord.RichEmbed() + embed = new Discord.MessageEmbed() .setTitle(json.word) .setURL(json.permalink) .setColor("#EFFF00") diff --git a/src/commands/restart.js b/src/commands/restart.js index 5152e35..f3cf1a7 100644 --- a/src/commands/restart.js +++ b/src/commands/restart.js @@ -1,9 +1,14 @@ exports.run = async (client, message) => {// eslint-disable-line no-unused-vars + + // This actually shuts down the bot, you'll need to use something like pm2 to get it to restart + await message.channel.send("<:reboot:467216876938985482> Restarting..."); + client.commands.forEach( async cmd => { await client.unloadCommand(cmd); }); - process.exit(1); + + process.exit(); }; exports.conf = { diff --git a/src/commands/rolecolour.js b/src/commands/rolecolour.js index f4629a0..31248b6 100644 --- a/src/commands/rolecolour.js +++ b/src/commands/rolecolour.js @@ -1,12 +1,11 @@ exports.run = async (client, message, [colour, ...givenRole], query) => { let role = givenRole.join(" "); - let gRole = message.guild.roles.find(r => r.name === role); + let gRole = client.findRole(role, message); + if (!gRole) { - return message.channel.send( - `<:error:466995152976871434> That role doesn't seem to exist. Usage: \`${client.commands.get(`rolecolour`).help.usage}\`` - ); - } + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; if(!colour.startsWith('#')) { colour = `#`+colour; @@ -19,14 +18,14 @@ exports.run = async (client, message, [colour, ...givenRole], query) => { ); let moderator = message.guild.member(message.author) - if (gRole.position >= moderator.highestRole.position) { + if (gRole.position >= moderator.roles.highest.position) { return message.channel.send( "<:error:466995152976871434> You cannot modify roles higher than your own!" ); } - var bot = message.guild.members.get(client.user.id) - if (gRole.position >= bot.highestRole.position) { + var bot = message.guild.members.cache.get(client.user.id) + if (gRole.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I cannot modify roles higher than my own!` ); @@ -34,7 +33,7 @@ exports.run = async (client, message, [colour, ...givenRole], query) => { await gRole.edit({color: colour}) message.channel.send( - `<:success:466995111885144095> Role colour changed to \`${colour}\``); + `<:success:466995111885144095> The colour of the role \`${gRole.name}\` has been set to \`${colour}\``); }; exports.conf = { diff --git a/src/commands/roleinfo.js b/src/commands/roleinfo.js index 0089d92..f6fd0e0 100644 --- a/src/commands/roleinfo.js +++ b/src/commands/roleinfo.js @@ -5,10 +5,11 @@ exports.run = async (client, message, args, level) => { `<:error:466995152976871434> You didn't provide me with a role name or ID! Usage: \`${client.commands.get(`roleinfo`).help.usage}\`` ); - var role = message.guild.roles.get(args[0]) - if(!role) { - role = message.guild.roles.find(r => r.name === args.join(" ")); - } + let role = client.findRole(args.join(" "), message); + + if (!role) { + return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); + }; if(!role) { return message.channel.send(`<:error:466995152976871434> Role not found.`) @@ -20,11 +21,10 @@ exports.run = async (client, message, args, level) => { var hoist = `No` } - var embed = new Discord.RichEmbed(); + var embed = new Discord.MessageEmbed(); embed.setColor(role.color) embed.setDescription( - `**Name:** ${role.name}\n **ID:** ${role.id}\n**Hex:** ${role.hexColor}\n**Members:** ${role.members.size} - \n**Position:** ${role.position}\n**Hoisted:** ${hoist}` + `• **Name:** ${role.name}\n• **ID:** ${role.id}\n• **Hex:** ${role.hexColor}\n• **Members:** ${role.members.size}\n• **Position:** ${role.position}\n• **Hoisted:** ${hoist}` ); message.channel.send(embed) }; diff --git a/src/commands/sans.js b/src/commands/sans.js index a023ed6..ae5b3af 100644 --- a/src/commands/sans.js +++ b/src/commands/sans.js @@ -1,16 +1,23 @@ const url = "https://demirramon.com/gen/undertale_text_box.png"; exports.run = (client, message, args) => { let text = args.join(" "); - if (!text) { return message.channel.send( `<:error:466995152976871434> No message provided. Usage: \`${client.commands.get(`sans`).help.usage}\`` ); } + + message.channel.startTyping(); let params = "box=undertale&boxcolor=white&character=undertale-sans&expression=default&charcolor=white&font=determination&asterisk=true&mode=regular&text=" + encodeURIComponent(text); - message.channel.send({files: [new Discord.Attachment(url + "?" + params, "undertale.png")]}); + try { + message.channel.stopTyping(); + message.channel.send({files: [new Discord.MessageAttachment(url + "?" + params, "undertale.png")]}); + } catch(err) { + message.channel.stopTyping(); + message.channel.send(`<:error:466995152976871434> Error when generating image: \`${err}\``) + } }; exports.conf = { diff --git a/src/commands/say.js b/src/commands/say.js new file mode 100644 index 0000000..e196847 --- /dev/null +++ b/src/commands/say.js @@ -0,0 +1,28 @@ +exports.run = (client, message, args, level) => { + if(!args[0]) { + return message.channel.send( + `<:error:466995152976871434> No message provided. Usage: \`${client.commands.get(`echo`).help.usage}\`` + ); + }; + if (message.content.includes("@everyone")) { + return message.channel.send(`<@${message.author.id}>`); + }; + + message.delete().catch(O_o => {}); + message.channel.send(args.join(" ")); +}; + +exports.conf = { + enabled: true, + guildOnly: false, + aliases: ["echo"], + permLevel: "User", + requiredPerms: ["MANAGE_MESSAGES"] +}; + +exports.help = { + name: "say", + category: "Fun", + description: "Makes Woomy copy what the user says.", + usage: "echo <-hide> [message]" +}; diff --git a/src/commands/servericon.js b/src/commands/servericon.js index 3c21168..5a22748 100644 --- a/src/commands/servericon.js +++ b/src/commands/servericon.js @@ -1,5 +1,5 @@ exports.run = (client, message) => { - message.channel.send(`**${message.guild}'s** icon is:\n${message.guild.iconURL}`) + message.channel.send(`**${message.guild}'s** icon is:\n${message.guild.iconURL({format: "png", dynamic: true})}`) }; exports.conf = { diff --git a/src/commands/serverinfo.js b/src/commands/serverinfo.js index de451f1..41c8b0c 100644 --- a/src/commands/serverinfo.js +++ b/src/commands/serverinfo.js @@ -1,40 +1,84 @@ exports.run = (client, message) => { - let guild = message.guild - - var roleCount = 0; - let roles = guild.roles - roles.forEach((role) => { roleCount = roleCount + 1; }); + var guild = message.guild + var badges = ""; + var members = `${guild.memberCount} (${guild.memberCount-guild.members.cache.filter(member => member.user.bot).size} users | ${guild.members.cache.filter(member => member.user.bot).size} bots)`; - var chanCount = 0; - let channels = guild.channels - channels.forEach((channel) => { chanCount = chanCount + 1; }); + var roles = 0; + guild.roles.cache.forEach((role) => { + roles = roles + 1; + }); - var emojiList = ""; - let emojis = guild.emojis; - emojis.forEach((emoji) => { emojiList = emojiList + emoji; }); - eListOutput = `\n**Emojis:** ${emojiList}`; - if(emojiList === "") eListOutput = ""; + var channels = 0; + var categories = 0; + var text = 0; + var voice = 0; - let vlvl = guild.verificationLevel; - if(vlvl === 0) vlvl = "None"; - if(vlvl === 1) vlvl = "Low"; - if(vlvl === 2) vlvl = "Medium"; - if(vlvl === 3) vlvl = "(╯°□°)╯︵ ┻━┻" - if(vlvl === 4) vlvl = "┻━┻彡 ヽ(ಠ益ಠ)ノ彡┻━┻" + guild.channels.cache.forEach((channel) => { + if(channel.type == "category") { + categories = categories + 1; + } else { + if(channel.type == "text") { + text = text + 1; + }; - content = `**ID:** ${guild.id}\n**Owner:** ${guild.owner}\n**Region:** ${guild.region}\n**Verification Level:** ${vlvl}\n**Members:** ${guild.memberCount}\n**Roles:** ${roleCount}\n**Channels:** ${chanCount}\n**Created:** ${guild.createdAt}${eListOutput}`; - if (content.length > 2048) { - eListOutput = ""; + if(channel.type == "voice") { + voice = voice + 1; + }; - content = `**ID:** ${guild.id}\n**Owner:** ${guild.owner}\n**Region:** ${guild.region}\n**Verification Level:** ${vlvl}\n**Members:** ${guild.memberCount}\n**Roles:** ${roleCount}\n**Channels:** ${chanCount}\n**Created:** ${guild.createdAt}`; + channels = channels + 1; + }; + }); + + var channelString = `${channels} (${text} text | ${voice} voice | ${categories} categories)` + + if(guild.premiumTier > 0) { + badges = badges += "<:boosted:685704824175853624> " } - let embed = new Discord.RichEmbed() + if(guild.partnered == true) { + badges = badges += "<:partnered:685704834779054107> " + } + + if(guild.verified == true) { + badges = badges += "<:verified:685704812435734569>" + } + + if(badges.length > 0) { + badges = badges += "\n" + } + + var boosts; + if(guild.premiumTier == 1) { + boosts = `${guild.premiumSubscriptionCount} (level 1)` + } else if(guild.premiumTier == 2) { + boosts = `${guild.premiumSubscriptionCount} (level 2)` + } else if(guild.premiumTier == 3) { + boosts = `${guild.premiumSubscriptionCount} (level 3)` + } else { + boosts = guild.premiumSubscriptionCount; + }; + + var emojis = 0; + var static = 0; + var animated = 0; + + guild.emojis.cache.forEach((emoji) => { + if(emoji.animated == true) { + animated = animated + 1; + } else { + static = static + 1; + }; + emojis = emojis + 1; + }); + + emojiString = `${emojis} (${static} static | ${animated} animated)` + + let embed = new Discord.MessageEmbed() .setColor(message.guild.member(client.user).displayHexColor) - .setAuthor(guild.name) - .setDescription(content) - .setThumbnail(message.guild.iconURL); + .setTitle(guild.name) + .setDescription(`${badges}• **ID:** ${guild.id}\n• **Owner:** ${guild.owner}\n• **Region:** ${guild.region.toProperCase()}\n• **Boosts:** ${boosts}\n• **Members:** ${members}\n• **Channels:** ${channelString}\n• **Roles:** ${roles}\n• **Emojis:** ${emojiString}\n• **Creation date:** ${guild.createdAt}`) + .setThumbnail(message.guild.iconURL({format: "png", dynamic: true})); message.channel.send(embed); }; diff --git a/src/commands/settings.js b/src/commands/settings.js index 6cc58bc..eb1f66c 100644 --- a/src/commands/settings.js +++ b/src/commands/settings.js @@ -3,9 +3,9 @@ exports.run = async (client, message, args) => { const settings = message.settings; if (!client.settings.has(message.guild.id)) client.settings.set(message.guild.id, {}); - modChan = message.guild.channels.find(channel => channel.name === settings.modlogsChannel) || "__Disabled__"; - chatChan = message.guild.channels.find(channel => channel.name === settings.chatlogsChannel) || "__Disabled__" - greetChan = message.guild.channels.get(settings.welcomeChannel) || "__Disabled__"; + modChan = message.guild.channels.cache.find(channel => channel.name === settings.modlogsChannel) || "__Disabled__"; + chatChan = message.guild.channels.cache.find(channel => channel.name === settings.chatlogsChannel) || "__Disabled__" + greetChan = message.guild.channels.cache.get(settings.welcomeChannel) || "__Disabled__"; prefix = settings.prefix; var raidMode; @@ -23,10 +23,10 @@ exports.run = async (client, message, args) => { raidMode += "`" } - var modRole = message.guild.roles.get(settings.modRole); - var adminRole = message.guild.roles.get(settings.adminRole); - var autorole = message.guild.roles.get(settings.autorole); - var mutedRole = message.guild.roles.get(settings.mutedRole); + var modRole = message.guild.roles.cache.get(settings.modRole); + var adminRole = message.guild.roles.cache.get(settings.adminRole); + var autorole = message.guild.roles.cache.get(settings.autorole); + var mutedRole = message.guild.roles.cache.get(settings.mutedRole); var blacklist = ""; if(settings.modRole == "off" || !modRole) { @@ -70,18 +70,17 @@ exports.run = async (client, message, args) => { } else { if(settings.blacklisted.length > 0) { settings.blacklisted.forEach(function(user) { - blacklist += "`" + (client.users.get(user).tag || user.tag) + "`, " + blacklist += "`" + (client.users.cache.get(user).tag || user.tag) + "`, " }); blacklist = blacklist.substring(0, blacklist.length - 2); }; }; - embed = new Discord.RichEmbed() - embed.setAuthor("Settings for: " + message.guild.name, message.guild.iconURL) + embed = new Discord.MessageEmbed() + embed.setAuthor("Settings for: " + message.guild.name, message.guild.iconURL({dynamic: true})) embed.setColor(message.guild.member(client.user).displayHexColor) embed.setDescription("You can edit these settings using the commands in the 'configure' section of the help command.") - embed.addField("General:", `Prefix: \`${prefix}\`\nChat logging: ${chatChan}\nMod logging: ${modChan}\nRaid mode: ${raidMode}\nJoin/leave channel: ${greetChan}\nWelcome message: ${welcomeMessage}\nLeave message: ${leaveMessage}`, true) - embed.addField("Roles:", `Moderator: ${modRole}\nAdministrator: ${adminRole}\nMuted: ${mutedRole}\nBlacklisted: ${blacklist}\nAutorole: ${autorole}`, true); + embed.addFields({ name: "General:", value: `Prefix: \`${prefix}\`\nChat logging: ${chatChan}\nMod logging: ${modChan}\nRaid mode: ${raidMode}\nJoin/leave channel: ${greetChan}\nWelcome message: ${welcomeMessage}\nLeave message: ${leaveMessage}`, inline: true}, {name: "Roles:", value: `Moderator: ${modRole}\nAdministrator: ${adminRole}\nMuted: ${mutedRole}\nBlacklisted: ${blacklist}\nAutorole: ${autorole}`, inline: true}) message.channel.send(embed) }; diff --git a/src/commands/skip.js b/src/commands/skip.js index 0f0d53e..c997c18 100644 --- a/src/commands/skip.js +++ b/src/commands/skip.js @@ -6,7 +6,7 @@ exports.run = (client, message, args, level) => { "<:error:466995152976871434> Nothing is playing." ); - let vc = message.guild.members.get(client.user.id).voiceChannel; + let vc = message.guild.members.cache.get(client.user.id).voiceChannel; if(vc != message.member.voiceChannel) return message.channel.send( '<:error:466995152976871434> You need to be in my voice channel to use this command!' diff --git a/src/commands/softban.js b/src/commands/softban.js new file mode 100644 index 0000000..ca95e60 --- /dev/null +++ b/src/commands/softban.js @@ -0,0 +1,99 @@ +exports.run = async (client, message, args) => { + const settings = (message.settings = client.getSettings(message.guild.id)); + + if(!args[0]) { + return message.channel.send( + `<:error:466995152976871434> No username provided. Usage: \`${client.commands.get(`ban`).help.usage}\`` + ); + }; + + let user = message.mentions.members.first(); + + if (!user) { + let users; + users = client.searchForMembers(message.guild, args[0]); + if (users.length > 1) + return message.channel.send( + "<:error:466995152976871434> Found multiple users! Please be more specific or mention the user instead." + ); + else if (users.length == 0) + return message.channel.send( + "<:error:466995152976871434> That user doesn't seem to exist. Try again!" + ); + user = users[0]; + }; + + if(!user.bannable) { + return message.channel.send(`<:error:466995152976871434> Specified user is not bannable.`) + }; + + let mod = message.guild.member(message.author); + let bot = message.guild.member(client.user); + + if (user.roles.highest.position >= mod.roles.highest.position) { + return message.channel.send( + `<:error:466995152976871434> You can't softban people who are higher ranked than you are!` + ); + }; + + if (user.roles.highest.position >= bot.roles.highest.position) { + return message.channel.send( + `<:error:466995152976871434> I can't softban people who are higher ranked than you myself!` + ); + }; + + if(!user.bannable) { + return message.channel.send(`<:error:466995152976871434> Specified user is not bannable.`) + }; + + var days = args[args.length - 1] + try { + days = Number(days); + } catch(err) {}; + + console.log(typeof days) + console.log(days) + + if(isNaN(days)) { + return message.channel.send(`<:error:466995152976871434> Invalid number. Did you forget to specify how many days worth of messages to clear? Usage: \`${client.commands.get(`softban`).help.usage}\``) + } else if (days < 1 || days > 7) { + return message.channel.send(`<:error:466995152976871434> Number too large/small. The max amount of days I can clear is 7.`) + } else { + await message.guild.members.ban(user, {reason: `Softbanned by ${message.author.tag}`, days: days}); + await message.guild.members.unban(user); + message.channel.send(`<:success:466995111885144095> Softbanned \`${user.user.tag}\``); + + if (settings.modlogsChannel !== "off") { + const channel = message.guild.channels.cache.find( + channel => channel.name === settings.modlogsChannel + ); + + if (channel) { + let embed = new Discord.MessageEmbed(); + embed.setColor("#F38159"); + embed.setAuthor("User softbanned!", user.user.avatarURL({format: "png", dynamic: true})); + embed.setDescription( + `• User: ${user.user.tag} (${user.user.id})\n• Mod: ${message.author} (${message.author.id})\n• Days cleared: ${days}` + ); + try { + channel.send(embed); + } catch (err) {}; + }; + }; + }; +}; + +exports.conf = { + enabled: true, + guildOnly: true, + aliases: [], + permLevel: "Moderator", + requiredPerms: ["BAN_MEMBERS"] +}; + +exports.help = { + name: "softban", + category: "Moderation", + description: "Bans then unbans a user, clearing their messages.", + usage: "softban [user] [days]" +}; diff --git a/src/commands/stop.js b/src/commands/stop.js index fcbf991..695dd04 100644 --- a/src/commands/stop.js +++ b/src/commands/stop.js @@ -4,7 +4,7 @@ exports.run = async (client, message) => { let guild = client.music.getGuild(message.guild.id); if(guild.queue.length < 1 || !guild.playing || !guild.dispatcher) return message.channel.send("<:error:466995152976871434> Nothing is playing."); - if(!message.member.voiceChannel) return message.channel.send('<:error:466995152976871434> You need to be in voice channel to use this command!'); + if(!message.member.voice.channel) return message.channel.send('<:error:466995152976871434> You need to be in voice channel to use this command!'); guild.playing = false; guild.paused = false; diff --git a/src/commands/takerole.js b/src/commands/takerole.js index 8e0f944..4a11fa6 100644 --- a/src/commands/takerole.js +++ b/src/commands/takerole.js @@ -20,30 +20,31 @@ exports.run = async (client, message, [member, ...role2add], query) => { } let role = role2add.join(" "); - let gRole = message.guild.roles.find(r => r.name === role); + gRole = client.findRole(role, message); + if (!gRole) { return message.channel.send(`<:error:466995152976871434> That role doesn't seem to exist. Try again!`); - } + }; let moderator = message.guild.member(message.author) - if (gRole.position >= moderator.highestRole.position) { + if (gRole.position >= moderator.roles.highest.position) { return message.channel.send( "<:error:466995152976871434> You cannot take roles higher than your own!" ); } - var bot = message.guild.members.get(client.user.id) - if (gRole.position >= bot.highestRole.position) { + var bot = message.guild.members.cache.get(client.user.id) + if (gRole.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I can't take roles higher than my own!` ); } - if (!user.roles.has(gRole.id)) { + if (!user.roles.cache.has(gRole.id)) { return message.channel.send( "<:error:466995152976871434> They don't have that role!" ); } - await user.removeRole(gRole.id); + await user.roles.remove(gRole.id); message.channel.send( `<:success:466995111885144095> Took the \`${gRole.name}\` role from \`${ user.user.tag @@ -51,15 +52,15 @@ exports.run = async (client, message, [member, ...role2add], query) => { ); if (client.getSettings(message.guild.id).modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === client.getSettings(message.guild.id).modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#008369"); - embed.setAuthor("Role taken:", user.user.avatarURL); - embed.setDescription(`‏‏‎❯ User: ${user} (${user.user.id})\n‏‏‎❯ Mod: ${message.author} (${message.author.id})\n‏‏‎❯ Role: ${gRole}`) + embed.setAuthor("Role taken:", user.user.avatarURL({format: "png", dynamic: true})); + embed.setDescription(`‏‏‎• User: ${user} (${user.user.id})\n‏‏‎• Mod: ${message.author} (${message.author.id})\n‏‏‎• Role: ${gRole}`) try { channel.send({ embed }); } catch (err) { diff --git a/src/commands/unmute.js b/src/commands/unmute.js index 8bd8874..448df4d 100644 --- a/src/commands/unmute.js +++ b/src/commands/unmute.js @@ -21,53 +21,50 @@ exports.run = async (client, message, args, level) => { if (user.user.id === client.user.id) { return message.channel.send("lol no") } - if (user.user.id === message.guild.owner.id) { - return message.channel.send("<:error:466995152976871434> You can't unmute the owner!") - } let moderator = message.guild.member(message.author) - if (message.settings.mutedRole.position >= moderator.highestRole.position && level < 2) { + if (message.settings.mutedRole.position >= moderator.roles.highest.position && level < 2) { return message.channel.send( "<:error:466995152976871434> The muted role is positioned above the moderator role! Please move the muted role below the moderator role." ); } - if (user.highestRole.position >= moderator.highestRole.position && moderator.user.id !== message.guild.ownerID) { + if (user.roles.highest.position >= moderator.roles.highest.position && moderator.user.id !== message.guild.ownerID) { return message.channel.send( `<:error:466995152976871434> You can't unmute people who have a higher role than you!` ); }; let bot = message.guild.member(client.user) - if (user.highestRole.position >= bot.highestRole.position) { + if (user.roles.highest.position >= bot.roles.highest.position) { return message.channel.send( `<:error:466995152976871434> I can't unmute people who have a higher role than me!` ); } - let role = message.guild.roles.get(settings.mutedRole) + let role = message.guild.roles.cache.get(settings.mutedRole) if(!role) { return message.channel.send( "<:error:466995152976871434> Mute role not found! Please set one using `~settings edit mutedRole `" ); } - if (!user.roles.has(role.id)) { + if (!user.roles.cache.has(role.id)) { return message.channel.send("<:error:466995152976871434> They aren't muted!") } - await user.removeRole(role.id); + await user.roles.remove(role.id); message.channel.send(`<:success:466995111885144095> Unmuted \`${user.user.tag}\``) if (settings.modlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.modlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#7a2f8f"); - embed.setAuthor("User unmuted!", user.user.avatarURL); - embed.setDescription(`❯ User: ${user} (${user.user.id})\n❯ Mod: ${message.author} (${message.author.id})`) + embed.setAuthor("User unmuted!", user.user.avatarURL({format: "png", dynamic: true})); + embed.setDescription(`• User: ${user} (${user.user.id})\n• Mod: ${message.author} (${message.author.id})`) try { channel.send({ embed }); } catch (err) { diff --git a/src/commands/urban.js b/src/commands/urban.js index 3c7213e..b42f366 100644 --- a/src/commands/urban.js +++ b/src/commands/urban.js @@ -19,14 +19,14 @@ exports.run = async (client, message, args) => { "<:error:466995152976871434> Example cannot exceed 2000 characters!" ); - embed = new Discord.RichEmbed() + embed = new Discord.MessageEmbed() .setTitle(output.word) .setURL(output.urbanURL) .setColor("#EFFF00") .setDescription(output.definition || "None") - .addField("Example", output.example || "None") - .addField("Upvotes", output.thumbsUp, true) - .addField("Downvotes", output.thumbsDown, true) + .addFields( + {name: "Example", value: output.example || "None"}, {name: "Upvotes", value: output.thumbsUp, inline: true}, {name: "Downvotes", value: output.thumbsDown, inline: true} + ) .setFooter(`Submitted by ${output.author}`) message.channel.send(embed); diff --git a/src/commands/userinfo.js b/src/commands/userinfo.js index d52c568..1ad7ec0 100644 --- a/src/commands/userinfo.js +++ b/src/commands/userinfo.js @@ -1,24 +1,26 @@ const Discord = require("discord.js"); exports.run = (client, message, args) => { - var user; - var nickString = ""; - var guildString = ""; + var guild; + var nick = ""; + var roles = ""; + var presence = ""; + var badges = ""; + var status; + var createdAt; + var avurl; var tag; var id; - var createdAt; - var colour; - var avatarURL; + var bot; if(message.guild) { - user = message.mentions.members.first(); if(!args[0]) { - user = message.guild.members.get(message.author.id) - } - + user = message.guild.members.cache.get(message.author.id) + }; + if (!user) { var users; users = client.searchForMembers(message.guild, args[0]); @@ -33,56 +35,78 @@ exports.run = (client, message, args) => { user = users[0]; }; - if (!user.nickname) { - nickString = ""; - } else { - nickString = `**Nickname:** ${user.nickname}\n`; + if(user.nickname) { + nick = `\n• **Nickname:** ${user.nickname}`; }; - var roleList = "`"; - let roles = user.roles; - roles.forEach((role) => { roleList = roleList + role.name + "`, `"; }); - roleList = roleList.substring(0, roleList.length - 4); - roleList += "`"; - - guildString = `\n **Roles:** ${roleList}\n**Guild Join Date:** ${user.joinedAt}` + if(user.user.id == message.guild.ownerID) { + badges = "<:owner:685703193694306331>\n" + } - tag = user.user.tag; + createdTimestamp = user.user.createdTimestamp; + var date = new Date(createdTimestamp * 1000); + var hours = date.getHours(); + var minutes = "0" + date.getMinutes(); + var seconds = "o" + date.getSeconds(); + console.log(date) + + user.roles.cache.forEach((role) => { + roles = roles + role.name + "`, `" + }); + + roles = roles.substr(0, roles.length -4); + + guild = `\n• **Roles:** \`${roles}\`\n• **Server join date:** ${user.joinedAt}`; + id = user.user.id; + tag = user.user.tag; + colour = user.displayHexColor; + avurl = user.user.avatarURL({format: "png", dynamic: true}); createdAt = user.user.createdAt; - colour = user.displayHexColor - avatarURL = user.user.avatarURL } else { - user = message.author; - - tag = user.tag; id = user.id; - createdAt = user.createdAt; + tag = user.tag; colour = ["#ff9d68", "#ff97cb", "#d789ff", "#74FFFF"].random(); - avatarURL = user.avatarURL; + avurl = user.avatarURL({format: "png", dynamic: true}); + createdAt = user.createdAt; }; - let isBot = user.bot; - - if (isBot === true) { - isBot = "Yes"; - } else { - isBot = "No"; + if(user.presence.status == "online") { + status = `online <:status_online:685462758023626762>` }; - if (!user.presence.game) { - gameString = ""; - } else { - gameString = `\n**Playing:** ${user.presence.game}`; + if(user.presence.status == "idle") { + status = `idle <:status_idle:685462771529154561>` }; - embed = new (require("discord.js")).RichEmbed(); - embed.setTitle(tag) - embed.setDescription( - `${nickString}**ID:** ${id}\n**Bot:** ${isBot}\n**Status:** ${user.presence.status}${gameString}${guildString}\n**Discord Join Date:** ${createdAt}` - ); + if(user.presence.status == "dnd") { + status = `do not disturb <:status_dnd:685462782963220495>` + }; + + if(user.presence.status == "offline") { + status = `offline <:status_offline:685462758229016633>` + }; + + if(user.presence.activities[0]) { + presence = "\n• **Presence:** "; + if(user.presence.activities[0].type == "PLAYING") { + presence += `Playing ${user.presence.activities[0].name}`; + }; + + if(user.presence.activities[0].type == "STREAMING") { + presence += `Streaming ${user.presence.activities[0].name}`; + }; + + if(user.presence.activities[0].type == "CUSTOM_STATUS") { + presence += `${user.presence.activities[0].state}`; + }; + }; + + embed = new Discord.MessageEmbed(); + embed.setTitle(tag); + embed.setThumbnail(avurl); + embed.setDescription(`${badges}• **ID:** ${id}${nick}\n• **Status:** ${status}${presence}${guild}\n• **Account created:** ${createdAt}`) embed.setColor(colour); - embed.setThumbnail(avatarURL); message.channel.send(embed); }; diff --git a/src/commands/weather.js b/src/commands/weather.js index 59372ac..f5fc362 100644 --- a/src/commands/weather.js +++ b/src/commands/weather.js @@ -1,7 +1,7 @@ const weather = require("weather-js"); exports.run = async (client, message, args, error) => { if(!args[0]) { - message.channel.send( + return message.channel.send( `<:error:466995152976871434> You didn't give me a location. Usage: \`${client.commands.get(`weather`).help.usage}\`` ); }; @@ -9,10 +9,13 @@ exports.run = async (client, message, args, error) => { if(args.join(" ").toLowerCase() == "antarctica") { return; } + + message.channel.startTyping(); weather.find({search: args.join(" "), degreeType: 'C'}, function(err, result) { if(err) client.logger.log(`weather.js error: ${JSON.stringify(error)}`, "error") if(result.length < 2 || !result) { + message.channel.stopTyping(); return message.channel.send("<:error:466995152976871434> City not found!"); }; @@ -34,11 +37,12 @@ exports.run = async (client, message, args, error) => { embedColour = "#ff614f" }; - embed = new Discord.RichEmbed(); + embed = new Discord.MessageEmbed(); embed.addField(`Weather for ${location.name}:`, `**Condition:** ${current.skytext}\n**Temperature:** ${current.temperature}C°\n**Feels like:** ${current.feelslike}C°\n**Humidity:** ${current.humidity}%\n**Wind:** ${current.winddisplay}\n**Warnings:** ${warning}`) embed.setThumbnail(current.imageUrl) embed.setFooter(`Last updated at ${current.observationtime} ${current.date}`) - embed.setColor(embedColour) + embed.setColor(embedColour) + message.channel.stopTyping(); message.channel.send(embed) }); }; diff --git a/src/commands/woomy.js b/src/commands/woomy.js index e6e39d0..a9e17c4 100644 --- a/src/commands/woomy.js +++ b/src/commands/woomy.js @@ -2,17 +2,18 @@ const Discord = require("discord.js") exports.run = async (client, message) =>{ message.channel.send("Woomy!") - const voiceChannel = message.member.voiceChannel; + const voiceChannel = message.member.voice.channel; + if (!voiceChannel) return; - const permissions = voiceChannel.permissionsFor(message.client.user); - if (!permissions.has('CONNECT')) return; - if (!permissions.has('SPEAK')) return; - if (client.music.getGuild(message.guild.id).playing == true) return; + if (!voiceChannel.permissionsFor(message.client.user).has('CONNECT')) return; + if (!voiceChannel.permissionsFor(message.client.user).has('SPEAK')) return; + + if (client.music.getGuild(message.guild.id).playing == true || !client.music.getGuild(message.guild.id).queue[0]) return; voiceChannel.join() .then(connection => { - const dispatcher = connection.playFile(`/home/container/media/sounds/WOOMY.MP3`); - dispatcher.on("end", end => {voiceChannel.leave()}); + const dispatcher = connection.play(`/home/container/resources/audio/WOOMY.MP3`); + dispatcher.on("finish", end => {voiceChannel.leave()}); }) }; diff --git a/src/events/error.js b/src/events/error.js index 86f40dc..23ce03a 100644 --- a/src/events/error.js +++ b/src/events/error.js @@ -1,3 +1,3 @@ module.exports = async (client, error) => { - client.logger.log(`Discord.js error: \n${JSON.stringify(error)}`, "error"); + client.logger.log(`d.js err: \n${JSON.stringify(error.stack)}`, "error"); }; diff --git a/src/events/guildCreate.js b/src/events/guildCreate.js index 03e38d2..5f0f47f 100644 --- a/src/events/guildCreate.js +++ b/src/events/guildCreate.js @@ -1,17 +1,15 @@ const Discord = require("discord.js"); -const chalk = require("chalk"); module.exports = (client, guild) => { + client.logger.log(`Guild joined.`, "info"); client.settings.ensure(guild.id, client.config.defaultSettings); - if(client.devmode === true) return; - channel = client.channels.get("458896120639127552"); - - let embed = new Discord.RichEmbed(); + if(client.devmode == false) { + channel = client.channels.cache.get("458896120639127552"); + embed = new Discord.MessageEmbed(); embed.setColor("#F38159"); - embed.setAuthor("Joined a new server:") - embed.setDescription(`‏‏‎❯ Name: \`${guild.name}\`\n‏‏‎❯ Size: \`${guild.members.size}\``) - embed.setFooter(`I'm now in ${client.guilds.size} servers!`) - channel.send(embed); + embed.setDescription(`Joined a new server with \`${guild.members.cache.size}\` members! I'm now in \`${client.guilds.cache.size}\` servers.`) + channel.send(embed) + }; }; diff --git a/src/events/guildDelete.js b/src/events/guildDelete.js index af6dd94..a4c582d 100644 --- a/src/events/guildDelete.js +++ b/src/events/guildDelete.js @@ -1,24 +1,20 @@ -const Discord = require("discord.js"); -const chalk = require('chalk'); +const Discord = require('discord.js'); module.exports = (client, guild) => { - client.logger.log(chalk.redBright(`Guild left.`), "cmd"); + client.logger.log(`Guild left.`, "info"); if(client.devmode === true) return; - if(!guild) { + if(!guild.available) { return; - } + }; - channel = client.channels.get("458896120639127552"); - - let embed = new Discord.RichEmbed(); - embed.setColor("#9494FF"); - embed.setAuthor("Left a server:") - embed.setDescription(`‏‏‎❯ Name: \`${guild.name}\``) - embed.setFooter(`I'm now in ${client.guilds.size} servers.`) - channel.send(embed); + channel = client.channels.cache.get("458896120639127552"); + embed = new Discord.MessageEmbed(); + embed.setColor("#9494FF"); + embed.setDescription(`Left a server. I'm now in \`${client.guilds.cache.size}\` servers.`) + channel.send(embed) if (client.settings.has(guild.id)) { client.settings.delete(guild.id); - } + }; }; diff --git a/src/events/guildMemberAdd.js b/src/events/guildMemberAdd.js index ae4d551..8e0ac6b 100644 --- a/src/events/guildMemberAdd.js +++ b/src/events/guildMemberAdd.js @@ -2,7 +2,7 @@ module.exports = async (client, member) => { const settings = client.getSettings(member.guild.id); if (settings.welcomeMessage !== "off") { - let chanExists = member.guild.channels.get(settings.welcomeChannel) + let chanExists = member.guild.channels.cache.get(settings.welcomeChannel) if (!chanExists) { return; }; @@ -11,17 +11,17 @@ module.exports = async (client, member) => { welcomeMessage = welcomeMessage.replace("[[members]]", member.guild.memberCount); member.guild.channels - .get(settings.welcomeChannel) + .cache.get(settings.welcomeChannel) .send(welcomeMessage) .catch(console.error); } if (settings.autorole !== "off") { - let aRole = member.guild.roles.get(settings.autorole) + let aRole = member.guild.roles.cache.get(settings.autorole) if (!aRole) { return; }; - await member.addRole(aRole.id).catch(console.error); + await member.roles.add(aRole.id).catch(console.error); }; if(settings.raidMode !== "off") { @@ -29,18 +29,18 @@ module.exports = async (client, member) => { member.kick("User bounced.") if (settings.chatlogsChannel !== "off") { - const channel = member.guild.channels.find( + const channel = member.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#1f1f1f"); - embed.setAuthor("User bounced:", member.user.avatarURL); + embed.setAuthor("User bounced:", member.user.avatarURL({dynamic: true})); embed.setDescription(`‏‏‎❯ User: ${member} (${member.user.id})`, true); embed.setFooter(`New users are being automatically kicked because raidmode is enabled.`) try { - channel.send({ embed }); + channel.send(embed); } catch (err) { // probably no permissions to send messages/embeds there }; @@ -48,24 +48,24 @@ module.exports = async (client, member) => { return; } } - let mRole = member.guild.roles.get(settings.mutedRole) + let mRole = member.guild.roles.cache.get(settings.mutedRole) if (!mRole) { return; }; - await member.addRole(mRole.id).catch(console.error); + await member.roles.add(mRole.id).catch(console.error); if (settings.chatlogsChannel !== "off") { - const channel = member.guild.channels.find( + const channel = member.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#1f1f1f"); - embed.setAuthor("User automatically muted:", member.user.avatarURL); + embed.setAuthor("User automatically muted:", member.user.avatarURL({dynamic: true})); embed.setDescription(`‏‏‎❯ User: ${member} (${member.user.id})`, true); embed.setFooter(`New users are being automatically muted because raidmode is enabled.`) try { - channel.send({ embed }); + channel.send(embed); } catch (err) { // probably no permissions to send messages/embeds there }; @@ -74,14 +74,14 @@ module.exports = async (client, member) => { }; if (settings.chatlogsChannel !== "off") { - const channel = member.guild.channels.find( + const channel = member.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#0099e1"); - embed.setAuthor("User joined:", member.user.avatarURL); + embed.setAuthor("User joined:", member.user.avatarURL({dynamic: true})); embed.setDescription(`‏‏‎❯ User: ${member} (${member.user.id})`, true); try { channel.send({ embed }); diff --git a/src/events/guildMemberRemove.js b/src/events/guildMemberRemove.js index feaaf5c..b632ef1 100644 --- a/src/events/guildMemberRemove.js +++ b/src/events/guildMemberRemove.js @@ -2,7 +2,7 @@ module.exports = async (client, member) => { const settings = client.getSettings(member.guild.id); if (settings.leaveMessage !== "off") { - let chanExists = member.guild.channels.get(settings.welcomeChannel) + let chanExists = member.guild.channels.cache.get(settings.welcomeChannel) if (!chanExists) { return; }; @@ -11,20 +11,20 @@ module.exports = async (client, member) => { leaveMessage = leaveMessage.replace("[[members]]", member.guild.memberCount); member.guild.channels - .get(settings.welcomeChannel) + .cache.get(settings.welcomeChannel) .send(leaveMessage) .catch(console.error); }; if (settings.chatlogsChannel !== "off") { - const channel = member.guild.channels.find( + const channel = member.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#006798"); - embed.setAuthor("User left:", member.user.avatarURL); + embed.setAuthor("User left:", member.user.avatarURL({dynamic: true})); embed.setDescription(`‏‏‎❯ ${member.user.tag} (${member.user.id})`, true); try { channel.send({ embed }); diff --git a/src/events/message.js b/src/events/message.js index 7243c87..3505c1c 100644 --- a/src/events/message.js +++ b/src/events/message.js @@ -22,11 +22,11 @@ module.exports = async (client, message) => { perms = message.channel.permissionsFor(client.user); - var modRole = message.guild.roles.get(settings.modRole); - var adminRole = message.guild.roles.get(settings.adminRole); - var autorole = message.guild.roles.get(settings.autorole); - var mutedRole = message.guild.roles.get(settings.mutedRole); - var welcomeChannel = message.guild.channels.get(settings.welcomeChannel); + var modRole = message.guild.roles.cache.get(settings.modRole); + var adminRole = message.guild.roles.cache.get(settings.adminRole); + var autorole = message.guild.roles.cache.get(settings.autorole); + var mutedRole = message.guild.roles.cache.get(settings.mutedRole); + var welcomeChannel = message.guild.channels.cache.get(settings.welcomeChannel); if(!welcomeChannel && settings.welcomeChannel != "off" || !adminRole && settings.adminRole != "None set" || !modRole && settings.modRole != "None set" || !mutedRole && settings.mutedRole != "None set" || !autorole && settings.autorole != "off") { @@ -37,7 +37,7 @@ module.exports = async (client, message) => { var welcomeReset = false; if(!adminRole && settings.adminRole != "None set") { - var role = message.guild.roles.find(r => r.name === settings.adminRole); + var role = message.guild.roles.cache.find(r => r.name === settings.adminRole); if(!role) { adminReset = true; client.settings.set(message.guild.id, client.config.defaultSettings.adminRole, "adminRole"); @@ -47,7 +47,7 @@ module.exports = async (client, message) => { }; if(!mutedRole && settings.mutedRole != "None set") { - var role = message.guild.roles.find(r => r.name === settings.mutedRole); + var role = message.guild.roles.cache.find(r => r.name === settings.mutedRole); if(!role) { mutedReset = true; client.settings.set(message.guild.id, client.config.defaultSettings.mutedRole, "mutedRole"); @@ -57,7 +57,7 @@ module.exports = async (client, message) => { }; if(!modRole && settings.modRole != "None set") { - var role = message.guild.roles.find(r => r.name === settings.modRole); + var role = message.guild.roles.cache.find(r => r.name === settings.modRole); if(!role) { modReset = true; client.settings.set(message.guild.id, client.config.defaultSettings.modRole, "modRole"); @@ -67,7 +67,7 @@ module.exports = async (client, message) => { }; if(!autorole && settings.autorole != "off") { - var role = message.guild.roles.find(r => r.name === settings.autorole); + var role = message.guild.roles.cache.find(r => r.name === settings.autorole); if(!role) { autoReset = true; client.settings.set(message.guild.id, client.config.defaultSettings.autorole, "autorole"); @@ -77,7 +77,7 @@ module.exports = async (client, message) => { }; if(!welcomeChannel && settings.welcomeChannel != "off") { - var channel = message.guild.channels.find(c => c.name === settings.welcomeChannel); + var channel = message.guild.channels.cache.find(c => c.name === settings.welcomeChannel); if(!channel) { welcomeReset = true; client.settings.set(message.guild.id, client.config.defaultSettings.welcomeChannel, "welcomeChannel"); @@ -119,7 +119,7 @@ module.exports = async (client, message) => { }; if (!message.member) { - await message.guild.fetchMember(message.author); + await message.guild.members.fetch(message.author); }; if(message.settings.blacklisted != "ARRAY" && settings.blacklisted.length > 0) { @@ -144,10 +144,10 @@ module.exports = async (client, message) => { const cmd = client.commands.get(command) || client.commands.get(client.aliases.get(command)); if (!cmd) return; - + if (commandRanRecently.has(message.author.id)) { return message.channel.send( - `<:wait:467115775849922570> You are being ratelimited. Please try again in 2 seconds.` + `⏱️ You are being ratelimited. Please try again in 2 seconds.` ) .then(m => m.delete(2000)); }; @@ -219,9 +219,9 @@ module.exports = async (client, message) => { commandRanRecently.add(message.author.id); setTimeout(() => { commandRanRecently.delete(message.author.id); - }, 2000); + }, {timeout: 2000}); client.logger.cmd(`${client.config.permLevels.find(l => l.level === level).name} ${message.author.username} (${message.author.id}) ran command ${cmd.help.name}`); cmd.run(client, message, args, level); -}; +}; \ No newline at end of file diff --git a/src/events/messageDelete.js b/src/events/messageDelete.js index d4683f4..c697f3e 100644 --- a/src/events/messageDelete.js +++ b/src/events/messageDelete.js @@ -6,7 +6,7 @@ module.exports = (client, message) => { const settings = (message.settings = client.getSettings(message.guild.id)); if (settings.chatlogsChannel !== "off") { - const channel = message.guild.channels.find( + const channel = message.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ) @@ -21,9 +21,9 @@ module.exports = (client, message) => { } if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#f93a2f"); - embed.setAuthor("Message deleted!", message.member.user.avatarURL); + embed.setAuthor("Message deleted!", message.member.user.avatarURL({dynamic: true})); if (msg == "") { msg = "**An image was deleted, but is not shown for privacy reasons.**" } else { diff --git a/src/events/messageUpdate.js b/src/events/messageUpdate.js index c136cd9..c6aa6e8 100644 --- a/src/events/messageUpdate.js +++ b/src/events/messageUpdate.js @@ -8,14 +8,14 @@ module.exports = (client, omsg, nmsg) => { )); if (settings.chatlogsChannel !== "off") { - const channel = nmsg.guild.channels.find( + const channel = nmsg.guild.channels.cache.find( channel => channel.name === settings.chatlogsChannel ); if (channel) { - let embed = new Discord.RichEmbed(); + let embed = new Discord.MessageEmbed(); embed.setColor("#fff937"); - embed.setAuthor("Message Edited!", nmsg.member.user.avatarURL); + embed.setAuthor("Message Edited!", nmsg.member.user.avatarURL({dynamic: true})); if (omsg.content == "") { omsg.content = "**[IMAGE]**" } else if (nmsg.content == "") { @@ -29,7 +29,7 @@ module.exports = (client, omsg, nmsg) => { return; } - embed.setDescription(`❯ Author: ${nmsg.member} (${nmsg.member.user.id})\n❯ Channel: ${nmsg.channel}\n❯ Old message: ${omsg.content}\n❯ New message: ${nmsg.content}`) + embed.setDescription(`• Author: ${nmsg.member} (${nmsg.member.user.id})\n• Channel: ${nmsg.channel}\n• Old message: ${omsg.content}\n• New message: ${nmsg.content}`) try { channel.send({ embed }); } catch (err) { diff --git a/src/events/ready.js b/src/events/ready.js index 2777fe1..adb3c9c 100644 --- a/src/events/ready.js +++ b/src/events/ready.js @@ -6,13 +6,13 @@ module.exports = client => { client.lockActivity = false; - client.logger.log(`Connected to Discord as ${client.user.tag} | v${client.update.version}`, "ready"); + client.logger.log(`Connected to Discord as ${client.user.tag} | v${client.version.number}`, 'ready'); let channel; let channel1; - try { channel = client.guilds.get('410990517841690625').channels.get('570963998342643732'); } catch(err) {}; - try { channel1 = client.guilds.get('410990517841690625').channels.get('570963481189154822'); } catch(err) {}; + try { channel = client.guilds.cache.get('410990517841690625').channels.cache.get('570963998342643732'); } catch(err) {}; + try { channel1 = client.guilds.cache.get('410990517841690625').channels.cache.get('570963481189154822'); } catch(err) {}; if(client.devmode == true) { client.logger.warn("Running in development mode.") @@ -25,8 +25,9 @@ module.exports = client => { let randomActivity = activityArray.random(); - client.user.setActivity(`${prefix + randomActivity} | v${client.update.version}`, {type: "PLAYING"}); + client.user.setActivity(`${prefix + randomActivity} | v${client.version.number}`, {type: "PLAYING"}); setInterval(() => { randomActivity = activityArray.random(); - if(client.lockActivity == false) client.user.setActivity(`${prefix + randomActivity} | v${client.update.version}`, {type: "PLAYING"})}, 30000); + if(client.lockActivity == false) client.user.setActivity(`${prefix + randomActivity} | v${client.version.number}`, {type: "PLAYING"}); + }, 30000); }; diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..b0326d1 --- /dev/null +++ b/src/index.js @@ -0,0 +1,67 @@ +const Discord = require('discord.js'); +const { promisify } = require('util'); +const readdir = promisify(require('fs').readdir); +const Enmap = require('enmap'); +const chalk = require('chalk'); +const DBL = require("dblapi.js"); +const client = new Discord.Client(); + +client.config = require('../config'); +client.version = require('../version.json'); +client.logger = require('./modules/Logger'); +require("./modules/functions")(client); +client.logger.setClient(client); + +client.commands = new Enmap(); +client.aliases = new Enmap(); +client.settings = new Enmap({name: 'settings', dataDir: '../data'}); +client.blacklist = new Enmap({name: 'blacklist', dataDir: '../data'}); + +client.devmode = false; + +if(process.env['USER'] != 'container') { + client.devmode = true; +}; + +if(client.devmode === false) { + const dblapi = new DBL(client.config.dblkey, client); +}; + +const init = async () => { + const cmdFiles = await readdir("./commands/"); + client.logger.info(`Loading ${cmdFiles.length} commands.`); + cmdFiles.forEach(file => { + if (!file.endsWith(".js")) { + return; + }; + const response = client.loadCommand(file); + if (response) { + console.log(response); + }; + }); + + const evtFiles = await readdir("./events/"); + client.logger.info(`Loading ${evtFiles.length} events.`); + evtFiles.forEach(file => { + if (!file.endsWith(".js")) { + return; + }; + const eventName = file.split(".")[0]; + const event = require(`./events/${file}`); + client.on(eventName, event.bind(null, client)); + }); + + client.levelCache = {}; + for (let i = 0; i < client.config.permLevels.length; i++) { + const thisLevel = client.config.permLevels[i]; + client.levelCache[thisLevel.name] = thisLevel.level; + }; + + if(client.devmode === true) { + client.login(client.config.devtoken); + } else { + client.login(client.config.token); + }; +}; + +init(); \ No newline at end of file diff --git a/src/modules/Logger.js b/src/modules/Logger.js index a3eb057..0c8614f 100644 --- a/src/modules/Logger.js +++ b/src/modules/Logger.js @@ -2,53 +2,63 @@ const chalk = require("chalk"); const moment = require("moment"); exports.log = (content, type = "log") => { - const timestamp = `[${moment().format("YYYY-MM-DD HH:mm:ss")}]`; - const timestamp1 = `\`${moment().format("YYYY-MM-DD HH:mm:ss")}\`:`; + const timestamp = chalk.grey(`[${moment().format("YYYY-MM-DD HH:mm:ss")}]`); let channel; - try { channel = client.guilds.get('410990517841690625').channels.get('570963481189154822'); } catch(err) {} + try { channel = client.guilds.cache.get('410990517841690625').channels.cache.get('570963481189154822'); } catch(err) {} switch (type) { - case "log": { - try { if (client.user.id === "435961704145485835") { - channel.send(`${timestamp1} ` + content); - }; - } catch(err) {}; - return console.log(`${timestamp} ${chalk.cyanBright(`[${type.toUpperCase()}] -`)} ${content} `); + case "info": { + try { + if (client.devmode == false) { + channel.send(`\`${timestamp}\`: ` + content); + }; + } catch(err) {}; + return console.log(`${timestamp} ${chalk.cyanBright(`[${type.toUpperCase()}]`)} ${content} `); }; + case "warn": { - try { if (client.user.id === "435961704145485835") { - channel.send(`${timestamp1} ` + content); - }; - } catch(err) {}; + try { + if (client.devmode == false) { + channel.send(`\`${timestamp}\`: ` + content); + }; + } catch(err) {}; return console.log(`${timestamp} ${chalk.yellowBright(`[${type.toUpperCase()}]`)} ${content} `); }; + case "error": { - try { if (client.user.id === "439594675230212096") { - channel.send(`${timestamp1} ` + content); - }; - } catch(err) {} + try { + if (client.devmode == false) { + channel.send(`\`${timestamp}\`: ` + content); + }; + } catch(err) {} return console.log(`${timestamp} ${chalk.redBright(`[${type.toUpperCase()}]`)} ${content} `); }; + case "debug": { - try { if (client.user.id === "435961704145485835") { - channel.send(`${timestamp1} ` + content); - }; - } catch(err) {}; + try { + if (client.devmode == false) { + channel.send(`\`${timestamp}\`: ` + content); + }; + } catch(err) {}; return console.log(`${timestamp} ${chalk.magentaBright(`[${type.toUpperCase()}]`)} ${content} `); }; + case "cmd": { - try { if (client.user.id === "435961704145485835") { - channel.send(`${timestamp1} ` + content); - }; - } catch(err) {}; + try { + if (client.devmode == false) { + channel.send(`\`${timestamp}\` ` + content); + }; + } catch(err) {}; return console.log(`${timestamp} ${chalk.whiteBright(`[${type.toUpperCase()}]`)} ${content}`); }; + case "ready": { return console.log(`${timestamp} ${chalk.greenBright (`[${type.toUpperCase()}]`)} ${content}`); }; - default: throw new TypeError("Logger type must be either warn, debug, log, ready, cmd or error."); + + default: throw new TypeError("Logger type must be either warn, debug, info, ready, cmd or error."); }; }; @@ -58,9 +68,10 @@ exports.warn = (...args) => this.log(...args, "warn"); exports.debug = (...args) => this.log(...args, "debug"); +exports.info = (...args) => this.log(...args, "info"); + exports.cmd = (...args) => this.log(...args, "cmd"); -exports.setClient = function(c) -{ +exports.setClient = function(c) { client = c; }; diff --git a/src/modules/functions.js b/src/modules/functions.js index 3d1348a..85ec48d 100644 --- a/src/modules/functions.js +++ b/src/modules/functions.js @@ -70,7 +70,6 @@ module.exports = client => { client.loadCommand = commandName => { try { - client.logger.log(`Loading command: ${commandName}`); const props = require(`../commands/${commandName}`); if (props.init) { props.init(client); @@ -109,15 +108,6 @@ module.exports = client => { return false; }; - // EMBED COLOUR CONTROL - client.embedColour = function(msg) { - if(!msg.guild) { - return ["#ff9d68", "#ff97cb", "#d789ff", "#74FFFF"].random(); - } else { - return msg.guild.member(client.user).displayHexColor; - }; - }; - // MEMBER SEARCH client.searchForMembers = function(guild, query) { if (!query) return; @@ -127,14 +117,14 @@ module.exports = client => { var b; try { - b = guild.members.find(x => x.displayName.toLowerCase() == query); - if (!b) guild.members.find(x => x.user.username.toLowerCase() == query); + b = guild.members.cache.find(x => x.displayName.toLowerCase() == query); + if (!b) guild.members.cache.find(x => x.user.username.toLowerCase() == query); } catch (err) {}; if (b) a.push(b); - guild.members.forEach(member => { + guild.members.cache.forEach(member => { if ( (member.displayName.toLowerCase().startsWith(query) || - member.user.username.toLowerCase().startsWith(query)) && + member.user.tag.toLowerCase().startsWith(query)) && member.id != (b && b.id) ) { a.push(member); @@ -143,7 +133,7 @@ module.exports = client => { return a; }; - // Music stuff + // MUSIC client.music = {guilds: {}}; client.music.isYoutubeLink = function(input) { @@ -194,7 +184,7 @@ module.exports = client => { client.music.play = async function(message, input, bypassQueue) { - let voiceChannel = message.member.voiceChannel; + let voiceChannel = message.member.voice.channel; if(!voiceChannel) return message.channel.send('<:error:466995152976871434> You need to be in a voice channel to use this command!'); let permissions = voiceChannel.permissionsFor(client.user); @@ -204,7 +194,7 @@ module.exports = client => { if (!permissions.has('SPEAK')) { return message.channel.send('<:error:466995152976871434> I do not have permission to join your voice channel.'); } - if (message.member.voiceChannel.joinable != true) { + if (voiceChannel.joinable != true) { return message.channel.send("<:error:466995152976871434> I do not have permission to join your voice channel.") } @@ -260,9 +250,9 @@ module.exports = client => { try { - let dispatcher = client.music.getGuild(message.guild.id).dispatcher = connection.playOpusStream(await ytdl("https://www.youtube.com/watch?v=" + id, {highWaterMark: 1024 * 1024 * 32})); + let dispatcher = client.music.getGuild(message.guild.id).dispatcher = connection.play(await ytdl("https://www.youtube.com/watch?v=" + id, {highWaterMark: 1024 * 1024 * 32}), {type: 'opus'}); - dispatcher.on('end', (a, b) => + dispatcher.on('finish', (a, b) => { end(a == "silent"); }); @@ -284,7 +274,7 @@ module.exports = client => { } } - // COVNERT SECONDS TO TIMESTAMP + // MUSIC - TIMESTAMP client.createTimestamp = function(duration){ hrs = ~~(duration / 60 / 60), min = ~~(duration / 60) % 60, @@ -310,7 +300,29 @@ module.exports = client => { return time; }; - // MISCELLANEOUS NON-CRITICAL FUNCTIONS + //FIND ROLE + client.findRole = function(input, message) { + var role; + role = message.guild.roles.cache.find(r => r.name.toLowerCase() === input.toLowerCase()); + if(!role) { + role = message.guild.roles.cache.get(input.toLowerCase()); + }; + + if(!role) { + return; + }; + + return role; + }; + + // EMBED COLOUR + client.embedColour = function(msg) { + if(!msg.guild) { + return ["#ff9d68", "#ff97cb", "#d789ff", "#74FFFF"].random(); + } else { + return msg.guild.member(client.user).displayHexColor; + }; + }; // .toPropercase() returns a proper-cased string Object.defineProperty(String.prototype, "toProperCase", { @@ -340,6 +352,6 @@ module.exports = client => { }); process.on("unhandledRejection", err => { - client.logger.error(`Unhandled rejection: ${err}`); + client.logger.error(`Unhandled rejection: ${err.stack}`); }); }; diff --git a/update.json b/update.json deleted file mode 100644 index 94d6550..0000000 --- a/update.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.2", - "changelog": "**Updated to 1.0:**\n> - Music commands have been competely reworked. They're now less buggy and more feature rich!\n> - Added `nowplaying` command\n> - Added `blacklist` command, which lets you stop users from using commands in your server\n> - Woomy works in DM's again\n> - Renamed `calculate` to `math`\n> - The filter has been removed because it sucked\n> - Lots of minor changes to lots of commands\n> - Woomy now lists the permissions she needs to run specific commands in `help`\n> - Invite now lets you choose what permissions Woomy gets\n**Notes:**\n> - Woomy skipped from 0.7.0 to 1.0 so she could have a better way to name her updates. For example, the X in (X.Y.Z) will change only if there is a huge update like a rewrite, Y will change when new features are added to Woomy and Z will change when minor updates are made, like bug fixes.\n> - Woomy is now open source! You can view her code at https://github.com/mudkipscience/woomy" -} diff --git a/version.json b/version.json new file mode 100644 index 0000000..b6a4488 --- /dev/null +++ b/version.json @@ -0,0 +1,4 @@ +{ + "number": "1.1.0", + "changelog": "**1.1.0 CHANGELOG:**\n> • Added `~softban`, bans and unbans a user to clear messages\n> • Added `~emoji`, enlarges custom emojis\n> • Added `~inspirobot`, generates an inspirational quote\n> • `~serverinfo` has been changed to be more consistent, and also now displays boosts and if the server is partnered and stuff\n> • `~userinfo` has been changed to be more consistent, also added some stuff\n> • `~about` has been changed, added a thumbnail and removed the description\n> • `~colour` has been changed, it can now generate colours from text\n> • `~hackban` no longer has its own embed\n> • `~eval` now logs to hastebin if output is too large\n> • role names are no longer case sensitive\n> • `~echo` renamed `~say`\n> • Users with the ADMINISTRATOR permission now automatically recieve woomy admin\n> • Fixed `~flip`, `~purge`, `~bohemian_rhapsody` and `~creeper`\n> • Guild join/leave messages no longer include the guild name\n> • Some emojis have been changed\n> • Woomy now supports discord.js v12\n> • Files have been restructured\n> • Logger now logs error stack\n> • Restart now exits with code 0" +} diff --git a/woomy.js b/woomy.js deleted file mode 100644 index 26d1618..0000000 --- a/woomy.js +++ /dev/null @@ -1,63 +0,0 @@ -const Discord = require("discord.js"); -const { promisify } = require("util"); -const readdir = promisify(require("fs").readdir); -const Enmap = require("enmap"); -const chalk = require("chalk"); -const client = new Discord.Client(); - -client.config = require("./config"); -client.update = require("./update.json"); -client.logger = require("./src/modules/Logger"); -client.logger.setClient(client); - -require("./src/modules/functions.js")(client); - -if(process.env['USER'] != 'container') { - client.devmode = true; -}; - -if(client.devmode === false) { - const DBL = require("dblapi.js"); - const dbl = new DBL(client.config.dblkey, client); -}; - -client.commands = new Enmap(); -client.aliases = new Enmap(); -client.settings = new Enmap({name: "settings"}); -client.warnings = new Enmap({name: "warnings"}); -client.blacklist = new Enmap({name: "blacklist"}); -//client.points = new Enmap({name: "points"}); - -const init = async () => { - - const cmdFiles = await readdir("./src/commands/"); - client.logger.log(chalk.greenBright(`Loading ${cmdFiles.length} commands.`)); - cmdFiles.forEach(f => { - if (!f.endsWith(".js")) return; - const response = client.loadCommand(f); - if (response) console.log(response); - }); - - const evtFiles = await readdir("./src/events/"); - client.logger.log(chalk.greenBright(`Loading ${evtFiles.length} events.`)); - evtFiles.forEach(file => { - const eventName = file.split(".")[0]; - client.logger.log(`Loading Event: ${eventName}`); - const event = require(`./src/events/${file}`); - client.on(eventName, event.bind(null, client)); - }); - - client.levelCache = {}; - for (let i = 0; i < client.config.permLevels.length; i++) { - const thisLevel = client.config.permLevels[i]; - client.levelCache[thisLevel.name] = thisLevel.level; - } - if(client.devmode === true) { - client.login(client.config.devtoken); - } - if(client.devmode !== true) { - client.login(client.config.token); - } -}; - -init(); \ No newline at end of file