diff --git a/package.json b/package.json index 7709bd5..0047bd8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "commandbot", - "version": "3.0.0-s-beta1e", + "version": "3.0.0-rc1", "description": "A framework that helps you create your own Discord bot easier.", "main": "dist/cjs/index.js", "module": "dist/mjs/index.js", diff --git a/src/CommandManager.ts b/src/CommandManager.ts index 4c027ca..eaaa2e3 100644 --- a/src/CommandManager.ts +++ b/src/CommandManager.ts @@ -106,6 +106,8 @@ export class CommandManager { command.parameters.map((p, i) => { if (!p.optional && !paramsList[i]) { throw new MissingParameterError(p); + } else if (p.optional && !paramsList[i]) { + return; } switch (p.type) { case "mentionable": diff --git a/src/Parameter.ts b/src/Parameter.ts index 3e1e37f..4db288e 100644 --- a/src/Parameter.ts +++ b/src/Parameter.ts @@ -64,6 +64,26 @@ export class StringParameter extends InputParameter { if (parameter.type != "string") { throw new Error(`Parameter type mismatch`); } + if (parameter.choices) { + const match = parameter.choices.filter( + (c) => + c.name.toLowerCase() === value?.toString().toLowerCase() || + c.value.toLowerCase() === value?.toString().toLowerCase() + ); + if (match.length === 0) { + throw new Error( + `Parameter "${ + parameter.name + }" has incorrect value. Please enter one of the following values: ${parameter.choices + .map((c) => [c.name, c.value]) + .flat(1) + .join(", ")}` + ); + } else { + super(parameter, match[0].value); + return; + } + } super(parameter, value?.toString()); } } @@ -72,7 +92,15 @@ export class BooleanParameter extends InputParameter { if (parameter.type != "boolean") { throw new Error(`Parameter type mismatch`); } - super(parameter, value ? true : false); + if (value?.toString().toLowerCase() === "true") { + super(parameter, true); + } else if (value?.toString().toLowerCase() === "false") { + super(parameter, false); + } else { + throw new Error( + `Cannot convert "${parameter.name}" parameter to boolean. Please enter either "true" or "false".` + ); + } } } export class NumberParameter extends InputParameter {