add count to split unnamed args

This commit is contained in:
LenAnderson
2024-06-23 18:17:01 -04:00
parent a69d4147cb
commit b6da9fecf9
2 changed files with 5 additions and 2 deletions

View File

@ -36,6 +36,7 @@ export class SlashCommand {
* @param {(namedArguments:NamedArguments|NamedArgumentsCapture, unnamedArguments:string|SlashCommandClosure|(string|SlashCommandClosure)[])=>string|SlashCommandClosure|Promise<string|SlashCommandClosure>} [props.callback] * @param {(namedArguments:NamedArguments|NamedArgumentsCapture, unnamedArguments:string|SlashCommandClosure|(string|SlashCommandClosure)[])=>string|SlashCommandClosure|Promise<string|SlashCommandClosure>} [props.callback]
* @param {string} [props.helpString] * @param {string} [props.helpString]
* @param {boolean} [props.splitUnnamedArgument] * @param {boolean} [props.splitUnnamedArgument]
* @param {Number} [props.splitUnnamedArgumentCount]
* @param {string[]} [props.aliases] * @param {string[]} [props.aliases]
* @param {string} [props.returns] * @param {string} [props.returns]
* @param {SlashCommandNamedArgument[]} [props.namedArgumentList] * @param {SlashCommandNamedArgument[]} [props.namedArgumentList]
@ -53,6 +54,7 @@ export class SlashCommand {
/**@type {(namedArguments:{_pipe:string|SlashCommandClosure, _scope:SlashCommandScope, _abortController:SlashCommandAbortController, [id:string]:string|SlashCommandClosure}, unnamedArguments:string|SlashCommandClosure|(string|SlashCommandClosure)[])=>string|SlashCommandClosure|Promise<string|SlashCommandClosure>}*/ callback; /**@type {(namedArguments:{_pipe:string|SlashCommandClosure, _scope:SlashCommandScope, _abortController:SlashCommandAbortController, [id:string]:string|SlashCommandClosure}, unnamedArguments:string|SlashCommandClosure|(string|SlashCommandClosure)[])=>string|SlashCommandClosure|Promise<string|SlashCommandClosure>}*/ callback;
/**@type {string}*/ helpString; /**@type {string}*/ helpString;
/**@type {boolean}*/ splitUnnamedArgument = false; /**@type {boolean}*/ splitUnnamedArgument = false;
/**@type {Number}*/ splitUnnamedArgumentCount;
/**@type {string[]}*/ aliases = []; /**@type {string[]}*/ aliases = [];
/**@type {string}*/ returns; /**@type {string}*/ returns;
/**@type {SlashCommandNamedArgument[]}*/ namedArgumentList = []; /**@type {SlashCommandNamedArgument[]}*/ namedArgumentList = [];

View File

@ -797,7 +797,7 @@ export class SlashCommandParser {
cmd.startUnnamedArgs = this.index - /\s(\s*)$/s.exec(this.behind)?.[1]?.length ?? 0; cmd.startUnnamedArgs = this.index - /\s(\s*)$/s.exec(this.behind)?.[1]?.length ?? 0;
cmd.endUnnamedArgs = this.index; cmd.endUnnamedArgs = this.index;
if (this.testUnnamedArgument()) { if (this.testUnnamedArgument()) {
cmd.unnamedArgumentList = this.parseUnnamedArgument(cmd.command?.unnamedArgumentList?.length && cmd?.command?.splitUnnamedArgument); cmd.unnamedArgumentList = this.parseUnnamedArgument(cmd.command?.unnamedArgumentList?.length && cmd?.command?.splitUnnamedArgument, cmd?.command?.splitUnnamedArgumentCount);
cmd.endUnnamedArgs = this.index; cmd.endUnnamedArgs = this.index;
if (cmd.name == 'let') { if (cmd.name == 'let') {
const keyArg = cmd.namedArgumentList.find(it=>it.name == 'key'); const keyArg = cmd.namedArgumentList.find(it=>it.name == 'key');
@ -846,7 +846,7 @@ export class SlashCommandParser {
testUnnamedArgumentEnd() { testUnnamedArgumentEnd() {
return this.testCommandEnd(); return this.testCommandEnd();
} }
parseUnnamedArgument(split) { parseUnnamedArgument(split, splitCount = null) {
/**@type {SlashCommandClosure|String}*/ /**@type {SlashCommandClosure|String}*/
let value = this.jumpedEscapeSequence ? this.take() : ''; // take the first, already tested, char if it is an escaped one let value = this.jumpedEscapeSequence ? this.take() : ''; // take the first, already tested, char if it is an escaped one
let isList = split; let isList = split;
@ -855,6 +855,7 @@ export class SlashCommandParser {
let assignment = new SlashCommandUnnamedArgumentAssignment(); let assignment = new SlashCommandUnnamedArgumentAssignment();
assignment.start = this.index; assignment.start = this.index;
while (!this.testUnnamedArgumentEnd()) { while (!this.testUnnamedArgumentEnd()) {
if (split && splitCount && listValues.length >= splitCount) split = false;
if (this.testClosure()) { if (this.testClosure()) {
isList = true; isList = true;
if (value.length > 0) { if (value.length > 0) {