mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-06 10:11:27 +03:00
Settings command, many small changes, improvements, and fixes
This commit is contained in:
@@ -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]
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user