fbp-language 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,7 +23,7 @@ Puis, dans le `package.json` de ton projet :
23
23
  "start": "fbp run lancer"
24
24
  },
25
25
  "dependencies": {
26
- "fbp-language": "^1.1.2"
26
+ "fbp-language": "^1.1.3"
27
27
  }
28
28
  }
29
29
  ```
@@ -106,6 +106,9 @@ Dans `scripts/main.fbp` :
106
106
  discordConnexion()
107
107
  discordCommande("ping", "Pong !")
108
108
  discordCommande("bonjour", "Salut !")
109
+ discordCommandeEmbed("serveur-info", "Informations du serveur", "Voici les informations disponibles.", "#5865F2")
110
+ discordChamp("serveur-info", "Nom", "Mon serveur")
111
+ discordChamp("serveur-info", "Membres", "42")
109
112
  ```
110
113
 
111
114
  Associe `lancer` à `scripts/main.fbp` dans `commandes.fbp`, puis exécute `npx fbp run lancer`. Dans le portail développeur Discord, vérifie que le bot est invité sur ton serveur avec les scopes `bot` et `applications.commands`. Seul l'intent serveur (`Guilds`) est nécessaire.
@@ -114,7 +117,7 @@ FBP enregistre les commandes déclarées comme commandes slash globales de l'app
114
117
 
115
118
  ## Limites actuelles
116
119
 
117
- FBP est encore un interpréteur de base. Les paramètres de fonction, les conditions, les boucles, les valeurs de retour et les expressions arithmétiques ne sont pas encore implémentés. La connexion Discord utilise un token stocké dans `.env`. Les commandes slash répondent avec un texte fixe ; les options, paramètres, permissions avancées et conditions ne sont pas encore implémentés.
120
+ FBP est encore un interpréteur de base. Les paramètres de fonction, les conditions, les boucles, les valeurs de retour et les expressions arithmétiques ne sont pas encore implémentés. La connexion Discord utilise un token stocké dans `.env`. Les commandes slash peuvent répondre avec un texte fixe ou un embed défini avec `discordCommandeEmbed(nom, titre, description, couleur)`. Ajoute des champs avec `discordChamp(nomCommande, nomChamp, valeur)`. Les valeurs des embeds sont actuellement fixes : la récupération dynamique des informations du serveur, les options, paramètres, permissions avancées et conditions ne sont pas encore implémentés.
118
121
 
119
122
  ## Développement du dépôt
120
123
 
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const compiler_1 = require("./compiler");
10
10
  const errors_1 = require("./errors");
11
- const VERSION = "1.1.2";
11
+ const VERSION = "1.1.3";
12
12
  function help() {
13
13
  console.log(`FBP — French Bot Programming
14
14
 
package/dist/compiler.js CHANGED
@@ -217,7 +217,18 @@ class FbpCompiler {
217
217
  if (response === undefined)
218
218
  return;
219
219
  try {
220
- await interaction.reply(response);
220
+ if (response.type === "text") {
221
+ await interaction.reply(response.content);
222
+ }
223
+ else {
224
+ const embed = new discord_js_1.EmbedBuilder()
225
+ .setTitle(response.title)
226
+ .setDescription(response.description)
227
+ .setColor(Number.parseInt(response.color.slice(1), 16));
228
+ if (response.fields.length)
229
+ embed.addFields(response.fields.map(field => ({ name: field.name, value: field.value, inline: false })));
230
+ await interaction.reply({ embeds: [embed] });
231
+ }
221
232
  }
222
233
  catch (error) {
223
234
  this.output("Erreur Discord : " + (error instanceof Error ? error.message : String(error)));
@@ -236,7 +247,36 @@ class FbpCompiler {
236
247
  if (!/^[a-z0-9_-]{1,32}$/.test(commandName)) {
237
248
  throw new errors_1.FbpError("Le nom d'une commande slash doit contenir 1 à 32 caractères : lettres minuscules, chiffres, tirets ou underscores.", undefined, line);
238
249
  }
239
- this.discordCommands.set(commandName, values[1]);
250
+ this.discordCommands.set(commandName, { type: "text", content: values[1] });
251
+ return;
252
+ }
253
+ if (name === "discordCommandeEmbed") {
254
+ if (!this.discordClient)
255
+ throw new errors_1.FbpError("Appelle discordConnexion() avant de déclarer une commande.", undefined, line);
256
+ if (values.length !== 4 || values.some(value => typeof value !== "string")) {
257
+ throw new errors_1.FbpError("Utilisation : discordCommandeEmbed(nom, titre, description, couleur).", undefined, line);
258
+ }
259
+ const [commandName, title, description, color] = values;
260
+ if (!/^[a-z0-9_-]{1,32}$/.test(commandName))
261
+ throw new errors_1.FbpError("Le nom d'une commande slash doit contenir 1 à 32 caractères : lettres minuscules, chiffres, tirets ou underscores.", undefined, line);
262
+ if (!/^#[0-9a-fA-F]{6}$/.test(color))
263
+ throw new errors_1.FbpError("La couleur d'un embed doit être au format hexadécimal, par exemple #5865F2.", undefined, line);
264
+ this.discordCommands.set(commandName, { type: "embed", title, description, color, fields: [] });
265
+ return;
266
+ }
267
+ if (name === "discordChamp") {
268
+ if (values.length !== 3 || values.some(value => typeof value !== "string")) {
269
+ throw new errors_1.FbpError("Utilisation : discordChamp(nomCommande, nomChamp, valeur).", undefined, line);
270
+ }
271
+ const [commandName, fieldName, fieldValue] = values;
272
+ const command = this.discordCommands.get(commandName);
273
+ if (!command || command.type !== "embed")
274
+ throw new errors_1.FbpError("La commande « " + commandName + " » n'est pas un embed déclaré.", undefined, line);
275
+ if (command.fields.length >= 25)
276
+ throw new errors_1.FbpError("Un embed Discord ne peut pas contenir plus de 25 champs.", undefined, line);
277
+ if (!fieldName.trim() || !fieldValue.trim() || fieldName.length > 256 || fieldValue.length > 1024)
278
+ throw new errors_1.FbpError("Un champ doit avoir un nom (1 à 256 caractères) et une valeur (1 à 1024 caractères).", undefined, line);
279
+ command.fields.push({ name: fieldName, value: fieldValue });
240
280
  return;
241
281
  }
242
282
  if (name === "ping") {
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "fbp-language",
3
3
  "displayName": "FBP - French Bot Programming",
4
- "description": "Langage FBP avec prise en charge des commandes slash Discord.",
5
- "version": "1.1.2",
4
+ "description": "Langage FBP avec prise en charge des commandes slash et des embeds Discord.",
5
+ "version": "1.1.3",
6
6
  "type": "commonjs",
7
7
  "main": "dist/compiler.js",
8
8
  "bin": {