Settings command, many small changes, improvements, and fixes

This commit is contained in:
Isaac
2021-03-23 23:32:24 +00:00
parent e6fa1d067f
commit ffc415354a
9 changed files with 182 additions and 45 deletions

View File

@@ -1,4 +1,6 @@
const Command = require('../modules/commands/command');
const fetch = require('node-fetch');
const { MessageAttachment } = require('discord.js');
module.exports = class SettingsCommand extends Command {
constructor(client) {
@@ -12,11 +14,108 @@ module.exports = class SettingsCommand extends Command {
});
}
async execute({ guild, member, channel, args }, message) {
async execute({ guild, channel, member }, message) {
let settings = await guild.settings;
const i18n = this.client.i18n.get(settings.locale);
channel.send('Settings!');
let attachments = [ ...message.attachments.values() ];
if (attachments.length >= 1) {
// load settings from json
let data = await (await fetch(attachments[0].url)).json();
settings.colour = data.colour;
settings.error_colour = data.error_colour;
settings.locale = data.locale;
settings.log_messages = data.log_messages;
settings.success_colour = data.success_colour;
await settings.save();
for (let c of data.categories) {
let permissions = [
...[
{
id: guild.roles.everyone,
deny: ['VIEW_CHANNEL']
}
],
...c.roles.map(r => {
return {
id: r,
allow: ['VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', 'SEND_MESSAGES', 'ATTACH_FILES']
};
})
];
if (c.id) {
// existing category
let category = await this.client.db.models.Category.findOne({
where: {
id: c.id
}
});
category.name = c.name;
category.roles = c.roles;
category.save();
let cat_channel = await this.client.channels.fetch(c.id);
await cat_channel.edit({
name: c.name, // await cat_channel.setName(c.name);
permissionOverwrites: permissions // await cat_channel.overwritePermissions(permissions);
},
`Tickets category updated by ${member.user.tag}`
);
} else {
// create a new category
let created = await guild.channels.create(c.name, {
type: 'category',
reason: `Tickets category created by ${member.user.tag}`,
permissionOverwrites: permissions
});
await this.client.db.models.Category.create({
id: created.id,
name: c.name,
guild: guild.id,
roles: c.roles
});
}
}
channel.send(`\`\`\`json\n${JSON.stringify(data, null, 2)}\n\`\`\``);
} else {
// upload settings as json to be modified
let data = {
categories: [],
colour: settings.colour,
error_colour: settings.error_colour,
locale: settings.locale,
log_messages: settings.log_messages,
success_colour: settings.success_colour,
};
let categories = await this.client.db.models.Category.findAll({
where: {
guild: guild.id
}
});
for (let c of categories) {
data.categories.push({
id: c.id,
name: c.name,
roles: c.roles
});
}
let attachment = new MessageAttachment(
Buffer.from(JSON.stringify(data, null, 2)),
`Settings for ${guild.name}.json`
);
channel.send(i18n('commands.settings.response'), {
files: [attachment]
});
}
}
};