From 8c2698687a53bf8b64cf1fa570436fae80d1ba48 Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Sat, 5 Jun 2021 18:23:58 -0400 Subject: [PATCH] Add arg infinite support --- framework/Argument.js | 1 + framework/Dispatcher.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/framework/Argument.js b/framework/Argument.js index c235bdf6..1a4ca556 100644 --- a/framework/Argument.js +++ b/framework/Argument.js @@ -10,6 +10,7 @@ module.exports = class Argument { this.max = options.max; this.oneOf = options.oneOf; this.default = options.default; + this.infinite = options.infinite || false; this.avatarSize = options.avatarSize || 2048; this.validator = options.validate; this.parser = options.parse; diff --git a/framework/Dispatcher.js b/framework/Dispatcher.js index 8475be12..29144d71 100644 --- a/framework/Dispatcher.js +++ b/framework/Dispatcher.js @@ -37,6 +37,25 @@ module.exports = class CommandDispatcher { const finalResult = { flags: parsed }; for (let i = 0; i < command.args.length; i++) { const arg = command.args[i]; + if (arg.infinite) { + const infinite = parsed.slice(i); + const parsedArgs = []; + for (const parsedArg of infinite) { + if (arg.isEmpty(parsedArg, msg, arg)) { + if (arg.default) { + finalResult[arg.name] = typeof arg.default === 'function' ? arg.default(msg) : arg.default; + continue; + } else { + return `The "${arg.label || arg.name}" argument is required.`; + } + } + const valid = await arg.validate(parsedArg, msg, arg); + if (!valid) return `An invalid value was provided for one of the "${arg.label || arg.name}" arguments.`; + parsedArgs.push(await arg.parse(parsedArg, msg, arg)); + } + finalResult[arg.name] = parsedArgs; + break; + } const parsedArg = parsed._[i]; if (arg.isEmpty(parsedArg, msg, arg)) { if (arg.default) {