141 lines
3.7 KiB
JavaScript
141 lines
3.7 KiB
JavaScript
const collections = require("../collections.js");
|
|
const logger = require("../logger.js");
|
|
const misc = require("../misc.js");
|
|
|
|
const mongoose = require("mongoose");
|
|
mongoose.connect(process.env.DB, {
|
|
poolSize: 10,
|
|
bufferMaxEntries: 0,
|
|
useNewUrlParser: true,
|
|
useUnifiedTopology: true
|
|
});
|
|
const guildSchema = new mongoose.Schema({
|
|
id: String,
|
|
tags: Map,
|
|
prefix: String,
|
|
disabled: [String],
|
|
tagsDisabled: Boolean
|
|
});
|
|
const Guild = mongoose.model("Guild", guildSchema);
|
|
|
|
const globalSchema = new mongoose.Schema({
|
|
cmdCounts: Map,
|
|
});
|
|
const Global = mongoose.model("Global", globalSchema);
|
|
|
|
const connection = mongoose.connection;
|
|
|
|
exports.getGuild = async (query) => {
|
|
return await Guild.findOne({ id: query });
|
|
};
|
|
|
|
exports.setPrefix = async (prefix, guild) => {
|
|
const guildDB = await this.getGuild(guild.id);
|
|
guildDB.prefix = prefix;
|
|
await guildDB.save();
|
|
collections.prefixCache.set(guild.id, prefix);
|
|
};
|
|
|
|
exports.setTag = async (name, content, guild) => {
|
|
const guildDB = await this.getGuild(guild.id);
|
|
guildDB.tags[name] = content;
|
|
await guildDB.save();
|
|
};
|
|
|
|
exports.removeTag = async (name, guild) => {
|
|
const guildDB = await this.getGuild(guild.id);
|
|
delete guildDB.tags[name];
|
|
await guildDB.save();
|
|
};
|
|
|
|
exports.toggleTags = async (guild) => {
|
|
const guildDB = await this.getGuild(guild.id);
|
|
guildDB.tagsDisabled = !guildDB.tagsDisabled;
|
|
await guildDB.save();
|
|
return guildDB.tagsDisabled;
|
|
};
|
|
|
|
exports.disableChannel = async (channel) => {
|
|
const guildDB = await this.getGuild(channel.guild.id);
|
|
guildDB.disabled.push(channel.id);
|
|
await guildDB.save();
|
|
collections.disabledCache.set(channel.guild.id, guildDB.disabled);
|
|
};
|
|
|
|
exports.enableChannel = async (channel) => {
|
|
const guildDB = await this.getGuild(channel.guild.id);
|
|
guildDB.disabled = guildDB.disabled.filter(item => item !== channel.id);
|
|
await guildDB.save();
|
|
collections.disabledCache.set(channel.guild.id, guildDB.disabled);
|
|
};
|
|
|
|
exports.getCounts = async () => {
|
|
return [...(await Global.findOne({})).cmdCounts.entries()];
|
|
};
|
|
|
|
exports.addCount = async (command) => {
|
|
const global = await Global.findOne({});
|
|
const count = global.cmdCounts.get(command);
|
|
global.cmdCounts.set(command, parseInt(count) + 1);
|
|
await global.save();
|
|
};
|
|
|
|
exports.addGuild = async (guild) => {
|
|
const guildDB = new Guild({
|
|
id: guild.id,
|
|
tags: misc.tagDefaults,
|
|
prefix: process.env.PREFIX,
|
|
disabled: [],
|
|
tagsDisabled: false
|
|
});
|
|
await guildDB.save();
|
|
return guildDB;
|
|
};
|
|
|
|
exports.fixGuild = async (guild) => {
|
|
const guildDB = await Guild.findOne({ id: guild.id });
|
|
if (!guildDB) {
|
|
logger.log(`Registering guild database entry for guild ${guild.id}...`);
|
|
return await this.addGuild(guild);
|
|
} else {
|
|
if (!guildDB.disabled && guildDB.disabledChannels) {
|
|
guildDB.set("disabled", guildDB.disabledChannels);
|
|
guildDB.set("disabledChannels", undefined);
|
|
await guildDB.save();
|
|
return guildDB;
|
|
}
|
|
}
|
|
};
|
|
|
|
exports.setup = async () => {
|
|
const global = await Global.findOne({});
|
|
if (!global) {
|
|
const countObject = {};
|
|
for (const command of collections.commands.keys()) {
|
|
countObject[command] = 0;
|
|
}
|
|
const newGlobal = new Global({
|
|
cmdCounts: countObject
|
|
});
|
|
await newGlobal.save();
|
|
} else {
|
|
const exists = [];
|
|
for (const command of collections.commands.keys()) {
|
|
if (!global.cmdCounts.has(command)) {
|
|
global.cmdCounts.set(command, 0);
|
|
}
|
|
exists.push(command);
|
|
}
|
|
|
|
for (const command of global.cmdCounts.keys()) {
|
|
if (!exists.includes(command)) {
|
|
global.cmdCounts.set(command, undefined);
|
|
}
|
|
}
|
|
await global.save();
|
|
}
|
|
};
|
|
|
|
exports.stop = async () => {
|
|
await connection.disconnect();
|
|
}; |