fuck node
This commit is contained in:
parent
9ad8081971
commit
304d0ccb96
49 changed files with 1305 additions and 403 deletions
0
.gitattributes
vendored
Normal file → Executable file
0
.gitattributes
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.vscode/Snippets.code-snippets
vendored
Normal file → Executable file
0
.vscode/Snippets.code-snippets
vendored
Normal file → Executable file
3
.vscode/settings.json
vendored
Executable file
3
.vscode/settings.json
vendored
Executable file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"editor.lineNumbers": "off"
|
||||
}
|
21
DiscordEvents/ShortlinkMessage.js
Executable file
21
DiscordEvents/ShortlinkMessage.js
Executable file
|
@ -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);
|
||||
}
|
||||
};
|
21
DiscordEvents/SourceFynnderMessage.js
Executable file
21
DiscordEvents/SourceFynnderMessage.js
Executable file
|
@ -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);
|
||||
}
|
||||
};
|
33
DiscordEvents/guildCreate.js
Executable file
33
DiscordEvents/guildCreate.js
Executable file
|
@ -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);
|
||||
}
|
||||
};
|
24
events/message.js → DiscordEvents/message.js
Normal file → Executable file
24
events/message.js → DiscordEvents/message.js
Normal file → Executable file
|
@ -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
events/messageReactionAdd.js → DiscordEvents/messageReactionAdd.js
Normal file → Executable file
0
events/messageReactionAdd.js → DiscordEvents/messageReactionAdd.js
Normal file → Executable file
9
DiscordEvents/ready.js
Executable file
9
DiscordEvents/ready.js
Executable file
|
@ -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`);
|
||||
}
|
||||
};
|
16
DiscordEvents/shardReady.js
Executable file
16
DiscordEvents/shardReady.js
Executable file
|
@ -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
events/shardReconnecting.js → DiscordEvents/shardReconnecting.js
Normal file → Executable file
0
events/shardReconnecting.js → DiscordEvents/shardReconnecting.js
Normal file → Executable file
0
events/shardResume.js → DiscordEvents/shardResume.js
Normal file → Executable file
0
events/shardResume.js → DiscordEvents/shardResume.js
Normal file → Executable file
90
DiscordModules/Developers/eval.js
Executable file
90
DiscordModules/Developers/eval.js
Executable file
|
@ -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
modules/Developers/reload.js → DiscordModules/Developers/reload.js
Normal file → Executable file
0
modules/Developers/reload.js → DiscordModules/Developers/reload.js
Normal file → Executable file
21
DiscordModules/Developers/setup.js
Executable file
21
DiscordModules/Developers/setup.js
Executable file
|
@ -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);
|
||||
}
|
||||
};
|
18
DiscordModules/Developers/stop.js
Executable file
18
DiscordModules/Developers/stop.js
Executable file
|
@ -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();
|
||||
}
|
||||
};
|
104
DiscordModules/General/help.js
Executable file
104
DiscordModules/General/help.js
Executable file
|
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
27
modules/General/info.js → DiscordModules/General/info.js
Normal file → Executable file
27
modules/General/info.js → DiscordModules/General/info.js
Normal file → Executable file
|
@ -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
modules/General/ping.js → DiscordModules/General/ping.js
Normal file → Executable file
0
modules/General/ping.js → DiscordModules/General/ping.js
Normal file → Executable file
58
DiscordModules/Images/e621.js
Executable file
58
DiscordModules/Images/e621.js
Executable file
|
@ -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);
|
||||
}
|
||||
};
|
62
DiscordModules/Settings/settings.js
Executable file
62
DiscordModules/Settings/settings.js
Executable file
|
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
0
LICENSE
Normal file → Executable file
0
LICENSE
Normal file → Executable file
0
README.md
Normal file → Executable file
0
README.md
Normal file → Executable file
|
@ -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);
|
||||
}
|
||||
}
|
14
index.js
Normal file → Executable file
14
index.js
Normal file → Executable file
|
@ -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);
|
||||
});
|
||||
|
|
BIN
json.sqlite
Executable file
BIN
json.sqlite
Executable file
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
Normal file → Executable file
414
package-lock.json
generated
Normal file → Executable file
|
@ -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==",
|
||||
"requires": {
|
||||
"better-sqlite3": "^5.0.1",
|
||||
"lodash.get": "^4.4.2",
|
||||
"lodash.set": "^4.3.2",
|
||||
"lodash.unset": "^4.5.2"
|
||||
}
|
||||
},
|
||||
"range-parser": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||
|
@ -650,11 +922,63 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"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"
|
||||
},
|
||||
"dependencies": {
|
||||
"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=="
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"referrer-policy": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
|
||||
"integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA=="
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
|
||||
},
|
||||
"restore-cursor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
|
||||
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
|
||||
"requires": {
|
||||
"onetime": "^5.1.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
|
@ -665,6 +989,11 @@
|
|||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
},
|
||||
"send": {
|
||||
"version": "0.17.1",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
||||
|
@ -713,11 +1042,32 @@
|
|||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
|
||||
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
||||
},
|
||||
"statuses": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
|
@ -726,6 +1076,30 @@
|
|||
"has-flag": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"tar": {
|
||||
"version": "4.4.13",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
|
||||
"integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"thunky": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
|
||||
"integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow=="
|
||||
},
|
||||
"to-mongodb-core": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-mongodb-core/-/to-mongodb-core-2.0.0.tgz",
|
||||
"integrity": "sha1-NZbsdhOsmtO5ioncua77pWnNJ+s="
|
||||
},
|
||||
"toidentifier": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||
|
@ -759,6 +1133,11 @@
|
|||
"nan": "^2.0.9"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
|
@ -769,6 +1148,19 @@
|
|||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||
},
|
||||
"wcwidth": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
|
||||
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
|
||||
"requires": {
|
||||
"defaults": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"ws": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
||||
|
@ -782,6 +1174,16 @@
|
|||
"resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
|
||||
"integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
|
||||
},
|
||||
"xtend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
||||
},
|
||||
"yiff": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/yiff/-/yiff-1.2.1.tgz",
|
||||
|
|
9
package.json
Normal file → Executable file
9
package.json
Normal file → Executable file
|
@ -7,16 +7,21 @@
|
|||
"license": "MIT",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"axios": "^0.19.0",
|
||||
"chalk": "^2.4.2",
|
||||
"compression": "*",
|
||||
"cors": "*",
|
||||
"discord.js": "discordjs/discord.js",
|
||||
"endb": "^0.16.1",
|
||||
"endb": "github:chroventer/endb",
|
||||
"express": "*",
|
||||
"helmet": "*",
|
||||
"moment": "*",
|
||||
"mongojs": "^2.6.0",
|
||||
"node-emoji": "^1.10.0",
|
||||
"ora": "^4.0.2",
|
||||
"phin": "*",
|
||||
"usage": "*",
|
||||
"quick.db": "^7.0.0-b22",
|
||||
"usage": "^0.7.1",
|
||||
"yiff": "^1.2.1"
|
||||
}
|
||||
}
|
||||
|
|
0
server/server.js
Normal file → Executable file
0
server/server.js
Normal file → Executable file
98
src/client/Client.js
Normal file → Executable file
98
src/client/Client.js
Normal file → Executable file
|
@ -1,57 +1,63 @@
|
|||
const { Client, Collection } = require('discord.js');
|
||||
const { readdirSync: read } = require('fs');
|
||||
const { Client, Collection } = require("discord.js");
|
||||
const { readdirSync: read } = require("fs");
|
||||
|
||||
const server = require('../../server/server');
|
||||
const server = require("../../server/server");
|
||||
|
||||
module.exports = class Musik extends Client {
|
||||
constructor(config, shards) {
|
||||
super({
|
||||
disableEveryone: true,
|
||||
disabledEvents: ['TYPING_START'],
|
||||
shardCount: shards,
|
||||
totalShardCount: shards
|
||||
});
|
||||
module.exports = class Thaldrin extends Client {
|
||||
constructor(config, shards) {
|
||||
super({
|
||||
disableEveryone: true,
|
||||
disabledEvents: ["TYPING_START"],
|
||||
shardCount: shards,
|
||||
totalShardCount: shards
|
||||
});
|
||||
|
||||
this.commands = new Collection();
|
||||
this.cooldowns = new Collection();
|
||||
this.queues = new Collection();
|
||||
this.config = config;
|
||||
this.commands = new Collection();
|
||||
this.cooldowns = new Collection();
|
||||
// this.queues = new Collection();
|
||||
this.config = config;
|
||||
|
||||
this.lastEval = null;
|
||||
this.lastEval = null;
|
||||
|
||||
this.load();
|
||||
this.login(config.token);
|
||||
}
|
||||
this.load();
|
||||
this.login(config.token);
|
||||
}
|
||||
|
||||
async load() {
|
||||
const events = await read('./events');
|
||||
const modules = await read('./modules');
|
||||
async load() {
|
||||
const events = await read("./DiscordEvents");
|
||||
const modules = await read("./DiscordModules");
|
||||
|
||||
// server(this)
|
||||
// server(this)
|
||||
|
||||
events.filter(f => f.endsWith('.js')).forEach(file => {
|
||||
events
|
||||
.filter(f => f.endsWith(".js"))
|
||||
.forEach(file => {
|
||||
try {
|
||||
const event = require(`../../DiscordEvents/${file}`);
|
||||
|
||||
this.on(event.name, event.run.bind(null, this));
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
modules
|
||||
.filter(f => !f.endsWith(".js"))
|
||||
.forEach(async module => {
|
||||
const commands = await read(`./DiscordModules/${module}`);
|
||||
|
||||
commands
|
||||
.filter(f => f.endsWith(".js"))
|
||||
.forEach(command => {
|
||||
try {
|
||||
const event = require(`../../events/${file}`);
|
||||
const file = require(`../../DiscordModules/${module}/${command}`);
|
||||
const Command = new file();
|
||||
|
||||
this.on(event.name, event.run.bind(null, this));
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
this.commands.set(Command.name, Command);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
modules.filter(f => !f.endsWith('.js')).forEach(async (module) => {
|
||||
const commands = await read(`./modules/${module}`);
|
||||
|
||||
commands.filter(f => f.endsWith('.js')).forEach(command => {
|
||||
try {
|
||||
const file = require(`../../modules/${module}/${command}`);
|
||||
const Command = new file();
|
||||
|
||||
this.commands.set(Command.name, Command);
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
0
src/index.js
Normal file → Executable file
0
src/index.js
Normal file → Executable file
0
src/structures/Command.js
Normal file → Executable file
0
src/structures/Command.js
Normal file → Executable file
11
utils/index.js
Executable file
11
utils/index.js
Executable file
|
@ -0,0 +1,11 @@
|
|||
module.exports = {
|
||||
format: require("./src/format"),
|
||||
status: require("./src/statuses"),
|
||||
calc: require("./src/calc"),
|
||||
ShortLinks: require("./src/shortlinks"),
|
||||
SourceFynnder: require("./src/sourceFynnder"),
|
||||
emotes: require("./src/emotes"),
|
||||
db: require("./src/database"),
|
||||
log: require("./src/logs"),
|
||||
discord: require("discord.js")
|
||||
};
|
|
@ -1,55 +0,0 @@
|
|||
const ShortLinkReg = /(?:\s|^)(gh|gl|gd|owo|sg|tw|teknik|bb|yt|bc|bcu|sc|aur|bot|sw|tw|npm|xkcd)\/([a-zA-Z0-9-_.#/!]*)/g;
|
||||
const ShortLinks = {
|
||||
gh: "https://github.com/$link$",
|
||||
gl: "https://gitlab.com/$link$",
|
||||
yt: "https://youtu.be/$link$",
|
||||
tw: "https://twitter.com/$link$",
|
||||
npm: "https://npmjs.com/package/$link$",
|
||||
tw: "https://twitch.tv/$link$",
|
||||
gd: "https://gitdab.com/$link$",
|
||||
owo: "https://owo.codes/$link$",
|
||||
sg: "https://git.supernets.org/$link$",
|
||||
teknik: "https://git.teknik.io/$link$",
|
||||
bb: "https://bitbucket.org/$link$",
|
||||
bc: "https://$link$.bandcamp.com/",
|
||||
bcu: "https://bandcamp.com/$link$",
|
||||
sc: "https://soundcloud.com/$link$",
|
||||
aur: "https://aur.archlinux.org/packages/$link$",
|
||||
sw: "https://steamcommunity.com/sharedfiles/filedetails/?id=$link$",
|
||||
bot: "<https://discordapp.com/oauth2/authorize?client_id=$link$&scope=bot>",
|
||||
xkcd: "https://xkcd.com/$link$"
|
||||
};
|
||||
|
||||
module.exports = function Shortlinks(enabled, msg) {
|
||||
if (enabled) {
|
||||
let res = msg.content.match(ShortLinkReg);
|
||||
if (!res) return;
|
||||
res = res.map(x => (x.startsWith(" ") ? x.substring(1) : x));
|
||||
let links = [];
|
||||
|
||||
for (const m in res) {
|
||||
for (const x in ShortLinks) {
|
||||
let url = res[m];
|
||||
if (!url.startsWith(x)) continue;
|
||||
url = url.replace(x + "/", "");
|
||||
|
||||
if (x == "gh" || x == "gl" || x == "gd") {
|
||||
url = url.replace("#", "/issues/");
|
||||
}
|
||||
|
||||
if (x == "gl") {
|
||||
url = url.replace("!", "/merge_requests/");
|
||||
} else if (x == "gd") {
|
||||
url = url.replace("!", "/pulls/");
|
||||
} else if (x == "gh") {
|
||||
url = url.replace("!", "/pull/");
|
||||
}
|
||||
|
||||
url = ShortLinks[x].replace("$link$", url);
|
||||
links.push(url);
|
||||
}
|
||||
}
|
||||
|
||||
msg.channel.send(links.join("\n"));
|
||||
};
|
||||
}
|
20
utils/src/calc.js
Executable file
20
utils/src/calc.js
Executable file
|
@ -0,0 +1,20 @@
|
|||
module.exports = {
|
||||
userDays: function(user) {
|
||||
if (typeof user !== "object") throw new TypeError("Not an Object");
|
||||
|
||||
let creation = new Date().getTime() - user.createdAt.getTime();
|
||||
|
||||
let days = creation / 1000 / 60 / 60 / 24;
|
||||
|
||||
return Math.round(days);
|
||||
},
|
||||
serverDays: function(server) {
|
||||
if (typeof user !== "object") throw new TypeError("Not an Object");
|
||||
|
||||
let creation = new Date().getTime() - server.createdAt.getTime();
|
||||
|
||||
let days = creation / 1000 / 60 / 60 / 24;
|
||||
|
||||
return Math.round(days);
|
||||
}
|
||||
};
|
112
utils/src/database.js
Executable file
112
utils/src/database.js
Executable file
|
@ -0,0 +1,112 @@
|
|||
const db = require("quick.db");
|
||||
const Servers = new db.table("servers");
|
||||
const Users = new db.table("users");
|
||||
const { prefixes } = require("../../config");
|
||||
const chalk = require("chalk");
|
||||
const e = require("node-emoji");
|
||||
|
||||
const DatabaseDefaults = {
|
||||
user: {
|
||||
id: null,
|
||||
blacklist: {
|
||||
state: false,
|
||||
replied: false,
|
||||
reason: undefined
|
||||
}
|
||||
},
|
||||
server: {
|
||||
prefix: prefixes,
|
||||
SourceFynnder: false,
|
||||
Shortlinks: false,
|
||||
embeds: true,
|
||||
rp_text: true,
|
||||
default_yiff: "gay"
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
defaults: DatabaseDefaults,
|
||||
setupServer: async function(ctx) {
|
||||
ctx.utils.log.servers.setup(ctx.guild);
|
||||
await Servers.set(ctx.guild.id, DatabaseDefaults.server);
|
||||
ctx.utils.log.servers.fin(ctx.guild);
|
||||
return;
|
||||
},
|
||||
prefix: {
|
||||
add: async function(ctx) {
|
||||
let Prefixes = [];
|
||||
let New;
|
||||
Prefixes = await Servers.get(ctx.guild.id).prefix;
|
||||
|
||||
if (Prefixes.includes(ctx.args.join(" ")))
|
||||
throw new Error("Prefix already in Database");
|
||||
else {
|
||||
New = await Servers.push(`${ctx.guild.id}.prefix`, ctx.args.join(" "));
|
||||
}
|
||||
return New;
|
||||
},
|
||||
remove: async function(ctx) {
|
||||
if (require("../../config").prefixes.includes(ctx.args.join(" "))) {
|
||||
throw new Error("You cannot remove the Default Prefix(es)");
|
||||
}
|
||||
|
||||
let Prefixes = Servers.get(`${ctx.guild.id}.prefix`);
|
||||
let New;
|
||||
|
||||
for (let i in Prefixes) {
|
||||
console.log(
|
||||
`[${i}] [${Prefixes.toString().replace(
|
||||
Prefixes[i],
|
||||
chalk.red(Prefixes[i])
|
||||
)}]`
|
||||
);
|
||||
if (Prefixes[i] === ctx.args.join(" ")) {
|
||||
New = Prefixes.slice(i, 1);
|
||||
console.log(Prefixes.slice(i, 1));
|
||||
console.log(New);
|
||||
i--;
|
||||
return console.log("Found it");
|
||||
}
|
||||
}
|
||||
//return New;
|
||||
}
|
||||
},
|
||||
toggle: {
|
||||
SourceFynnder: async function(ctx) {
|
||||
let Server = await Servers.get(ctx.guild.id);
|
||||
Server.SourceFynnder
|
||||
? console.log(
|
||||
`${chalk.green("✔")} Set ${chalk.blue(
|
||||
"SourceFynnder"
|
||||
)} in ${chalk.magenta(ctx.guild.id)} to ${chalk.red("false")} `
|
||||
)
|
||||
: console.log(
|
||||
`${chalk.green("✔")} Set ${chalk.blue(
|
||||
"SourceFynnder"
|
||||
)} in ${chalk.magenta(ctx.guild.id)} to ${chalk.green("true")} `
|
||||
);
|
||||
|
||||
Server.SourceFynnder
|
||||
? await Servers.set(`${ctx.guild.id}.SourceFynnder`, false)
|
||||
: await Servers.set(`${ctx.guild.id}.SourceFynnder`, true);
|
||||
},
|
||||
Shortlinks: async function(ctx) {
|
||||
let Server = await Servers.get(ctx.guild.id);
|
||||
Server.Shortlinks
|
||||
? console.log(
|
||||
`${chalk.green("✔")} Set ${chalk.blue(
|
||||
"Shortlinks"
|
||||
)} in ${chalk.magenta(ctx.guild.id)} to ${chalk.red("false")} `
|
||||
)
|
||||
: console.log(
|
||||
`${chalk.green("✔")} Set ${chalk.blue(
|
||||
"Shortlinks"
|
||||
)} in ${chalk.magenta(ctx.guild.id)} to ${chalk.green("true")} `
|
||||
);
|
||||
|
||||
Server.Shortlinks
|
||||
? await Servers.set(`${ctx.guild.id}.Shortlinks`, false)
|
||||
: await Servers.set(`${ctx.guild.id}.Shortlinks`, true);
|
||||
}
|
||||
}
|
||||
};
|
41
utils/src/emotes.js
Executable file
41
utils/src/emotes.js
Executable file
|
@ -0,0 +1,41 @@
|
|||
module.exports = {
|
||||
status: {
|
||||
online: "<:oxONLINE:480145455708110850>",
|
||||
streaming: "<:oxSTREAMING:487933554894962688>",
|
||||
idle: "<:oxIDLE:480145455183953921>",
|
||||
dnd: "<:oxDND:480145455104262165>",
|
||||
offline: "<:oxOFFLINE:480145455330754571>"
|
||||
},
|
||||
|
||||
social: {
|
||||
twitter: "<:twitter:517392526622064640>",
|
||||
patreon: "<:patreon:465243291877900300>",
|
||||
github: "<:github:487283925417459732>",
|
||||
trello: "<:trello:526452412244951041>",
|
||||
discord: "<:discord:517392526647361557>"
|
||||
},
|
||||
|
||||
settings: {
|
||||
cog: "<:settings:350172481157464064>",
|
||||
on: "<:thalYes:444843380187332608>",
|
||||
off: "<:thalNo:447651589902041102> ",
|
||||
locked: "<:locked:350172480318603265>",
|
||||
unlocked: "<:unlocked:350172481664974848>",
|
||||
save: "<:save:350172480821919745>",
|
||||
trash: "<:trash:350172481794998273>"
|
||||
},
|
||||
|
||||
eval: {
|
||||
working: "<:success:350172481186955267>",
|
||||
warning: "<:warning:350172481757118478>",
|
||||
error: "<:error:350172479936921611>"
|
||||
},
|
||||
|
||||
perms: {
|
||||
auth: "<:authorization:350172478019993614>"
|
||||
},
|
||||
|
||||
random: {
|
||||
pin: "<:pin:350172480725581838>"
|
||||
}
|
||||
};
|
0
utils/format.js → utils/src/format.js
Normal file → Executable file
0
utils/format.js → utils/src/format.js
Normal file → Executable file
49
utils/src/logs.js
Executable file
49
utils/src/logs.js
Executable file
|
@ -0,0 +1,49 @@
|
|||
const ora = require("ora");
|
||||
const config = require("../../config");
|
||||
const chalk = require("chalk");
|
||||
const BotSpinner = new ora({
|
||||
discardStdin: false
|
||||
});
|
||||
const shardSpinner = new ora({
|
||||
discardStdin: false
|
||||
});
|
||||
const ServerSpinner = new ora({
|
||||
discardStdin: false
|
||||
});
|
||||
|
||||
module.exports = async = {
|
||||
starting: async function() {
|
||||
BotSpinner.text = `${config.name} v${config.version} is starting`;
|
||||
BotSpinner.spinner = "moon";
|
||||
BotSpinner.start();
|
||||
return BotSpinner;
|
||||
},
|
||||
stopSpinner: function() {
|
||||
return BotSpinner.stop();
|
||||
},
|
||||
hasStarted: async function() {
|
||||
BotSpinner.succeed(`${config.name} v${config.version} has started`);
|
||||
return;
|
||||
},
|
||||
shardReady: async function(text) {
|
||||
shardSpinner.text = text;
|
||||
shardSpinner.spinner = "moon";
|
||||
return shardSpinner.start();
|
||||
},
|
||||
shardSpinnerStarted: function() {
|
||||
return shardSpinner.succeed();
|
||||
},
|
||||
servers: {
|
||||
setup: async function(server) {
|
||||
ServerSpinner.text = `Setting up ${chalk.red(server.name)} | ${chalk.red(
|
||||
server.id
|
||||
)}...`;
|
||||
ServerSpinner.start();
|
||||
},
|
||||
fin: async function(server) {
|
||||
ServerSpinner.succeed(
|
||||
`${chalk.red(server.name)} | ${chalk.red(server.id)} has been set up.`
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
54
utils/src/shortlinks.js
Executable file
54
utils/src/shortlinks.js
Executable file
|
@ -0,0 +1,54 @@
|
|||
const ShortLinkReg = /(?:\s|^)(gh|gl|gd|owo|sg|ttv|teknik|bb|yt|bc|bcu|sc|aur|bot|sw|tw|npm|xkcd)\/([a-zA-Z0-9-_.#/!]*)/g;
|
||||
const ShortLinks = {
|
||||
gh: "https://github.com/$link$",
|
||||
gl: "https://gitlab.com/$link$",
|
||||
yt: "https://youtu.be/$link$",
|
||||
tw: "https://twitter.com/$link$",
|
||||
npm: "https://npmjs.com/package/$link$",
|
||||
ttv: "https://twitch.tv/$link$",
|
||||
gd: "https://gitdab.com/$link$",
|
||||
owo: "https://owo.codes/$link$",
|
||||
sg: "https://git.supernets.org/$link$",
|
||||
teknik: "https://git.teknik.io/$link$",
|
||||
bb: "https://bitbucket.org/$link$",
|
||||
bc: "https://$link$.bandcamp.com/",
|
||||
bcu: "https://bandcamp.com/$link$",
|
||||
sc: "https://soundcloud.com/$link$",
|
||||
aur: "https://aur.archlinux.org/packages/$link$",
|
||||
sw: "https://steamcommunity.com/sharedfiles/filedetails/?id=$link$",
|
||||
bot: "<https://discordapp.com/oauth2/authorize?client_id=$link$&scope=bot>",
|
||||
xkcd: "https://xkcd.com/$link$"
|
||||
};
|
||||
|
||||
module.exports = function Shortlink(enabled, msg) {
|
||||
if (!enabled || enabled === null || enabled === undefined) return;
|
||||
let res = msg.content.match(ShortLinkReg);
|
||||
if (!res) return;
|
||||
res = res.map(x => (x.startsWith(" ") ? x.substring(1) : x));
|
||||
let links = [];
|
||||
|
||||
for (const m in res) {
|
||||
for (const x in ShortLinks) {
|
||||
let url = res[m];
|
||||
if (!url.startsWith(x)) continue;
|
||||
url = url.replace(x + "/", "");
|
||||
|
||||
if (x == "gh" || x == "gl" || x == "gd") {
|
||||
url = url.replace("#", "/issues/");
|
||||
}
|
||||
|
||||
if (x == "gl") {
|
||||
url = url.replace("!", "/merge_requests/");
|
||||
} else if (x == "gd") {
|
||||
url = url.replace("!", "/pulls/");
|
||||
} else if (x == "gh") {
|
||||
url = url.replace("!", "/pull/");
|
||||
}
|
||||
|
||||
url = ShortLinks[x].replace("$link$", url);
|
||||
links.push(url);
|
||||
}
|
||||
}
|
||||
|
||||
msg.channel.send(links.join("\n"));
|
||||
};
|
56
utils/src/sourceFynnder.js
Executable file
56
utils/src/sourceFynnder.js
Executable file
|
@ -0,0 +1,56 @@
|
|||
const axios = require("axios");
|
||||
const db = require("quick.db");
|
||||
const backend = new db.table("backend");
|
||||
let md5 = new RegExp(
|
||||
"((?:!)?https?://static[0-9]*.(?:e621|e926).net/data/(?:sample/|preview/|)[0-9a-f]{2}/[0-9a-f]{2}/([0-9a-f]{32}).([0-9a-z]+))",
|
||||
"igm"
|
||||
);
|
||||
|
||||
let search_md5 = "https://e621.net/post/show.json?md5=";
|
||||
let e6 = "https://e621.net/post/show/";
|
||||
let e9 = "https://e926.net/post/show/";
|
||||
|
||||
const version = "0.1.0";
|
||||
|
||||
module.exports = async function SourceFynnder(enabled, msg) {
|
||||
if (!enabled || enabled === null || enabled === undefined) return;
|
||||
res = msg.content.match(md5);
|
||||
if (!res) return;
|
||||
|
||||
let Sources = [];
|
||||
for (const m in res) {
|
||||
let URL = res[m];
|
||||
let hash = URL.split(md5)[2];
|
||||
|
||||
let { data } = await axios.get(search_md5 + hash, {
|
||||
headers: { "user-agent": `SourceFynnder/${version} (ry / codepupper)` }
|
||||
});
|
||||
if (data.rating === "s") {
|
||||
Source = e9 + data.id;
|
||||
} else {
|
||||
Source = e6 + data.id;
|
||||
}
|
||||
Sources.push(`:link::mag: ${Source}`);
|
||||
}
|
||||
await backend.add("SourceFynnder.found", Sources.length);
|
||||
msg.channel.send(Sources);
|
||||
};
|
||||
/* url = msg.content.split(md5);
|
||||
hash = url[2];
|
||||
|
||||
if (hash === undefined) return;
|
||||
|
||||
let res = await axios.get(search_md5 + hash);
|
||||
|
||||
let data = res.data;
|
||||
let Source;
|
||||
if (data.rating === "s") {
|
||||
Source = e9 + data.id;
|
||||
} else {
|
||||
Source = e6 + data.id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log(Source);
|
||||
return msg.channel.send(Source); */
|
6
utils/src/statuses.js
Executable file
6
utils/src/statuses.js
Executable file
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
playing: "PLAYING",
|
||||
watching: "WATCHING",
|
||||
listening: "LISTENING",
|
||||
streaming: "STREAMING"
|
||||
};
|
0
yarn.lock
Normal file → Executable file
0
yarn.lock
Normal file → Executable file
Loading…
Reference in a new issue