galactic-bot/structure/interfaces/Setting.js

142 lines
5.2 KiB
JavaScript
Raw Normal View History

2020-04-08 18:08:46 +02:00
const Component = require('./Component.js');
2020-04-08 16:27:34 +02:00
2020-04-08 18:08:46 +02:00
class Setting extends Component {
2020-04-08 16:27:34 +02:00
2020-04-08 18:08:46 +02:00
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.premium = opts.premium || 0;
2020-04-08 18:08:46 +02:00
this.description = opts.description || `S_${opts.name.toUpperCase()}_DESCRIPTION`;
this.examples = opts.examples || [];
2020-07-26 22:10:55 +02:00
this.rawExamples = Boolean(opts.rawExamples);
this.usage = opts.usage || '';
this.archivable = opts.archivable === undefined ? true : Boolean(opts.archivable);
2020-04-08 18:08:46 +02:00
this.tags = opts.tags || [];
2020-04-08 18:08:46 +02:00
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
2020-04-08 18:08:46 +02:00
this.default = opts.default;
this.arguments = opts.arguments || [];
this.custom = Boolean(opts.custom);
// this.display = opts.display?.toLowerCase() || opts.name.toLowerCase();
2020-04-08 18:08:46 +02:00
this.memberPermissions = opts.memberPermissions || [];
this.clientPermissions = opts.clientPermissions || [];
this._commandHandler = null;
2020-04-08 18:08:46 +02:00
}
async handle() {
this.client.logger.error(`No handle function found in ${this.moduleResolveable}.`);
}
async _parseArguments(params, guild) {
const response = await this.commandHandler._parseArguments(params, this.arguments, guild);
if(response.error) return response;
2020-06-16 00:15:13 +02:00
return { parsedArguments: response.args, params: response.parameters.map((p) => p[0]), error: false };
}
2020-05-24 00:12:52 +02:00
/**
* 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
* @param {Function} resolver One of the resolver functions used to resolve the passed values into objects (should always be one of the mass resolvers due to the nature of this method, might break otherwise) NOTE: REMEMBER TO BIND 'this' ARG!
* @param {Guild} guild The guild for the resolver to use when resolving
* @param {Boolean} caseSensitive Whether or not the arguments are case sensitive
2020-05-24 00:12:52 +02:00
* @returns {Object}
* @memberof Resolver
*/
resolveMethod(args, valid, existing, resolver, guild, caseSensitive) {
return this.client.resolver.resolveMethod(args, valid, existing, resolver, guild, caseSensitive);
2020-05-24 00:12:52 +02:00
}
reason(executor) {
return `[${this.moduleResolveable}] Executed by ${executor.tag} (${executor.id}).`;
}
async _handleReset(message) {
await message.guild._removeSettings(this.index);
2020-05-24 00:12:52 +02:00
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}`;
}
get display() {
return this.name.toLowerCase();
}
2020-07-26 22:10:55 +02:00
usageEmbed(message, verbose = false) {
const { guild } = message;
const prefix = guild?.prefix || this.client.prefix;
const fields = [];
if (this.examples.length) {
fields.push({
name: `${message.format('GENERAL_EXAMPLES')}`,
value: this.examples.map((e) => this.rawExamples ? `\`${prefix}${e}\`` : `\`${prefix}${this.name} ${e}\``).join('\n')
});
}
if (this.aliases.length && verbose) {
fields.push({
name: `${message.format('GENERAL_ALIASES')}`,
value: this.aliases.join(', ')
});
}
if (this.arguments.length && verbose) {
fields.push({
name: `${message.format('GENERAL_ARGUMENTS')}`,
value: this.arguments.map((a) => `\`${a.types.length === 1 && a.types.includes('FLAG') ? '--' : ''}${a.name}${a.usage ? ` ${a.usage}` : ''}\`: ${message.format(`A_${a.name.toUpperCase()}_${this.name.toUpperCase()}_DESCRIPTION`)}`)
});
}
return {
author: {
name: `${this.name}${this.module ? ` (${this.module.resolveable})` : ''}`
},
description: stripIndents`\`${prefix}${this.name}${this.usage ? ` ${this.usage}` : ''}\`${this.guildOnly ? ' *(guild-only)*' : ''}
${message.format(this.description)}`,
fields
};
}
2020-04-08 18:08:46 +02:00
2020-04-08 16:27:34 +02:00
}
2020-04-08 18:08:46 +02:00
module.exports = Setting;
const Constants = {
Resolves: [
'GUILD',
'USER'
]
};