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' ] };