From 187835991ec7537f5f14609c1085e811300813b5 Mon Sep 17 00:00:00 2001 From: mudkipscience Date: Sat, 4 Apr 2020 01:55:35 +1100 Subject: [PATCH] idk --- index.js | 76 +++-------- modules/commands.js | 28 ++++ modules/dbfix.js | 0 modules/events.js | 21 +++ modules/functions.js | 6 +- modules/mongoose.js | 33 +++++ modules/{botlists.js => webhooks.js} | 0 package-lock.json | 192 ++++++++++++++++++++++++++- package.json | 1 + 9 files changed, 296 insertions(+), 61 deletions(-) create mode 100644 modules/commands.js create mode 100644 modules/dbfix.js create mode 100644 modules/events.js create mode 100644 modules/mongoose.js rename modules/{botlists.js => webhooks.js} (100%) diff --git a/index.js b/index.js index 475c693..3827160 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,6 @@ const isDocker = require('is-docker') const Discord = require('discord.js') const client = new Discord.Client({ disabledEvents: ['TYPING_START'] }) -// Logger client.logger = require('tracer').colorConsole({ format: [ '{{timestamp}} | {{title}} | {{file}} | {{message}}', @@ -39,12 +38,23 @@ if (fs.existsSync('./config.js') === false) { process.exit() } +client.levelCache = {} +client.commands = new Discord.Collection() +client.cooldown = new Discord.Collection() +client.aliases = new Discord.Collection() + client.config = require('./config') +client.mongoose = require('./modules/mongoose') require('./modules/functions')(client) require('./modules/music')(client) -require('./modules/botlists')(client) +require('./modules/commands')(client) +require('./modules/events')(client) + +for (let i = 0; i < client.config.permLevels.length; i++) { + const thisLevel = client.config.permLevels[i] + client.levelCache[thisLevel.name] = thisLevel.level +} -// Logs into Discord as WoomyDev if a docker container is not detected. Delete this if self-hosting. if (isDocker() === true) { client.devmode = true client.logger.warn('Running in development mode.') @@ -52,59 +62,11 @@ if (isDocker() === true) { client.devmode = false } -client.levelCache = {} -client.commands = new Discord.Collection() -client.cooldown = new Discord.Collection() -client.aliases = new Discord.Collection() +console.log(client.mongoose) +client.mongoose.init() -// Initialization function -const init = async () => { - // Command handler - fs.readdir('./commands', (err, files) => { - if (err) { - client.logger.fatal('Failed to get files in commands directory: ' + err) - process.exit() - } - client.logger.info(`Loading ${files.length} commands.`) - files.forEach(file => { - if (!file.endsWith('.js')) { - return - } - const response = client.loadCommand(file) - if (response) { - client.logger.error(response) - } - }) - }) - - // Event handler - fs.readdir('./events', (err, files) => { - if (err) { - client.logger.fatal('Failed to get files in events directory: ' + err) - process.exit() - } - client.logger.info(`Loading ${files.length} events.`) - files.forEach(file => { - if (!file.endsWith('.js')) { - return - } - const event = require(`./events/${file}`) - client.on(file.substr(0, file.length - 3), event.bind(null, client)) - }) - }) - - // Cache client permissions - for (let i = 0; i < client.config.permLevels.length; i++) { - const thisLevel = client.config.permLevels[i] - client.levelCache[thisLevel.name] = thisLevel.level - } - - // Log into Discord - if (client.devmode !== true) { - client.login(client.config.token) - } else { - client.login(client.config.token_dev) - } +if (client.devmode !== true) { + client.login(client.config.token) +} else { + client.login(client.config.token_dev) } - -init() diff --git a/modules/commands.js b/modules/commands.js new file mode 100644 index 0000000..2646a7d --- /dev/null +++ b/modules/commands.js @@ -0,0 +1,28 @@ +const fs = require('fs') +module.exports = client => { + fs.readdir('./commands', (err, files) => { + if (err) { + client.logger.fatal('Failed to get files in commands directory: ' + err) + process.exit() + } + client.logger.info(`Loading ${files.length} commands.`) + files.forEach(file => { + if (!file.endsWith('.js')) { + return + } + try { + const props = require(`../commands/${file}`) + if (props.init) { + props.init(client) + } + client.commands.set(props.help.name, props) + client.cooldown.set(props.help.name, new Map()) + props.conf.aliases.forEach(alias => { + client.aliases.set(alias, props.help.name) + }) + } catch (err) { + client.logger.error(`Failed to load ${file}: ${err}`) + } + }) + }) +} diff --git a/modules/dbfix.js b/modules/dbfix.js new file mode 100644 index 0000000..e69de29 diff --git a/modules/events.js b/modules/events.js new file mode 100644 index 0000000..dbb7229 --- /dev/null +++ b/modules/events.js @@ -0,0 +1,21 @@ +const fs = require('fs') +module.exports = client => { + fs.readdir('./events', (err, files) => { + if (err) { + client.logger.fatal('Failed to get files in events directory: ' + err) + process.exit() + } + client.logger.info(`Loading ${files.length} events.`) + files.forEach(file => { + if (!file.endsWith('.js')) { + return + } + try { + const event = require(`../events/${file}`) + client.on(file.substr(0, file.length - 3), event.bind(null, client)) + } catch (err) { + client.logger.error(`Failed to load ${file}: ${err}`) + } + }) + }) +} diff --git a/modules/functions.js b/modules/functions.js index 83229d1..a0725fc 100644 --- a/modules/functions.js +++ b/modules/functions.js @@ -104,8 +104,10 @@ module.exports = client => { return Math.round((Math.random() * (max - min)) + min) } + // Get random array object + // eslint-disable-next-line no-extend-native Object.defineProperty(Array.prototype, 'random', { - value: function() { + value: function () { return this[Math.floor(Math.random() * this.length)] } }) @@ -172,7 +174,7 @@ module.exports = client => { return role } - // Both of these functions catch errors and log them + // Both of these functions catch errors and log them (maybe we could use sentry?) process.on('uncaughtException', (err) => { const errorMsg = err.stack.replace(new RegExp(`${__dirname}/`, 'g'), './') client.logger.fatal(`Uncaught Exception: ${errorMsg}`) diff --git a/modules/mongoose.js b/modules/mongoose.js new file mode 100644 index 0000000..3dd45d5 --- /dev/null +++ b/modules/mongoose.js @@ -0,0 +1,33 @@ +const mongoose = require('mongoose') + +// doesnt work + +module.exports = { + init: () => { + const dbOps = { + useNewUrlParser: true, + autoIndex: false, + reconnectTries: Number.MAX_VALUE, + reconnectInterval: 500, + poolSize: 5, + connectTimeoutMS: 10000, + family: 4 + } + + mongoose.connect(client.config.mongoDB, dbOps) + mongoose.set('useFindAndModify', false) + mongoose.Promise = global.Promise + + mongoose.connection.on('connected', () => { + client.logger.info('Database connection established.') + }) + + mongoose.connection.on('err', err => { + client.logger.error(`Database connection error:\n ${err.stack}`) + }) + + mongoose.connection.on('disconnected', () => { + client.logger.info('Disconected from database.') + }) + } +} diff --git a/modules/botlists.js b/modules/webhooks.js similarity index 100% rename from modules/botlists.js rename to modules/webhooks.js diff --git a/package-lock.json b/package-lock.json index 3def006..de8afb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -445,6 +445,15 @@ } } }, + "bl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -472,6 +481,11 @@ "concat-map": "0.0.1" } }, + "bson": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", + "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" + }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -761,6 +775,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, "discord.js": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.1.1.tgz", @@ -1876,8 +1895,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -2051,6 +2069,11 @@ } } }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2121,6 +2144,12 @@ "semver": "^6.0.0" } }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "mime-db": { "version": "1.43.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", @@ -2171,6 +2200,79 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, + "mongodb": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.5.tgz", + "integrity": "sha512-GCjDxR3UOltDq00Zcpzql6dQo1sVry60OXJY3TDmFc2SWFY6c8Gn1Ardidc5jDirvJrx2GC3knGOImKphbSL3A==", + "requires": { + "bl": "^2.2.0", + "bson": "^1.1.1", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.9.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.7.tgz", + "integrity": "sha512-WJOBh9WMvivqBK8my9HFtSzSySKdUxJPNGAwswEakAasWUcPXJl3yHMtZ4ngGnKbwTT9KnAr75xamlt/PouR9w==", + "requires": { + "bson": "~1.1.1", + "kareem": "2.3.1", + "mongodb": "3.5.5", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.6.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", + "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2465,6 +2567,11 @@ "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.1.tgz", "integrity": "sha512-R3EbKwJiYlTvGwcG1DpUt+06DsxOGS5W4AMEHT7oVOjG93MjpdhGX1whHyjnqknylLMupKAsKMEXcTNRbPe6Vw==" }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -2561,6 +2668,25 @@ } } }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -2645,6 +2771,27 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + }, + "dependencies": { + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "resolve": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", @@ -2704,6 +2851,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -2737,6 +2893,11 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -2785,6 +2946,11 @@ } } }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "sntp": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", @@ -2798,6 +2964,15 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -2933,6 +3108,14 @@ "es-abstract": "^1.17.5" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "stringstream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", @@ -3148,6 +3331,11 @@ } } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", diff --git a/package.json b/package.json index 1a99456..6cbb2cd 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "hastebin-gen": "^2.0.5", "is-docker": "^2.0.0", "moment": "^2.24.0", + "mongoose": "^5.9.7", "node-fetch": "^2.6.0", "prism-media": "^1.2.1", "tracer": "^1.0.2",