mirror of
https://github.com/arthur-pbty/flint.git
synced 2026-08-01 20:29:03 +02:00
feat: ajouter la gestion des erreurs pour trop d'arguments et mise à jour des commandes
This commit is contained in:
+2
-1
@@ -5,7 +5,8 @@
|
|||||||
"invalidInt": "Argument must be an integer. Received: {{value}}",
|
"invalidInt": "Argument must be an integer. Received: {{value}}",
|
||||||
"invalidNumber": "Argument must be a number. Received: {{value}}",
|
"invalidNumber": "Argument must be a number. Received: {{value}}",
|
||||||
"invalidBoolean": "Argument must be a boolean value. Received: {{value}}",
|
"invalidBoolean": "Argument must be a boolean value. Received: {{value}}",
|
||||||
"invalidUser": "Could not resolve a user from {{value}}"
|
"invalidUser": "Could not resolve a user from {{value}}",
|
||||||
|
"tooMany": "Too many arguments detected ({{count}}): {{extras}}. Usage: {{usage}}"
|
||||||
},
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"user": "You are missing permissions: {{permissions}}"
|
"user": "You are missing permissions: {{permissions}}"
|
||||||
|
|||||||
+2
-1
@@ -5,7 +5,8 @@
|
|||||||
"invalidInt": "El argumento debe ser un entero. Recibido: {{value}}",
|
"invalidInt": "El argumento debe ser un entero. Recibido: {{value}}",
|
||||||
"invalidNumber": "El argumento debe ser un numero. Recibido: {{value}}",
|
"invalidNumber": "El argumento debe ser un numero. Recibido: {{value}}",
|
||||||
"invalidBoolean": "El argumento debe ser un valor booleano. Recibido: {{value}}",
|
"invalidBoolean": "El argumento debe ser un valor booleano. Recibido: {{value}}",
|
||||||
"invalidUser": "No se pudo resolver un usuario desde {{value}}"
|
"invalidUser": "No se pudo resolver un usuario desde {{value}}",
|
||||||
|
"tooMany": "Se detectaron demasiados argumentos ({{count}}): {{extras}}. Uso: {{usage}}"
|
||||||
},
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"user": "Te faltan permisos: {{permissions}}"
|
"user": "Te faltan permisos: {{permissions}}"
|
||||||
|
|||||||
+2
-1
@@ -5,7 +5,8 @@
|
|||||||
"invalidInt": "L argument doit etre un entier. Recu: {{value}}",
|
"invalidInt": "L argument doit etre un entier. Recu: {{value}}",
|
||||||
"invalidNumber": "L argument doit etre un nombre. Recu: {{value}}",
|
"invalidNumber": "L argument doit etre un nombre. Recu: {{value}}",
|
||||||
"invalidBoolean": "L argument doit etre un booleen. Recu: {{value}}",
|
"invalidBoolean": "L argument doit etre un booleen. Recu: {{value}}",
|
||||||
"invalidUser": "Impossible de trouver un utilisateur depuis {{value}}"
|
"invalidUser": "Impossible de trouver un utilisateur depuis {{value}}",
|
||||||
|
"tooMany": "Trop d arguments ({{count}}) detectes: {{extras}}. Usage: {{usage}}"
|
||||||
},
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"user": "Tu n as pas les permissions: {{permissions}}"
|
"user": "Tu n as pas les permissions: {{permissions}}"
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ export const advancedCommand = defineCommand({
|
|||||||
required: true,
|
required: true,
|
||||||
descriptionKey: "args.count",
|
descriptionKey: "args.count",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "user",
|
||||||
|
type: "user",
|
||||||
|
required: true,
|
||||||
|
descriptionKey: "args.user",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "ratio",
|
name: "ratio",
|
||||||
type: "number",
|
type: "number",
|
||||||
@@ -55,12 +61,6 @@ export const advancedCommand = defineCommand({
|
|||||||
required: false,
|
required: false,
|
||||||
descriptionKey: "args.enabled",
|
descriptionKey: "args.enabled",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "user",
|
|
||||||
type: "user",
|
|
||||||
required: true,
|
|
||||||
descriptionKey: "args.user",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "channel",
|
name: "channel",
|
||||||
type: "channel",
|
type: "channel",
|
||||||
@@ -76,7 +76,7 @@ export const advancedCommand = defineCommand({
|
|||||||
],
|
],
|
||||||
examples: [
|
examples: [
|
||||||
{
|
{
|
||||||
args: '"hello world" 5 1.5 true @Arthur #general @Moderators',
|
args: '"hello world" 5 @Arthur 1.5 true #general @Moderators',
|
||||||
descriptionKey: "examples.full",
|
descriptionKey: "examples.full",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -59,6 +59,16 @@ export const parsePrefixArgs = async (
|
|||||||
errors.push(parsed.error);
|
errors.push(parsed.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tokens.length > 0) {
|
||||||
|
errors.push({
|
||||||
|
key: "errors.args.tooMany",
|
||||||
|
vars: {
|
||||||
|
count: tokens.length,
|
||||||
|
extras: tokens.join(" "),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return { values, errors };
|
return { values, errors };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,29 @@
|
|||||||
import type { BotCommand, BotCommandInput } from "../types/command.js";
|
import type { BotCommand, BotCommandInput } from "../types/command.js";
|
||||||
|
|
||||||
export const defineCommand = (input: BotCommandInput): BotCommand => {
|
const assertRequiredArgsBeforeOptional = (input: BotCommandInput): void => {
|
||||||
// Discord requires all required slash options before any optional ones.
|
const args = input.args ?? [];
|
||||||
const normalizedArgs = [...(input.args ?? [])].sort((a, b) => {
|
let firstOptionalArgName: string | null = null;
|
||||||
if (a.required === b.required) {
|
|
||||||
return 0;
|
for (const arg of args) {
|
||||||
|
if (!arg.required) {
|
||||||
|
firstOptionalArgName ??= arg.name;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.required ? -1 : 1;
|
if (firstOptionalArgName) {
|
||||||
});
|
throw new Error(
|
||||||
|
`Invalid argument order for command "${input.meta.name}": required argument "${arg.name}" cannot appear after optional argument "${firstOptionalArgName}". Declare all required arguments before optional ones.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const defineCommand = (input: BotCommandInput): BotCommand => {
|
||||||
|
assertRequiredArgsBeforeOptional(input);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
meta: input.meta,
|
meta: input.meta,
|
||||||
args: normalizedArgs,
|
args: [...(input.args ?? [])],
|
||||||
permissions: input.permissions ?? [],
|
permissions: input.permissions ?? [],
|
||||||
examples: input.examples ?? [],
|
examples: input.examples ?? [],
|
||||||
execute: input.execute,
|
execute: input.execute,
|
||||||
|
|||||||
Reference in New Issue
Block a user