95 lines
3.1 KiB
JavaScript
95 lines
3.1 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 };
|
|
}
|
|
|
|
/**
|
|
* Resolves methods used primarily for settings, also deals with appending the arguments into existing lists
|
|
*
|
|
* @param {Array<String>} args The incoming arguments with the first element being the method ex. ['add','ban','kick']
|
|
* @param {Array<String>} valid An array of items to compare to, if an argument doesn't exist in this array it'll be skipped over
|
|
* @param {Array<String>} [existing=[]] Existing values in the array, valid elements will be appended to this
|
|
* @returns {Object}
|
|
* @memberof Resolver
|
|
*/
|
|
resolveMethod(args, valid, existing) {
|
|
return this.client.resolver.resolveMethod(args, valid, existing);
|
|
}
|
|
|
|
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.name.toLowerCase() });
|
|
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'
|
|
]
|
|
}; |