more versatile command option definitions

This commit is contained in:
Erik 2022-03-31 01:26:25 +03:00
parent 2dd3def245
commit 77aa07e251
Signed by: Navy.gif
GPG Key ID: 811EC0CD80E7E5FB

View File

@ -2,6 +2,7 @@ const Command = require('./Command.js');
const { Commands: CommandsConstant } = require('../../../constants/'); const { Commands: CommandsConstant } = require('../../../constants/');
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
const DiscordClient = require('../../DiscordClient.js'); const DiscordClient = require('../../DiscordClient.js');
const CommandOption = require('../CommandOption.js');
class SlashCommand extends Command { class SlashCommand extends Command {
@ -15,8 +16,8 @@ class SlashCommand extends Command {
if (!options) return null; if (!options) return null;
if (!options.description?.length) throw new Error(`Slash commands MUST have a description: ${options.name}`); if (!options.description?.length) throw new Error(`Slash commands MUST have a description: ${options.name}`);
super(client, { /*
name: options.name, name: options.name,
module: options.module, module: options.module,
description: options.description, description: options.description,
tags: options.tags, tags: options.tags,
@ -25,12 +26,29 @@ class SlashCommand extends Command {
archivable: options.archivable, archivable: options.archivable,
disabled: options.disabled, disabled: options.disabled,
guarded: options.guarded, guarded: options.guarded,
showUsage: options.showUsage, showUsage: options.showUsage
*/
super(client, {
...options,
slash: true slash: true
}); });
this.options = [];
if(options.options) for (const opt of options.options) {
if (opt instanceof CommandOption) this.options.push(opt);
else if (opt.name instanceof Array) {
// Allows easy templating of subcommands that share arguments
const { name: names, description, ...opts } = opt;
for (const name of names) {
let desc = description;
if(description instanceof Array) desc = description[names.indexOf(name)] || 'Missing description';
this.options.push(new CommandOption({ name, description: desc, ...opts }));
}
} else this.options.push(new CommandOption(opt));
}
this.type = Object.keys(CommandsConstant.ApplicationCommandTypes).includes(options.type) ? options.type : 'CHAT_INPUT'; this.type = Object.keys(CommandsConstant.ApplicationCommandTypes).includes(options.type) ? options.type : 'CHAT_INPUT';
this.options = options.options || []; // this.options = options.options || [];
this.defaultPermission = options.defaultPermission || true; this.defaultPermission = options.defaultPermission || true;
} }