master
Lio 3 years ago
parent 9ad8081971
commit 304d0ccb96
  1. 0
      .gitattributes
  2. 0
      .gitignore
  3. 0
      .vscode/Snippets.code-snippets
  4. 3
      .vscode/settings.json
  5. 21
      DiscordEvents/ShortlinkMessage.js
  6. 21
      DiscordEvents/SourceFynnderMessage.js
  7. 33
      DiscordEvents/guildCreate.js
  8. 24
      DiscordEvents/message.js
  9. 0
      DiscordEvents/messageReactionAdd.js
  10. 9
      DiscordEvents/ready.js
  11. 16
      DiscordEvents/shardReady.js
  12. 0
      DiscordEvents/shardReconnecting.js
  13. 0
      DiscordEvents/shardResume.js
  14. 90
      DiscordModules/Developers/eval.js
  15. 0
      DiscordModules/Developers/reload.js
  16. 21
      DiscordModules/Developers/setup.js
  17. 18
      DiscordModules/Developers/stop.js
  18. 104
      DiscordModules/General/help.js
  19. 27
      DiscordModules/General/info.js
  20. 0
      DiscordModules/General/ping.js
  21. 58
      DiscordModules/Images/e621.js
  22. 62
      DiscordModules/Settings/settings.js
  23. 0
      LICENSE
  24. 0
      README.md
  25. 15
      events/guildCreate.js
  26. 6
      events/ready.js
  27. 12
      events/shardReady.js
  28. 14
      index.js
  29. BIN
      json.sqlite
  30. 67
      modules/Developers/eval.js
  31. 85
      modules/General/botinfo.js
  32. 77
      modules/General/help.js
  33. 414
      package-lock.json
  34. 9
      package.json
  35. 0
      server/server.js
  36. 114
      src/client/Client.js
  37. 0
      src/index.js
  38. 0
      src/structures/Command.js
  39. 11
      utils/index.js
  40. 55
      utils/shortlinks.js
  41. 20
      utils/src/calc.js
  42. 112
      utils/src/database.js
  43. 41
      utils/src/emotes.js
  44. 0
      utils/src/format.js
  45. 49
      utils/src/logs.js
  46. 54
      utils/src/shortlinks.js
  47. 56
      utils/src/sourceFynnder.js
  48. 6
      utils/src/statuses.js
  49. 0
      yarn.lock

@ -0,0 +1,3 @@
{
"editor.lineNumbers": "off"
}

@ -0,0 +1,21 @@
const { log, db } = require("../utils/index");
const { ShortLinks } = require("../utils");
const { table } = require("quick.db");
const Servers = new table("servers");
const Users = new table("users");
const Backend = new table("backend");
module.exports = {
name: "message",
run: async (client, Message) => {
if (Message.author.bot) return;
let Server = Servers.get(Message.guild.id);
let Enabled;
if (Server === null) {
Enabled = db.defaults.server.Shortlinks;
} else {
Enabled = Server.Shortlinks;
}
ShortLinks(Enabled, Message);
}
};

@ -0,0 +1,21 @@
const { log, db } = require("../utils/index");
const { SourceFynnder } = require("../utils");
const { table } = require("quick.db");
const Servers = new table("servers");
const Users = new table("users");
const Backend = new table("backend");
module.exports = {
name: "message",
run: async (client, Message) => {
if (Message.author.bot) return;
let Server = Servers.get(Message.guild.id);
let Enabled;
if (Server === null) {
Enabled = db.defaults.server.SourceFynnder;
} else {
Enabled = Server.SourceFynnder;
}
SourceFynnder(Enabled, Message);
}
};

@ -0,0 +1,33 @@
const { logChannel } = require("../config");
const util = require("../utils");
module.exports = {
name: "guildCreate",
run: async (client, guild) => {
const logs = client.channels.get(logChannel);
const members = await guild.members.fetch();
guild.utils = util;
guild.guild = guild;
const total = guild.members.size;
const users = guild.members.filter(m => !m.user.bot).size;
const bots = guild.members.filter(m => m.user.bot).size;
if (logs)
logs.send(
`Added to ${guild.name} (owned by: ${guild.owner.user.tag ||
"uncached"} ${guild.ownerID}) on shard ${client.options.shards[
client.options.shards.length - 1
] + 1}/${client.options.shards.length}\nServer has ${parseInt(
total
).toLocaleString()} member${total > 1 ? "s" : ""}: ${parseInt(
users
).toLocaleString()} user${users > 1 ? "s" : ""}, ${parseInt(
bots
).toLocaleString()} bot${bots > 1 ? "s" : ""}, in region ${
guild.region
}`
);
await util.db.setupServer(guild);
}
};

@ -1,6 +1,11 @@
const { Collection } = require("discord.js");
const ShortLinks = require("../utils/shortlinks");
let enabled = true;
const { ShortLinks, SourceFynnder } = require("../utils");
let ShortLinksEnabled = true;
let SourceFynnderEnabled = true;
const { table } = require("quick.db");
const Servers = new table("servers");
const Users = new table("users");
const Backend = new table("backend");
module.exports = {
name: "message",
run: async (client, msg) => {
@ -8,9 +13,18 @@ module.exports = {
msg.content.toLowerCase().startsWith(p)
);
if (!prefix && enabled) return ShortLinks(enabled, msg);
if (!prefix) return;
if (msg.author.bot) return;
if (msg.author.id !== "318044130796109825") return;
let Server = Servers.get(msg.guild.id);
let enabled;
if (Server === null) {
enabled = require("../utils").db.defaults.server;
} else {
enabled = Server;
}
ShortLinks(enabled.Shortlinks, msg);
if (!prefix) return;
const args = msg.content.slice(prefix.length).split(/ +/g);
const command = args.shift().toLowerCase();
const cmd = client.commands.find(
@ -28,6 +42,8 @@ module.exports = {
channel: msg.channel,
author: msg.author,
member: msg.member,
db: { users: Users, servers: Servers, backend: Backend },
utils: require("../utils"),
isDeveloper: client.config.developers.find(id => msg.author.id == id)
};
if (!cmd) return;

@ -0,0 +1,9 @@
const { log } = require("../utils/index");
module.exports = {
name: "ready",
run: async client => {
log.hasStarted();
client.user.setActivity(`@${client.user.username} help to get started`);
}
};

@ -0,0 +1,16 @@
const { logChannel } = require("../config");
const util = require("../utils");
module.exports = {
name: "shardReady",
run: async client => {
const logs = client.channels.get(logChannel);
const message = `Shard ${client.options.shards[
client.options.shards.length - 1
] + 1}/${client.options.shards.length} is ready`;
await util.log.shardReady(message);
await util.log.shardSpinnerStarted(message);
// if (logs !== undefined) logs.send(message);
}
};

@ -0,0 +1,90 @@
const Command = require("../../src/structures/Command");
const { table } = require("quick.db");
const Servers = new table("servers");
const Users = new table("users");
const clean = text => {
if (typeof text == "string")
return text
.replace(/`/g, "`" + String.fromCharCode(8203))
.replace(/@/g, "@" + String.fromCharCode(8203));
else return text;
};
module.exports = class Eval extends Command {
constructor() {
super({
name: "eval",
description: "Run JavaScript code directly from the process.",
aliases: ["ev", "e"],
module: "Developers",
cooldown: 0,
guildOnly: false,
developerOnly: true
});
}
async command(ctx) {
if (!ctx.args.length) return;
const client = ctx.client;
let code = ctx.args.join(" ");
let silent = false;
if (code.endsWith("-s")) (code = code.split("-s")[0]), (silent = true);
if (code.endsWith("--silent"))
(code = code.split("--silent")[0]), (silent = true);
try {
let evaled = await eval(code);
if (typeof evaled != "string") evaled = require("util").inspect(evaled);
evaled.replace(
new RegExp(client.token.replace(/\./g, "\\.", "g")),
"uwu"
);
if (!silent) {
ctx
.send(`\`\`\`js\n${clean(evaled)}\n\`\`\``)
.then(async m => {
await m.react("๐Ÿ“ฅ");
await m.react("๐Ÿ—‘");
})
.catch(err => {
ctx
.send(
`\`Content is over 2,000 characters: react to upload to Hastebin\``
)
.then(async m => {
client.lastEval = clean(evaled);
await m.react("๐Ÿ“ฅ");
await m.react("๐Ÿ—‘");
});
});
}
} catch (error) {
ctx
.send(`\`\`\`js\n${clean(error)}\n\`\`\``)
.then(async m => {
await m.react("๐Ÿ“ฅ");
await m.react("๐Ÿ—‘");
})
.catch(err => {
ctx
.send(
`\`Content is over 2,000 characters: react to upload to Hastebin\``
)
.then(async m => {
client.lastEval = clean(error);
await m.react("๐Ÿ“ฅ");
await m.react("๐Ÿ—‘");
});
});
}
}
};

@ -0,0 +1,21 @@
const Command = require("../../src/structures/Command");
module.exports = class Setup extends Command {
constructor() {
super({
name: "setup",
description: "x",
aliases: ["s"],
module: "Developers",
cooldown: 0,
guildOnly: false,
developerOnly: true
});
}
async command(ctx) {
let x = await ctx.utils.db.prefix
.remove(ctx)
.catch(err => console.error(err));
//' console.log(x);
}
};

@ -0,0 +1,18 @@
const Command = require("../../src/structures/Command");
module.exports = class Stop extends Command {
constructor() {
super({
name: "stop",
description: "Stops the bot",
aliases: [],
module: "Developers",
cooldown: 0,
guildOnly: false,
developerOnly: true
});
}
async command(ctx) {
process.exit();
}
};

@ -0,0 +1,104 @@
const Command = require("../../src/structures/Command");
const { MessageEmbed } = require("discord.js");
module.exports = class Help extends Command {
constructor() {
super({
name: "help",
description:
"View a list of available commands, or view information on a specific command.",
aliases: ["h"],
module: "General",
cooldown: 0,
guildOnly: false,
developerOnly: false
});
}
async command(ctx) {
if (!ctx.args.length) {
const commands = [
[
"General",
ctx.client.commands
.filter(command => command.module == "General")
.map(command => `**${command.name}** - ${command.description}`)
.join("\n")
]
];
if (ctx.isDeveloper)
commands.push([
"Developers",
ctx.client.commands
.filter(command => command.module == "Developers")
.map(command => command.name)
.join(", ")
]);
return ctx.send({
embed: {
fields: commands.map(group => {
return new Object({
name: group[0],
value: group[1]
});
}),
color: 0xff873f
}
});
} else {
const command = ctx.client.commands.find(
c =>
c.name == ctx.args[0].toLowerCase() ||
(c.aliases && c.aliases.includes(ctx.args[0].toLowerCase()))
);
let fields = [
{
name: "Module",
value: command.module,
inline: true
},
{
name: "Aliases",
value:
command.aliases.length == 0
? "No aliases"
: command.aliases.join(", "),
inline: true
},
{
name: "Cooldown",
value: command.cooldown == 0 ? "No cooldown" : `${command.cooldown}s`,
inline: true
},
{
name: "Server only?",
value: command.guildOnly ? "Yes" : "No",
inline: true
},
{
name: "Developers only?",
value: command.developerOnly ? "Yes" : "No",
inline: true
}
];
if (!command)
return ctx.send(
`That command couldn't be found. See the \`help\` command for valid commands.`
);
let embed = new MessageEmbed()
.setTitle(command.name)
.setDescription(command.description)
.setColor(0xff873f);
fields.forEach(i => {
embed.addField(i.name, i.value, i.inline);
});
return ctx.send(embed);
}
}
};

@ -1,25 +1,7 @@
const Command = require("../../src/structures/Command");
const { MessageEmbed } = require("discord.js");
const { developers, contributors } = require("../../config");
const { bold } = require("../../utils/format");
const { developers, contributors, source } = require("../../config");
const { version: DiscordVersion } = require("discord.js");
const usage = require("usage");
const options = {
keepHistory: true
};
const format = sec => {
const pad = s => {
return (s < 10 ? "0" : "") + s;
};
let hours = Math.floor(sec / (60 * 60));
let minutes = Math.floor((sec % (60 * 60)) / 60);
let seconds = Math.floor(sec % 60);
return hours + ":" + pad(minutes) + ":" + pad(seconds);
};
module.exports = class Info extends Command {
constructor() {
@ -35,24 +17,25 @@ module.exports = class Info extends Command {
}
async command(ctx) {
let result;
const contribs = [];
for (const { id, nick, reason } of contributors) {
const user = await ctx.client.users.fetch(id);
contribs.push(`${user} (${nick}) - ${reason}`);
}
const Contributors = contribs.join("\n");
let CreditEmbed = new MessageEmbed()
.setTitle(`Thaldrin, a Random Image and Utility Bot`)
.setDescription(
`Made by ${bold(
`Made by ${ctx.utils.format.bold(
ctx.client.users.find(user => user.id === "318044130796109825").tag
)}`
)
.addField("Language", "Javascript", true)
.addField("Library", `d.js - v${DiscordVersion}`, true)
.addField("Node", `${process.version}`, true)
.addField("Contributors", Contributors);
.addField("Contributors", Contributors)
.addField("Source", `[gitdab.com/r/thaldrin](${source})`);
ctx.send(CreditEmbed);
}

@ -0,0 +1,58 @@
const Command = require("../../src/structures/Command");
const yiff = require("yiff");
const { MessageEmbed } = require("discord.js");
let Icon =
"https://cdn6.aptoide.com/imgs/0/7/f/07f23fe390d6d20f47839932ea23c678_icon.png?w=240";
module.exports = class E621 extends Command {
constructor() {
super({
name: "e621",
description: "Get Images from e621",
aliases: ["e6"],
module: "Images",
cooldown: 5,
guildOnly: false,
developerOnly: false
});
}
async command(ctx) {
let Embed = new MessageEmbed().setColor("RED");
if (!ctx.channel.nsfw) {
Embed.setTitle("NSFW").setDescription(
`This channel is not marked as NSFW, please mark it as such and rerun this command.`
);
return ctx.send(Embed);
}
if (ctx.args < 1) {
Embed.setTitle("Search Terms").setDescription(
"I need more tags than that to search for an Image."
);
return ctx.send(Embed);
}
const Server = await ctx.db.servers.get(ctx.guild.id);
let Settings;
if (Server === null) {
Settings = ctx.utils.db.defaults.server;
} else {
Settings = Server;
}
let message = await ctx.send(`Searching...`);
let req;
let Message;
await yiff.e621.CubFilter(ctx.args.join(" ")).then(E => (req = E));
if (Settings.embeds) {
Message = new MessageEmbed().setImage(req.image);
message.delete();
} else {
Message = `${req.image}`;
message.delete();
}
ctx.send(Message);
}
};

@ -0,0 +1,62 @@
const Command = require("../../src/structures/Command");
module.exports = class Settings extends Command {
constructor() {
super({
name: "settings",
description: "Show the Settings of this Server",
aliases: ["config"],
module: "Settings",
cooldown: 5,
guildOnly: true,
developerOnly: false
});
}
async command(ctx) {
const SettingsEmbed = new ctx.utils.discord.MessageEmbed();
const Server = await ctx.db.servers.get(ctx.guild.id);
// console.log(Server);
if (Server !== null) {
SettingsEmbed.setTitle(`Settings for ${ctx.guild.name}`)
.addField("Prefixes", Server.prefix.join(", "), false)
.addField(
"SourceFynnder",
Server.SourceFynnder
? ctx.utils.emotes.settings.on
: ctx.utils.emotes.settings.off,
true
)
.addField(
"Shortlinks",
Server.Shortlinks
? ctx.utils.emotes.settings.on
: ctx.utils.emotes.settings.off,
true
)
.addBlankField(true)
.addField(
"Image Embeds",
Server.embeds
? ctx.utils.emotes.settings.on
: ctx.utils.emotes.settings.off,
true
)
.addField(
"Image Text",
Server.rp_text
? ctx.utils.emotes.settings.on
: ctx.utils.emotes.settings.off,
true
)
.addField("Default Yiff", Server.default_yiff, true);
ctx.send(SettingsEmbed);
} else {
SettingsEmbed.setTitle(
`No Settings for ${ctx.guild.name}`
).setDescription(
`You shouldn't see this.\n Your Server might not have been set up Properly when you invited me.\n\nPlease [join my support server](https://discord.gg/xNAcF8m) and notify my Developer`
);
ctx.send(SettingsEmbed);
}
}
};

@ -1,15 +0,0 @@
const { logChannel } = require('../config');
module.exports = {
name: 'guildCreate',
run: async (client, guild) => {
const logs = client.channels.get(logChannel);
const members = await guild.members.fetch();
const total = guild.members.size;
const users = guild.members.filter((m)=>!m.user.bot).size;
const bots = guild.members.filter((m)=>m.user.bot).size;
if (logs) logs.send(`Added to ${guild.name} (owned by: ${guild.owner.user.tag || 'uncached'} ${guild.ownerID}) on shard ${client.options.shards[client.options.shards.length - 1] + 1}/${client.options.shards.length}\nServer has ${parseInt(total).toLocaleString()} member${total > 1 ? 's' : ''}: ${parseInt(users).toLocaleString()} user${users > 1 ? 's' : ''}, ${parseInt(bots).toLocaleString()} bot${bots > 1 ? 's' : ''}, in region ${guild.region}`);
}
}

@ -1,6 +0,0 @@
module.exports = {
name: 'ready',
run: async (client) => {
client.user.setActivity(`@Musik help to get started`);
}
}

@ -1,12 +0,0 @@
const { logChannel } = require('../config');
module.exports = {
name: 'shardReady',
run: async (client) => {
const logs = client.channels.get(logChannel);
const message = `Shard ${client.options.shards[client.options.shards.length - 1] + 1}/${client.options.shards.length} changed status to ready`;
if (logs !== undefined) logs.send(message);
console.log(message);
}
}

@ -1,8 +1,10 @@
const Client = require('./src/index');
const config = require('./config');
const Client = require("./src/index");
const config = require("./config");
const { log } = require("./utils/index");
const { util } = require('discord.js');
const { util } = require("discord.js");
util.fetchRecommendedShards(config.token).then((count) => {
new Client(config, count);
});
util.fetchRecommendedShards(config.token).then(async count => {
await log.starting();
new Client(config, count);
});

Binary file not shown.

@ -1,67 +0,0 @@
const Command = require('../../src/structures/Command');
const clean = text => {
if (typeof (text) == 'string')
return text.replace(/`/g, "`" + String.fromCharCode(8203)).replace(/@/g, "@" + String.fromCharCode(8203));
else return text;
}
module.exports = class Eval extends Command {
constructor() {
super({
name: 'eval',
description: 'Run JavaScript code directly from the process.',
aliases: ['ev', 'e'],
module: 'Developers',
cooldown: 0,
guildOnly: false,
developerOnly: true
});
}
async command(ctx) {
if (!ctx.args.length) return;
const client = ctx.client;
let code = ctx.args.join(' ');
let silent = false;
if (code.endsWith('-s')) code = code.split('-s')[0], silent = true;
if (code.endsWith('--silent')) code = code.split('--silent')[0], silent = true;
try {
let evaled = await eval(code);
if (typeof (evaled) != 'string') evaled = require('util').inspect(evaled);
evaled.replace(new RegExp(client.token.replace(/\./g, '\\.', 'g')), 'uwu');
if (!silent) {
ctx.send(`\`\`\`js\n${clean(evaled)}\n\`\`\``).then(async (m) => {
await m.react('๐Ÿ“ฅ');
await m.react('๐Ÿ—‘');
}).catch((err) => {
ctx.send(`\`Content is over 2,000 characters: react to upload to Hastebin\``).then(async (m) => {
client.lastEval = clean(evaled);
await m.react('๐Ÿ“ฅ');
await m.react('๐Ÿ—‘');
});
});
}
} catch(error) {
ctx.send(`\`\`\`js\n${clean(error)}\n\`\`\``).then(async (m) => {
await m.react('๐Ÿ“ฅ');
await m.react('๐Ÿ—‘');
}).catch((err) => {
ctx.send(`\`Content is over 2,000 characters: react to upload to Hastebin\``).then(async (m) => {
client.lastEval = clean(error);
await m.react('๐Ÿ“ฅ');
await m.react('๐Ÿ—‘');
});
});
}
}
}

@ -1,85 +0,0 @@
const Command = require("../../src/structures/Command");
// {
// name: 'Voice Connections',
// value: parseInt(ctx.client.voice.connections.size).toLocaleString(),
// inline: true
// },
module.exports = class Botinfo extends Command {
constructor() {
super({
name: "botinfo",
description:
"Bot information and live statistics, such as memory usage and servers.",
// aliases: ['stats', 'statistics', 'about'],
module: "General",
cooldown: 0,
guildOnly: false,
developerOnly: false
});
}
async command(ctx) {
usage.lookup(process.pid, options, (err, result) => {
if (err)
return ctx.send(`There was an error measuring CPU usage.\n\`${err}\``);
return ctx.send({
embed: {
title: `Musik`,
description: `Using discord.js **${
require("discord.js").version
}**, node.js **${process.version.replace(
"v",
""
)}** and Linux **${require("os").release()}**.\nYou are on shard ${ctx
.guild.shard.id + 1}/${ctx.client.options.shards.length} in the "${
ctx.guild.region
}" region.`,
fields: [
{
name: "Servers",
value: parseInt(ctx.client.guilds.size).toLocaleString(),
inline: true
},
{
name: "Users",
value: parseInt(
ctx.client.guilds
.map(guild => guild.memberCount)
.reduce((g1, g2) => g1 + g2)
).toLocaleString(),
inline: true
},
{
name: "Shards",
value: parseInt(
ctx.client.options.shards.length
).toLocaleString(),
inline: true
},
{
name: "Memory Usage",
value:
result.memory < 1024000000
? `${Math.round(result.memory / 1024 / 1024)} MB`
: `${(result.memory / 1024 / 1024 / 1024).toFixed(1)} GB`,
inline: true
},
{
name: "CPU Usage",
value: `${result.cpu.toFixed(1)}%`,
inline: true
},
{
name: "Uptime",
value: format(ctx.client.uptime / 1000),
inline: true
}
],
color: 0xff873f
}
});
});
}
};

@ -1,77 +0,0 @@
const Command = require('../../src/structures/Command');
const {MessageEmbed} = require('discord.js')
module.exports = class Help extends Command {
constructor() {
super({
name: 'help',
description: 'View a list of available commands, or view information on a specific command.',
aliases: ['h'],
module: 'General',
cooldown: 0,
guildOnly: false,
developerOnly: false
});
}
async command(ctx) {
if (!ctx.args.length) {
const commands = [
['General', ctx.client.commands.filter((command) => command.module == 'General').map((command) => `**${command.name}** - ${command.description}`).join('\n')] ]
if (ctx.isDeveloper) commands.push(['Developers', ctx.client.commands.filter((command) => command.module == 'Developers').map((command) => command.name).join(', ')]);
return ctx.send({ embed: {
fields: commands.map((group) => {
return new Object({
name: group[0],
value: group[1]
});
}),
color: 0xFF873F
} });
} else {
const command = ctx.client.commands.find(c => c.name == ctx.args[0].toLowerCase() || c.aliases && c.aliases.includes(ctx.args[0].toLowerCase()));
let fields = [
{
name: 'Module',
value: command.module,
inline: true
},
{
name: 'Aliases',
value: command.aliases.length == 0 ? 'No aliases' : command.aliases.join(', '),
inline: true
},
{
name: 'Cooldown',
value: command.cooldown == 0 ? 'No cooldown' : `${command.cooldown}s`,
inline: true
},
{
name: 'Server only?',
value: command.guildOnly ? 'Yes' : 'No',
inline: true
},
{
name: 'Developers only?',
value: command.developerOnly ? 'Yes' : 'No',
inline: true
},
]
if (!command) return ctx.send(`That command couldn't be found. See the \`help\` command for valid commands.`);
let embed = new MessageEmbed()
.setTitle(command.name)
.setDescription(command.description)
.setColor(0xFF873F)
fields.forEach(i => {
embed.addField(i.name, i.value, i.inline)
});
return ctx.send(embed);
}
}
}

414
package-lock.json generated

@ -26,6 +26,11 @@
"negotiator": "0.6.2"
}
},
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@ -58,10 +63,22 @@
"is-buffer": "^2.0.2"
}
},
"better-sqlite3": {
"version": "5.4.3",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-5.4.3.tgz",
"integrity": "sha512-fPp+8f363qQIhuhLyjI4bu657J/FfMtgiiHKfaTsj3RWDkHlWC1yT7c6kHZDnBxzQVoAINuzg553qKmZ4F1rEw==",
"requires": {
"integer": "^2.1.0",
"tar": "^4.4.10"
}
},
"bindings": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"body-parser": {
"version": "1.19.0",
@ -92,6 +109,16 @@
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.7.0.tgz",
"integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w=="
},
"bson": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
"integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
},
"buffer-shims": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
"integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@ -117,6 +144,29 @@
"supports-color": "^5.3.0"
}
},
"chownr": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
"integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
},
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"requires": {
"restore-cursor": "^3.1.0"
}
},
"cli-spinners": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
"integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ=="
},
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@ -188,6 +238,11 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"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="
},
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
@ -210,6 +265,14 @@
"ms": "2.0.0"
}
},
"defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"requires": {
"clone": "^1.0.2"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@ -250,6 +313,11 @@
"resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz",
"integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
},
"each-series": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/each-series/-/each-series-1.0.0.tgz",
"integrity": "sha1-+Ibmxm39sl7x/nNWQUbuXLR4r8s="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -261,9 +329,13 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"endb": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/endb/-/endb-0.16.1.tgz",
"integrity": "sha512-R0UT6TtYWWhHrS3hNDzPvjdBoAuU/y2v9BCrAUsEcXjeYg9rXeIUIlzAbJtELgzlAB2ECob7MFIFKCmnBNvz9Q=="
"version": "github:chroventer/endb#f58be3e9830157664ea34f0d548a544353f0254a",
"from": "github:chroventer/endb"
},
"es6-promise": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
"integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
},
"escape-html": {
"version": "1.0.3",
@ -332,6 +404,11 @@
"resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
"integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@ -389,6 +466,14 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-minipass": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
"integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
"requires": {
"minipass": "^2.6.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@ -494,6 +579,11 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"integer": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/integer/-/integer-2.1.0.tgz",
"integrity": "sha512-vBtiSgrEiNocWvvZX1RVfeOKa2mCHLZQ2p9nkQkQZ/BvEiY+6CcUz0eyjvIiewjJoeNidzg2I+tpPJvpyspL1w=="
},
"ipaddr.js": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
@ -504,6 +594,44 @@
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
"integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
},
"is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.set": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
"integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
},
"lodash.toarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
"integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE="
},
"lodash.unset": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.unset/-/lodash.unset-4.5.2.tgz",
"integrity": "sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0="
},
"log-symbols": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
"integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
"requires": {
"chalk": "^2.4.2"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -537,11 +665,96 @@
"mime-db": "1.40.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"minipass": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
"integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
"integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
"requires": {
"minipass": "^2.9.0"
}
},
"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"
}
},
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"mongodb": {
"version": "2.2.36",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz",
"integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==",
"requires": {
"es6-promise": "3.2.1",
"mongodb-core": "2.1.20",
"readable-stream": "2.2.7"
},
"dependencies": {
"readable-stream": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
"integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
"requires": {
"buffer-shims": "~1.0.0",
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~1.0.0",
"util-deprecate": "~1.0.1"
}
}
}
},
"mongodb-core": {
"version": "2.1.20",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz",
"integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==",
"requires": {
"bson": "~1.0.4",
"require_optional": "~1.0.0"
}
},
"mongojs": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mongojs/-/mongojs-2.6.0.tgz",
"integrity": "sha512-r6tj71DjYcaRTi2jpa+CA6Iq72cTZclB2JKy+Zub+0JPTEq/l2plsAYfF2eHqSYBtZbKNcObvhGYk9E9UKZWJg==",
"requires": {
"each-series": "^1.0.0",
"mongodb": "^2.2.31",
"once": "^1.4.0",
"parse-mongo-url": "^1.1.1",
"readable-stream": "^2.3.3",
"thunky": "^1.0.2",
"to-mongodb-core": "^2.0.0",
"xtend": "^4.0.1"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -562,6 +775,14 @@
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
"integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
},
"node-emoji": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
"integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
"requires": {
"lodash.toarray": "^4.4.0"
}
},
"node-fetch": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
@ -585,11 +806,46 @@
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"onetime": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
"integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
"requires": {
"mimic-fn": "^2.1.0"
}
},
"ora": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz",
"integrity": "sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==",
"requires": {
"chalk": "^2.4.2",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.2.0",
"is-interactive": "^1.0.0",
"log-symbols": "^3.0.0",
"strip-ansi": "^5.2.0",
"wcwidth": "^1.0.1"
}
},
"pako": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
"integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
},
"parse-mongo-url": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/parse-mongo-url/-/parse-mongo-url-1.1.1.tgz",
"integrity": "sha1-ZiON9fjnwMjKTNlw1KtqE3PrdbU="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@ -613,6 +869,11 @@
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.1.0.tgz",
"integrity": "sha512-W+oxjRyjtd7hw3pefNZuc7YEZ6VICORJvVNfCPs0+7CsJ43CqMjGAYGjPL3hQ82vw03EVra+CiX4zisqOBUUGw=="
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"proxy-addr": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@ -627,6 +888,17 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"quick.db": {
"version": "7.0.0-b22",
"resolved": "https://registry.npmjs.org/quick.db/-/quick.db-7.0.0-b22.tgz",
"integrity": "sha512-Qi3Mx2ho1M0rWzVwrjh5zqmlNVTLqO6WgaI1suZ4qOxhjD3CFcH2nvOnL7o3kan5C0taCrs9/n4EIvq6CgpCaQ==",