diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 1d58157..5a8e30a 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,12 +4,8 @@
-
+
-
-
-
-
@@ -100,7 +96,7 @@
-
+
1640148826800
@@ -130,7 +126,14 @@
1640214318896
-
+
+ 1641863346127
+
+
+
+ 1641863346127
+
+
@@ -154,6 +157,7 @@
-
+
+
\ No newline at end of file
diff --git a/bot.js b/bot.js
index 124aeaf..1f32fc4 100644
--- a/bot.js
+++ b/bot.js
@@ -1,5 +1,6 @@
const Discord = require('discord.js');
-
+const spinnies = require('dreidels');
+const gs = require('gradient-string');
const chalk = require('chalk');
const ora = require('ora');
const mongoose = require('mongoose');
@@ -53,7 +54,8 @@ client.misc = {
charsNum: 0,
charsLove: new Discord.Collection(),
monners: {},
- monnersNames: new Map()
+ monnersNames: new Map(),
+ spin: new spinnies()
},
loggers: {},
rl: readline.createInterface({input: process.stdin, output: process.stdout}),
@@ -63,7 +65,9 @@ client.misc = {
dev: false,
logs: 'normal',
lightstartup: false,
- ignorecmds: []
+ ignorecmds: [],
+ gradients: false,
+ spinners: false
},
fullyReady: false
};
@@ -79,7 +83,9 @@ async function init() {
new Tag(['dev', 'd', 'development', 'test'], 'dev', 'toggle'),
new Tag(['logs', 'l', 'loglevel', 'll'], 'logs', 'append'),
new Tag(['lightstart', 'lightstartup', 'ls'], 'lightstartup', 'toggle'),
- new Tag(['i', 'ignore', 'icmd', 'ignorecmd'], 'ignorecmds', 'listAppend')
+ new Tag(['i', 'ignore', 'icmd', 'ignorecmd'], 'ignorecmds', 'listAppend'),
+ new Tag(['g', 'gradient', 'gradients'], 'gradients', 'toggle'),
+ new Tag(['s', 'sp', 'spinners', 'spin'], 'spinners', 'toggle')
]).test(process.argv.slice(2).join(" "));
if (Object.keys(cliargs).length) {
@@ -123,19 +129,31 @@ async function init() {
mloginsp.stop(); mloginsp.clear();
}
- ['commands', 'aliases', 'executables'].forEach(x => client[x] = new Discord.Collection());
- client.responses = {triggers: [], commands: new Discord.Collection()};
-
- ['command', 'event', 'response'].forEach(x => require(`./handle/${x}`)(client));
- if (!client.misc.config.nocli) {require('./handle/console')(client);}
-
client.developers = ["330547934951112705", "673477059904929802"];
- client.utils = {};
- client.utils.logch = async () => {return client.guilds.cache.get('762707532417335296').channels.cache.get('762732961753595915');};
+ client.utils = {};
client.utils.s = num => num === 1 ? '' : 's';
client.utils.as = (num, text) => `${text}${client.utils.s(num)}`;
client.utils.an = (text, caps) => `${caps ? 'A' : 'a'}${['a', 'e', 'i', 'o', 'u'].includes(text.toLowerCase().trim().slice(0, 1)) ? 'n' : ''} ${text}`;
+
+ ['commands', 'aliases', 'executables'].forEach(x => client[x] = new Discord.Collection());
+ client.responses = {triggers: [], commands: new Discord.Collection()};
+ let iters = ['command', 'event', 'response'];
+ if (client.misc.config.spinners) {
+ console.log('');
+ client.misc.cache.spinLog = [];
+ iters.map(i => `Loading ${i.slice(0, 1).toUpperCase()}${i.slice(1)}s`)
+ .map(i => client.misc.config.gradients ? gs.instagram(i) : chalk.blue(i))
+ .forEach((i, ind) => client.misc.cache.spin.add(iters[ind], {text: i}));
+ }
+ for (let i = 0; i < iters.length; i++) {let x = iters[i]; await require(`./handle/${x}`)(client);}
+ if (client.misc.config.spinners) {
+ await require('./util/wait')(1000);
+ client.misc.cache.spinLog.forEach(log => console.log(log));
+ }
+ if (!client.misc.config.nocli) {require('./handle/console')(client);}
+
+ client.utils.logch = async () => {return client.guilds.cache.get('762707532417335296').channels.cache.get('762732961753595915');};
client.guildconfig = {};
client.guildconfig.prefixes = new Map();
diff --git a/handle/command.js b/handle/command.js
index 2cdbced..bec67be 100644
--- a/handle/command.js
+++ b/handle/command.js
@@ -1,35 +1,32 @@
const Discord = require('discord.js');
const fs = require('fs');
const chalk = require('chalk');
-const ora = require('ora');
+const gs = require('gradient-string');
-module.exports = client => {
- let commands = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
- let dirSet = new Map();
- fs.readdirSync('./commands').filter(file => !file.includes('.')).forEach(dir => fs.readdirSync(`./commands/${dir}`).filter(file => file.endsWith('.js')).forEach(x => {commands.push(x); dirSet.set(x, dir)}));
+let iters = ['command', 'event', 'response'];
- //console.log('');
- //let cora = ora(`${chalk.white("Loading commands into client.")} ${chalk.blue("[")}${chalk.blueBright("0")}${chalk.blue("/")}${chalk.blueBright(`${commands.length}`)}${chalk.blue("]")}`).start();
- //let num = 0;
- commands.sort();
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Commands...')}\n`);
- for (let commandf of commands) {
- //num++;
- //cora.text = `${chalk.white("Loading commands into client.")} ${chalk.blue("[")}${chalk.blueBright(`${num}`)}${chalk.blue("/")}${chalk.blueBright(`${commands.length}`)}${chalk.blue("]")}`;
- if (Object.keys(require.cache).includes(require.resolve(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`))) {delete require.cache[require.resolve(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`)];}
- let command = require(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`);
- const addCommand = (command) => {
- client.commands.set(command.name, command);
- if (command.aliases) {command.aliases.forEach(a => client.aliases.set(a, command.name));}
- console.log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Command')} ${chalk.white(command.name)} ${chalk.blueBright('with')} ${chalk.white(command.aliases && command.aliases.length ? command.aliases.length : 0)} ${chalk.blueBright('aliases')}`);
- };
- if (command.commands) {command.commands.forEach(cmd => addCommand(cmd));}
- else {addCommand(command);}
- }
- //cora.stop(); cora.clear();
- //console.log(`${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Commands...')}\n`);
- Array.from(client.commands.values()).forEach(command => {
- //console.log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Command')} ${chalk.white(command.name)} ${chalk.blueBright('with')} ${chalk.white(command.aliases && command.aliases.length ? command.aliases.length : 0)} ${chalk.blueBright('aliases')}`);
+module.exports = async client => {
+ return new Promise(resolve => {
+ let commands = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
+ let dirSet = new Map();
+ fs.readdirSync('./commands').filter(file => !file.includes('.')).forEach(dir => fs.readdirSync(`./commands/${dir}`).filter(file => file.endsWith('.js')).forEach(x => {commands.push(x); dirSet.set(x, dir)}));
+
+ commands.sort();
+ const log = client.misc.config.spinners ? (i) => client.misc.cache.spinLog.push(i) : (i) => console.log(i);
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Commands...')}\n`);
+ for (let commandf of commands) {
+ if (Object.keys(require.cache).includes(require.resolve(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`))) {delete require.cache[require.resolve(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`)];}
+ let command = require(`../commands/${dirSet.has(commandf) ? `${dirSet.get(commandf)}/`: ''}${commandf}`);
+ const addCommand = (command) => {
+ client.commands.set(command.name, command);
+ if (command.aliases) {command.aliases.forEach(a => client.aliases.set(a, command.name));}
+ log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Command')} ${chalk.white(command.name)} ${chalk.blueBright('with')} ${chalk.white(command.aliases && command.aliases.length ? command.aliases.length : 0)} ${chalk.blueBright('aliases')}`);
+ };
+ if (command.commands) {command.commands.forEach(cmd => addCommand(cmd));}
+ else {addCommand(command);}
+ }
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Commands')}`);
+ client.misc.cache.spin.success('command', {text: iters.map(i => `Loaded ${i.slice(0, 1).toUpperCase()}${i.slice(1)}s`).map(i => client.misc.config.gradients ? gs.instagram(i) : chalk.blue(i))[0]});
+ resolve(0);
});
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Commands')}`);
};
\ No newline at end of file
diff --git a/handle/event.js b/handle/event.js
index aeea4ce..2629d85 100644
--- a/handle/event.js
+++ b/handle/event.js
@@ -1,17 +1,25 @@
const fs = require('fs');
const moment = require('moment');
const chalk = require('chalk');
+const gs = require('gradient-string');
-module.exports = client => {
- let eventFilter = fs.readdirSync('./events/').filter(x => x.endsWith('.js'));
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Events...')}\n`);
- for (let file of eventFilter) {
- let evtName = file.split('.')[0];
- if (Object.keys(require.cache).includes(require.resolve('../events/' + file))) {delete require.cache[require.resolve('../events/' + file)];}
- let evt = require('../events/' + file);
- client.removeAllListeners(evtName);
- client.on(evtName, evt.bind(null, client));
- console.log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Event')} ${chalk.white(evtName)}`);
- }
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Events')}`);
+let iters = ['command', 'event', 'response'];
+
+module.exports = async client => {
+ return new Promise(resolve => {
+ let eventFilter = fs.readdirSync('./events/').filter(x => x.endsWith('.js'));
+ const log = client.misc.config.spinners ? (i) => client.misc.cache.spinLog.push(i) : (i) => console.log(i);
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Events...')}\n`);
+ for (let file of eventFilter) {
+ let evtName = file.split('.')[0];
+ if (Object.keys(require.cache).includes(require.resolve('../events/' + file))) {delete require.cache[require.resolve('../events/' + file)];}
+ let evt = require('../events/' + file);
+ client.removeAllListeners(evtName);
+ client.on(evtName, evt.bind(null, client));
+ log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Event')} ${chalk.white(evtName)}`);
+ }
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Events')}`);
+ client.misc.cache.spin.success('event', {text: iters.map(i => `Loaded ${i.slice(0, 1).toUpperCase()}${i.slice(1)}s`).map(i => client.misc.config.gradients ? gs.instagram(i) : chalk.blue(i))[1]});
+ resolve(0);
+ });
};
\ No newline at end of file
diff --git a/handle/response.js b/handle/response.js
index a8af7d7..64e6bf5 100644
--- a/handle/response.js
+++ b/handle/response.js
@@ -1,16 +1,24 @@
const Discord = require('discord.js');
const fs = require('fs');
const chalk = require('chalk');
+const gs = require('gradient-string');
+
+let iters = ['command', 'event', 'response'];
module.exports = client => {
- var responses = fs.readdirSync('./responses').filter(file => file.endsWith('.js'));
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Responses...')}\n`);
- for (let responsef of responses) {
- if (Object.keys(require.cache).includes(require.resolve(`../responses/${responsef}`))) {delete require.cache[require.resolve(`../responses/${responsef}`)];}
- var response = require(`../responses/${responsef}`);
- client.responses.triggers.push([response.name, response.condition]);
- client.responses.commands.set(response.name, response);
- console.log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Response')} ${chalk.white(response.name)}`);
- }
- console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Responses')}`);
+ return new Promise(resolve => {
+ var responses = fs.readdirSync('./responses').filter(file => file.endsWith('.js'));
+ const log = client.misc.config.spinners ? (i) => client.misc.cache.spinLog.push(i) : (i) => console.log(i);
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Getting Responses...')}\n`);
+ for (let responsef of responses) {
+ if (Object.keys(require.cache).includes(require.resolve(`../responses/${responsef}`))) {delete require.cache[require.resolve(`../responses/${responsef}`)];}
+ var response = require(`../responses/${responsef}`);
+ client.responses.triggers.push([response.name, response.condition]);
+ client.responses.commands.set(response.name, response);
+ log(`${chalk.gray('[LOAD]')} >> ${chalk.blueBright('Loaded Response')} ${chalk.white(response.name)}`);
+ }
+ log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Responses')}`);
+ client.misc.cache.spin.success('response', {text: iters.map(i => `Loaded ${i.slice(0, 1).toUpperCase()}${i.slice(1)}s`).map(i => client.misc.config.gradients ? gs.instagram(i) : chalk.blue(i))[2]});
+ resolve(0);
+ });
};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 3ed6828..0425e68 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"dblapi.js": "^2.4.1",
"discord-api-types": "^0.22.0",
"discord.js": "^13.5.0",
+ "dreidels": "^0.5.2",
"fuzzysort": "^1.1.4",
"gradient-string": "^2.0.0",
"lastfm": "^0.9.0",
@@ -453,6 +454,11 @@
"color-support": "bin.js"
}
},
+ "node_modules/colorette": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -620,6 +626,42 @@
}
}
},
+ "node_modules/dreidels": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/dreidels/-/dreidels-0.5.2.tgz",
+ "integrity": "sha512-K8mKNQAKBdCAzDV2lPwG3xbJOZ4ETB4l2NqZmjo1viN0kThgsNXNHIsE1pq0kkysJQbguKS8WM4DKPA1ZfDxbA==",
+ "dependencies": {
+ "cli-cursor": "^3.0.0",
+ "colorette": "^1.2.1",
+ "is-observable": "^2.0.0",
+ "is-promise": "^2.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-ansi": "^5.2.0",
+ "wordwrapjs": "^4.0.0"
+ },
+ "optionalDependencies": {
+ "cli-spinners": "^2.2.0"
+ }
+ },
+ "node_modules/dreidels/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dreidels/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -793,6 +835,22 @@
"node": ">=8"
}
},
+ "node_modules/is-observable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -1268,6 +1326,14 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
+ "node_modules/reduce-flatten": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
+ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
@@ -1533,6 +1599,14 @@
"node": ">=4.2.0"
}
},
+ "node_modules/typical": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
+ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/underscore": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
@@ -1573,6 +1647,18 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
+ "node_modules/wordwrapjs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
+ "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
+ "dependencies": {
+ "reduce-flatten": "^2.0.0",
+ "typical": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -1945,6 +2031,11 @@
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
},
+ "colorette": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2074,6 +2165,36 @@
}
}
},
+ "dreidels": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/dreidels/-/dreidels-0.5.2.tgz",
+ "integrity": "sha512-K8mKNQAKBdCAzDV2lPwG3xbJOZ4ETB4l2NqZmjo1viN0kThgsNXNHIsE1pq0kkysJQbguKS8WM4DKPA1ZfDxbA==",
+ "requires": {
+ "cli-cursor": "^3.0.0",
+ "cli-spinners": "^2.2.0",
+ "colorette": "^1.2.1",
+ "is-observable": "^2.0.0",
+ "is-promise": "^2.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-ansi": "^5.2.0",
+ "wordwrapjs": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -2208,6 +2329,16 @@
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
},
+ "is-observable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw=="
+ },
+ "is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -2552,6 +2683,11 @@
}
}
},
+ "reduce-flatten": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
+ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w=="
+ },
"regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
@@ -2748,6 +2884,11 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
"integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
},
+ "typical": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
+ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg=="
+ },
"underscore": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
@@ -2788,6 +2929,15 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
+ "wordwrapjs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
+ "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
+ "requires": {
+ "reduce-flatten": "^2.0.0",
+ "typical": "^5.2.0"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 33e0c2b..ce6737c 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"dblapi.js": "^2.4.1",
"discord-api-types": "^0.22.0",
"discord.js": "^13.5.0",
+ "dreidels": "^0.5.2",
"fuzzysort": "^1.1.4",
"gradient-string": "^2.0.0",
"lastfm": "^0.9.0",