galactic-bot/structure/interfaces/Setting.js
2020-05-22 15:15:18 -04:00

82 lines
2.4 KiB
JavaScript

const Component = require('./Component.js');
class Setting extends Component {
constructor(client, opts = {}) {
if(!opts) return null;
super(client, {
id: opts.name,
type: 'setting',
guarded: opts.guarded,
disabled: opts.disabled
});
this.name = opts.name;
this.module = opts.module;
this.restricted = Boolean(opts.restricted);
this.description = `S_${opts.name.toUpperCase()}_DESCRIPTION`;
this.examples = opts.examples || [];
this.usage = opts.usage || '';
this.archiveable = Boolean(opts.archiveable);
this.index = opts.index || opts.name;
this.aliases = opts.aliases || [];
this.resolve = opts.resolve && Constants.Resolves.includes(opts.resolve) ? opts.resolve : 'GUILD'; //eslint-disable-line no-use-before-define
this.default = opts.default;
this.arguments = opts.arguments || [];
this.custom = Boolean(opts.custom);
this.display = opts.display || opts.name;
this.memberPermissions = opts.memberPermissions || [];
this.clientPermissions = opts.clientPermissions || [];
this._commandHandler = null;
}
async handle() {
this.client.logger.error(`No handle function found in ${this.moduleResolveable}.`);
}
async _parseArguments(params, guild, debug = false) {
const response = await this.commandHandler._parseArguments(params, this.arguments, guild, debug);
if(response.error) return response;
return { parsedArguments: response.parsedArguments, params: response.newArgs, error: false };
}
reason(executor) {
return `[${this.moduleResolveable}] Executed by ${executor.tag} (${executor.id}).`;
}
async _handleReset(message) {
await message.guild._removeSettings(this.index);
const msg = message.format('GENERAL_SETTINGRESET', { setting: this.resolveable });
return {
error: false,
msg
};
}
get commandHandler() {
if(this._commandHandler) return this._commandHandler;
this._commandHandler = this.client.registry.components.get('observer:commandHandler');
return this._commandHandler;
}
get moduleResolveable() {
return `${this.module.id}:${this.id}`;
}
}
module.exports = Setting;
const Constants = {
Resolves: [
'GUILD',
'USER'
]
};