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}}",
|
||||
"invalidNumber": "Argument must be a number. 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": {
|
||||
"user": "You are missing permissions: {{permissions}}"
|
||||
|
||||
+2
-1
@@ -5,7 +5,8 @@
|
||||
"invalidInt": "El argumento debe ser un entero. Recibido: {{value}}",
|
||||
"invalidNumber": "El argumento debe ser un numero. 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": {
|
||||
"user": "Te faltan permisos: {{permissions}}"
|
||||
|
||||
+2
-1
@@ -5,7 +5,8 @@
|
||||
"invalidInt": "L argument doit etre un entier. Recu: {{value}}",
|
||||
"invalidNumber": "L argument doit etre un nombre. 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": {
|
||||
"user": "Tu n as pas les permissions: {{permissions}}"
|
||||
|
||||
@@ -43,6 +43,12 @@ export const advancedCommand = defineCommand({
|
||||
required: true,
|
||||
descriptionKey: "args.count",
|
||||
},
|
||||
{
|
||||
name: "user",
|
||||
type: "user",
|
||||
required: true,
|
||||
descriptionKey: "args.user",
|
||||
},
|
||||
{
|
||||
name: "ratio",
|
||||
type: "number",
|
||||
@@ -55,12 +61,6 @@ export const advancedCommand = defineCommand({
|
||||
required: false,
|
||||
descriptionKey: "args.enabled",
|
||||
},
|
||||
{
|
||||
name: "user",
|
||||
type: "user",
|
||||
required: true,
|
||||
descriptionKey: "args.user",
|
||||
},
|
||||
{
|
||||
name: "channel",
|
||||
type: "channel",
|
||||
@@ -76,7 +76,7 @@ export const advancedCommand = defineCommand({
|
||||
],
|
||||
examples: [
|
||||
{
|
||||
args: '"hello world" 5 1.5 true @Arthur #general @Moderators',
|
||||
args: '"hello world" 5 @Arthur 1.5 true #general @Moderators',
|
||||
descriptionKey: "examples.full",
|
||||
},
|
||||
{
|
||||
|
||||
@@ -59,6 +59,16 @@ export const parsePrefixArgs = async (
|
||||
errors.push(parsed.error);
|
||||
}
|
||||
|
||||
if (tokens.length > 0) {
|
||||
errors.push({
|
||||
key: "errors.args.tooMany",
|
||||
vars: {
|
||||
count: tokens.length,
|
||||
extras: tokens.join(" "),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return { values, errors };
|
||||
};
|
||||
|
||||
|
||||
@@ -1,18 +1,29 @@
|
||||
import type { BotCommand, BotCommandInput } from "../types/command.js";
|
||||
|
||||
export const defineCommand = (input: BotCommandInput): BotCommand => {
|
||||
// Discord requires all required slash options before any optional ones.
|
||||
const normalizedArgs = [...(input.args ?? [])].sort((a, b) => {
|
||||
if (a.required === b.required) {
|
||||
return 0;
|
||||
const assertRequiredArgsBeforeOptional = (input: BotCommandInput): void => {
|
||||
const args = input.args ?? [];
|
||||
let firstOptionalArgName: string | null = null;
|
||||
|
||||
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 {
|
||||
meta: input.meta,
|
||||
args: normalizedArgs,
|
||||
args: [...(input.args ?? [])],
|
||||
permissions: input.permissions ?? [],
|
||||
examples: input.examples ?? [],
|
||||
execute: input.execute,
|
||||
|
||||
Reference in New Issue
Block a user