> ## Documentation Index
> Fetch the complete documentation index at: https://www.chapterjs.org/llms.txt
> Use this file to discover all available pages before exploring further.

# command()

> Tout ce que déclare un fichier de commande, chaque sorte d’option, les commandes de menu, et ce que reçoit la fonction run

`command()` déclare une commande slash, depuis n’importe quel fichier de `src/` ; son `name` est ce que les gens tapent après le `/`. Elle prend un objet, `CommandConfig`, et type `run` d’après lui. Avec un `type`, elle déclare à la place une [commande de menu](#commandes-de-menu), utilisée d’un clic droit sur un message ou une personne.

```ts src/commands/ping.ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import { command } from 'chapterjs';

export default command({
  name: 'ping',
  description: 'Replies with Pong!',
  async run({ interaction }) {
    await interaction.reply('Pong!');
  },
});
```

> [!NOTE]
>
> Comment écrire une commande, ses options, ses réponses et ses traductions est dans le [guide](https://www.chapterjs.org/fr/commands.md), et les commandes de menu dans [leur propre page](https://www.chapterjs.org/fr/commands/menus.md). Cette page liste ce qui existe.

## command()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
command<Options extends CommandOptions = {}, Where extends CommandWhere = 'guild', Type extends MenuType | undefined = undefined>(
  config: Type extends MenuType ? MenuConfig<Type, Where> : CommandConfig<Options, Where>
): Type extends MenuType ? MenuDeclaration<Type, Where> : CommandDeclaration<Options, Where>
```

Déclare une commande. Exportez le résultat depuis n’importe quel fichier de `src/`.

Une commande slash : `name` est ce que les gens tapent après le `/` (`'mod ban'` pour `/mod ban`). Une commande de menu, avec `type` : utilisée d’un clic droit sur un message (`'message'`) ou sur une personne (`'user'`), `name` étant ce qu’affiche le menu.

`Options`, `Where` et `Type` sont déduits de ce que vous passez : vous ne les écrivez jamais.

### CommandDeclaration

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
interface CommandDeclaration<Options extends CommandOptions = CommandOptions, Where extends CommandWhere = CommandWhere>
```

Ce que renvoie `command()` : une déclaration que le framework trouve dans les exports d’un fichier. Elle garde les options et l’endroit que le fichier a déclarés.

**config** `CommandConfig\<Options, Where\>`

Ce que le fichier a donné à `command()`, pas encore vérifié.

## CommandConfig

Ce qu’un fichier de commande donne à `command()` : ce qu’est la commande et ce qu’elle fait.

**name** `CommandName` *required*

Ce que les gens tapent après le `/` : `'ping'` est `/ping`. Une sous-commande s’écrit avec ses parents : `'mod ban'` est `/mod ban`, `'mod roles add'` est `/mod roles add`.

**description** `string`

Ce que fait la commande, affiché sous son nom (1 à 100 caractères). Ici, avec `locales` pour ses traductions ; ou laissée de côté, et chaque texte de la commande (description, options, leurs choix, traductions) vient des fichiers de langue du projet. L’un ou l’autre.

**run** `(context: CommandContext\<Options, Where\>) =\> unknown` *required*

Ce qu’il faut faire quand quelqu’un utilise la commande.

**options** `CommandOptions`

Ce que l’utilisateur peut remplir (25 options au plus).

**locales** `CommandLocales\<Options\>`

La commande dans d’autres langues : Discord montre à chaque personne les noms et descriptions de sa langue. Votre code reçoit toujours les noms déclarés ci-dessus, quelle que soit la langue.

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#localization)

**permissions** `readonly PermissionName[]`

Les permissions dont un membre a besoin pour utiliser la commande. Les administrateurs d’un serveur peuvent changer qui la voit dans les réglages du serveur.

**where** `CommandWhere`

Où la commande peut être utilisée : `'guild'` (sur les serveurs, par défaut), `'dm'` (en messages privés avec le bot) ou `'both'`. Ce que reçoit `run` suit.

**nsfw** `boolean`

N’afficher la commande que dans les salons soumis à une limite d’âge.

**ephemeral** `boolean`

Rendre les réponses de la commande visibles seulement par qui l’a utilisée.

**cooldown** `Cooldown`

Combien de temps attendre avant que la commande puisse être utilisée à nouveau : `'10s'` pour chaque personne, ou `{ user, channel, guild }` pour chaque endroit. Quelqu’un qui l’utilise trop tôt reçoit une réponse privée qui dit quand il pourra.

**autocomplete** `CommandAutocomplete\<Options, Where\>`

Des suggestions qui viennent de votre bot pendant que la personne tape, pour les options nommées ici (une option `string`, `integer` ou `number` sans `choices`) : chaque fonction reçoit ce qu’elle a tapé et renvoie les suggestions. La personne peut quand même taper autre chose.

**type** `undefined`

Omis pour une commande slash. `'message'` ou `'user'` en fait une commande de menu, utilisée d’un clic droit sur un message ou une personne.

### CommandName

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type CommandName = string
```

Le nom d’une commande slash : lettres minuscules, chiffres, `-` et `_`, 32 caractères au plus (`'ping'`). Une sous-commande s’écrit avec ses parents, séparés par des espaces : `'mod ban'` est `/mod ban`, `'mod roles add'` est `/mod roles add` (Discord n’autorise rien de plus profond).

### CommandWhere

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandWhere = 'guild' | 'dm' | 'both'
```

Où une commande peut être utilisée : sur les serveurs (`'guild'`), en messages privés avec le bot (`'dm'`), ou les deux.

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#interaction-contexts)

### Cooldown

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
Cooldown = Duration | { readonly user?: Duration; readonly channel?: Duration; readonly guild?: Duration }
```

Combien de temps attendre avant que la commande puisse être utilisée à nouveau : une durée, pour chaque personne ; ou une par endroit, chacune facultative : `user` pour chaque personne, `channel` pour chaque salon, `guild` pour chaque serveur (pas pour une commande de messages privés). Quelqu’un qui l’utilise trop tôt reçoit une réponse privée qui dit quand il pourra, et `run` ne tourne pas.

**user** `Duration`

Chaque personne attend autant entre deux utilisations, où qu’elle soit.

**channel** `Duration`

Chaque salon attend autant, quel que soit qui l’a utilisée.

**guild** `Duration`

Chaque serveur attend autant, quel que soit qui l’a utilisée, et où.

### Duration

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
Duration = `${number}${'s' | 'm' | 'h' | 'd'}${string}`
```

Une durée, sous forme d’un nombre et d’une unité : `s`, `m`, `h` ou `d`, comme `'30s'`, `'10m'`, `'2h'`, `'1d'`. Plusieurs parties s’additionnent : `'1h30m'`.

## Les options

### CommandOptions

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandOptions = Readonly<Record<string, CommandOption>>
```

Les options d’une commande, par nom. Un nom est fait de lettres minuscules, de chiffres, de `-` et de `_`, 32 caractères au plus.

### CommandOption

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandOption = StringOption | NumberOption | ChannelOption | SimpleOption
```

Une option d’une commande. Chaque sorte a ces champs :

**type** `string` *required*

La sorte d’option : `'string'`, `'integer'`, `'number'`, `'boolean'`, `'user'`, `'role'`, `'channel'`, `'mentionable'` ou `'attachment'`.

**description** `string`

À quoi sert l’option, affiché sous son nom (1 à 100 caractères). Ici quand la commande a sa `description` ici ; sinon dans le fichier de la langue par défaut du projet.

**required** `boolean`

Si l’utilisateur doit la remplir. Par défaut, elle est facultative.

### StringOption

Un texte que l’utilisateur tape, ou choisit parmi des `choices`.

**type** `'string'` *required*

La sorte d’option : un texte.

**choices** `readonly string[] | Readonly\<Record\<string, string\>\>`

Les seules valeurs que l’utilisateur peut choisir (25 au plus) : une liste, ou un objet dont les clés sont ce que voit l’utilisateur et les valeurs ce que reçoit votre code.

**minLength** `number`

Le texte le plus court accepté, en caractères (0 à 6000).

**maxLength** `number`

Le texte le plus long accepté, en caractères (1 à 6000).

### NumberOption

Un nombre entier (`integer`) ou n’importe quel nombre (`number`).

**type** `'integer' | 'number'` *required*

La sorte d’option : un nombre entier, ou n’importe quel nombre.

**choices** `readonly number[] | Readonly\<Record\<string, number\>\>`

Les seules valeurs que l’utilisateur peut choisir (25 au plus) : une liste, ou un objet dont les clés sont ce que voit l’utilisateur et les valeurs ce que reçoit votre code.

**min** `number`

La plus petite valeur acceptée.

**max** `number`

La plus grande valeur acceptée.

Pour une option `'integer'`, `min`, `max` et les choix doivent être des nombres entiers.

### ChannelOption

Un salon que l’utilisateur choisit.

**type** `'channel'` *required*

La sorte d’option : un salon.

**channelTypes** `readonly ChannelType[]`

Les sortes de salons qui peuvent être choisies. Par défaut, toutes. Les valeurs sont celles de [`ChannelType`](https://www.chapterjs.org/fr/reference/enums#channeltype).

### SimpleOption

Vrai ou faux, un utilisateur, un rôle, un utilisateur ou un rôle, ou un fichier.

**type** `'boolean' | 'user' | 'role' | 'mentionable' | 'attachment'` *required*

La sorte d’option : ce que l’utilisateur choisit.

### OptionValuesOf

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
OptionValuesOf<Options extends CommandOptions>
```

Les valeurs des options, typées d’après leur déclaration : une option obligatoire est toujours là, une facultative peut être `undefined`. C’est le type de `options` dans `run`.

| `type` | Valeur |
| - | - |
| `'string'` | `string` |
| `'integer'` | `number` |
| `'number'` | `number` |
| `'boolean'` | `boolean` |
| `'user'` | [`User`](https://www.chapterjs.org/fr/reference/user) |
| `'role'` | [`Role`](https://www.chapterjs.org/fr/reference/role) |
| `'channel'` | [`Channel`](https://www.chapterjs.org/fr/reference/channels) |
| `'mentionable'` | `User \| Role` |
| `'attachment'` | [`Attachment`](https://www.chapterjs.org/fr/reference/data#attachment) |

Avec `choices`, la valeur est l’union des choix : `'red' | 'green'` pour `choices: ['red', 'green']`, `1 | 2` pour `choices: { Small: 1, Large: 2 }`.

## Autocomplétion

### CommandAutocomplete

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandAutocomplete<Options extends CommandOptions, Where extends CommandWhere>
```

L’`autocomplete` d’une commande : une fonction par option dont les suggestions viennent de votre bot pendant que la personne tape, par le nom de l’option. Seule une option `string`, `integer` ou `number` sans `choices` peut en avoir une. La fonction renvoie les suggestions (25 au plus, Discord les affiche dans cet ordre), ou une promesse de celles-ci : Discord attend 3 secondes. La personne peut quand même taper autre chose.

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
{
  readonly [Name in <les options qui peuvent avoir des suggestions>]?: (
    context: AutocompleteContext<Value, Options, Where>
  ) => readonly Suggestion<Value>[] | Promise<readonly Suggestion<Value>[]>;
}
```

`Value` est `string` pour une option `string`, `number | undefined` pour une option `integer` ou `number` dans le contexte, et `string` ou `number` dans les suggestions. Quand aucune option ne peut avoir de suggestions, aucune clé n’est acceptée, et l’éditeur dit pourquoi.

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#autocomplete)

### AutocompleteContext

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
AutocompleteContext<Value, Options extends CommandOptions, Where extends CommandWhere>
```

Ce que reçoit une fonction d’`autocomplete`, chaque fois que la personne tape dans son option. Rien ne peut y être répondu : les suggestions sont ce que renvoie la fonction.

**value** `Value` *required*

Ce que la personne a tapé jusque-là dans l’option : un texte, peut-être vide, pour une option `string` ; pour une option `integer` ou `number`, un nombre, ou `undefined` tant que ce qu’elle a tapé n’en est pas encore un.

**options** `OptionsSoFar\<Options\>` *required*

Ce que la personne a rempli jusque-là, cette option comprise.

**user** `User` *required*

Qui tape.

**locale** `Locale` *required*

La langue de la personne : suggérez dans celle-ci quand vous le pouvez.

**t** `Translator`

Les textes du projet dans la langue de la personne, quand le projet a une langue. Voir [`Translator`](https://www.chapterjs.org/fr/reference/messages#translator).

L’endroit suit `where`, comme [`CommandContext`](#commandcontext) sans son `interaction` : sur un serveur `guild`, `member` et `channel` ([`CommandInGuild`](#commandinguild)) ; en messages privés seulement `channel` ([`CommandInDm`](#commandindm)) ; avec `'both'`, `if (guild)` dit lequel c’est ([`CommandInPrivate`](#commandinprivate)).

### OptionsSoFar

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
OptionsSoFar<Options extends CommandOptions>
```

Les options telles que la personne les a remplies jusque-là, pendant qu’elle tape dans l’une d’elles : chaque option peut manquer, une option `user`, `role`, `channel`, `mentionable` ou `attachment` est son identifiant.

### Suggestion

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
Suggestion<Value extends string | number> = Value | { name: string; value: Value }
```

Une suggestion pour une option : une valeur, affichée telle quelle, ou `{ name, value }` pour afficher un texte (1 à 100 caractères) et recevoir une autre valeur. La valeur est un texte (100 caractères au plus) pour une option `string`, un nombre pour une option `integer` ou `number`.

**name** `string` *required*

Ce que la personne voit dans la liste (1 à 100 caractères).

**value** `Value` *required*

Ce que reçoit votre `run` quand elle la choisit.

## Ce que reçoit run

### CommandContext

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandContext<Options extends CommandOptions = CommandOptions, Where extends CommandWhere = 'guild'>
```

Ce que reçoit la fonction `run` d’une commande. Il suit `where` : sur un serveur, le serveur, le membre et le salon sont là ; en messages privés, ils n’existent pas ; dans les deux, `if (guild)` dit lequel c’est, pour tout à la fois.

Quoi que dise `where`, il a :

**options** `OptionValuesOf\<Options\>` *required*

Ce que l’utilisateur a rempli.

**user** `User` *required*

Qui a utilisé la commande.

**t** `Translator`

Les textes des fichiers de langue, dans la bonne langue. Seulement quand le projet a une langue : voir [`TranslationContext`](https://www.chapterjs.org/fr/reference/messages#translationcontext).

Et le reste suit `where` :

| `where` | Le reste du contexte |
| - | - |
| `'guild'` (par défaut) | `CommandInGuild` |
| `'dm'` | `CommandInDm` |
| `'both'` | `CommandInGuild \| CommandInPrivate` |

### CommandInGuild

Ce que reçoit une commande utilisée sur un serveur à propos de l’endroit où elle a été utilisée.

**interaction** `GuildCommandInteraction` *required*

L’utilisation de la commande : de quoi répondre.

**guild** `Guild` *required*

Le serveur où la commande a été utilisée.

**member** `GuildMember` *required*

Qui a utilisé la commande, en tant que membre du serveur.

**channel** `GuildTextBasedChannel` *required*

Le salon où la commande a été utilisée.

### CommandInDm

Ce que reçoit une commande utilisée seulement en messages privés : pas de serveur.

**interaction** `DmCommandInteraction` *required*

L’utilisation de la commande : de quoi répondre.

**channel** `DMChannel` *required*

La conversation privée où la commande a été utilisée.

### CommandInPrivate

Ce que reçoit une commande qui fonctionne aux deux endroits quand elle est utilisée dans un message privé : `guild` est `null`, et le vérifier dit le reste.

**interaction** `PrivateCommandInteraction` *required*

L’utilisation de la commande : de quoi répondre.

**guild** `null` *required*

Pas de serveur : la commande a été utilisée dans un message privé.

**member** `null` *required*

Pas de membre : la personne est `user`.

**channel** `DMChannel` *required*

La conversation privée où la commande a été utilisée.

Les interactions elles-mêmes sont décrites dans [Interaction](https://www.chapterjs.org/fr/reference/interaction.md).

## Traductions

### CommandLocales

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
CommandLocales<Options extends CommandOptions = CommandOptions> = {
  readonly [Language in Locale]?: CommandTranslation<Options>;
}
```

Les traductions d’une commande, par langue. Les clés sont les valeurs de [`Locale`](https://www.chapterjs.org/fr/reference/enums#locale) : `fr`, `de`, `es-ES`...

### CommandTranslation

La traduction d’une commande dans une langue. Tout est facultatif : ce qui n’est pas traduit est affiché tel que déclaré.

**name** `string`

Le nom de la commande dans cette langue (mêmes règles qu’un nom).

**description** `string`

La description de la commande dans cette langue (1 à 100 caractères).

**options** `\{ readonly [Name in keyof Options]?: OptionTranslation \}`

La traduction de chaque option, par le nom déclaré dans `options`.

### OptionTranslation

La traduction d’une option. Tout est facultatif.

**name** `string`

Le nom de l’option dans cette langue (mêmes règles qu’un nom).

**description** `string`

La description de l’option dans cette langue (1 à 100 caractères).

**choices** `\{ readonly [Choice: string]?: string \}`

Comment s’appelle chaque choix dans cette langue. Les clés sont les choix tels que déclarés : les valeurs d’une liste, ou les clés d’un objet. Chaque valeur fait de 1 à 100 caractères.

## Commandes de menu

```ts src/commands/quote.ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import { command } from 'chapterjs';

export const quote = command({
  type: 'message',
  name: 'Citer',
  async run({ interaction, message }) {
    await interaction.reply(`> ${message.content}`);
  },
});
```

### MenuType

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type MenuType = 'message' | 'user';
```

Ce sur quoi s’utilise une commande de menu, dans le menu que les gens ouvrent d’un clic droit (ou d’un appui long) : un message (`'message'`) ou une personne (`'user'`).

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#application-command-object-application-command-types)

### MenuConfig

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
interface MenuConfig<Type extends MenuType = 'message', Where extends CommandWhere = 'guild'>
```

Ce qu’un fichier donne à `command()` pour une commande de menu : une commande utilisée sur un message ou une personne, depuis le menu d’un clic droit. Elle n’a ni description ni options : ce qu’elle reçoit est ce sur quoi elle a été utilisée.

**type** `Type` *required*

Ce sur quoi la commande s’utilise : `'message'` (un clic droit sur un message) ou `'user'` (un clic droit sur une personne).

**name** `string` *required*

Ce qu’affiche le menu (1 à 32 caractères) : les majuscules et les espaces sont permis, comme `'Signaler le message'`.

**run** `(context: MenuContext\<Type, Where\>) =\> unknown` *required*

Ce qu’il faut faire quand quelqu’un utilise la commande.

**locales** `MenuLocales`

Le nom dans d’autres langues : Discord montre à chaque personne le nom de sa langue.

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#localization)

**permissions** `readonly PermissionName[]`

Les permissions qu’un membre doit avoir pour utiliser la commande. Les administrateurs du serveur peuvent changer qui la voit dans les paramètres du serveur.

**where** `CommandWhere`

Où la commande peut être utilisée : `'guild'` (sur les serveurs, par défaut), `'dm'` (en messages privés avec le bot) ou `'both'`. Ce que reçoit `run` en dépend.

**nsfw** `boolean`

N’afficher la commande que dans les salons réservés aux adultes.

**ephemeral** `boolean`

Rendre les réponses de la commande visibles seulement par qui l’a utilisée.

**cooldown** `Cooldown`

Combien de temps attendre avant de pouvoir réutiliser la commande : `'10s'` pour chaque personne, ou `{ user, channel, guild }` pour chaque endroit.

**description** `never`

Une commande de menu n’a pas de description : Discord n’affiche que son nom.

**options** `never`

Une commande de menu n’a pas d’options : elle reçoit ce sur quoi elle a été utilisée.

**autocomplete** `never`

Une commande de menu n’a pas d’options pour lesquelles suggérer des valeurs.

### MenuDeclaration

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
interface MenuDeclaration<Type extends MenuType = MenuType, Where extends CommandWhere = CommandWhere>
```

Ce que renvoie `command()` pour une commande de menu.

**config** `MenuConfig\<Type, Where\>`

Ce que le fichier a donné à `command()`, pas encore vérifié.

### MenuContext

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type MenuContext<Type extends MenuType = 'message', Where extends CommandWhere = 'guild'>
```

Ce que reçoit la fonction `run` d’une commande de menu : ce sur quoi elle a été utilisée (`message`, ou `target` et `targetMember`), qui l’a utilisée, et l’endroit, qui suit `where` comme celui d’une commande slash ([`CommandInGuild`](#commandinguild), [`CommandInDm`](#commandindm), [`CommandInPrivate`](#commandinprivate)).

**user** `User` *required*

Qui a utilisé le menu.

**message** `GuildMessage | PrivateMessage | DmMessage`

Avec `type: 'message'` : le message sur lequel le menu a été utilisé. Un `GuildMessage` sur un serveur, un `PrivateMessage` en message privé pour une commande `where: 'both'`, un `DmMessage` avec `where: 'dm'`.

**target** `User`

Avec `type: 'user'` : la personne sur laquelle le menu a été utilisé.

**targetMember** `GuildMember | null`

Avec `type: 'user'`, sur un serveur : cette personne en tant que membre du serveur, ou `null` quand elle n’y est pas (ou plus). `null` en message privé ; absent avec `where: 'dm'`.

**t** `Translator`

Les textes du projet dans la langue de la personne, quand le projet a une langue. Voir [`Translator`](https://www.chapterjs.org/fr/reference/messages#translator).

### MenuLocales

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type MenuLocales = { readonly [Language in Locale]?: MenuTranslation }
```

Les traductions d’une commande de menu, par langue.

### MenuTranslation

La traduction d’une commande de menu dans une langue : son nom.

**name** `string`

Le nom affiché dans le menu dans cette langue (1 à 32 caractères).

## Les limites

Ce que déclare un fichier est vérifié à son chargement, par rapport aux limites de Discord, avec un message qui dit quoi écrire :

| Quoi | Limite |
| - | - |
| Un nom (commande, option, nom traduit) | Lettres minuscules, chiffres, `-` et `_`, 32 caractères au plus |
| Une description (commande, option, description traduite) | 1 à 100 caractères |
| Profondeur d’une commande | Une commande, un groupe et une sous-commande : 3 mots au plus dans `name` |
| Options d’une commande | 25 au plus |
| Choix d’une option | 1 à 25, chacun affiché en 1 à 100 caractères, aucun en double |
| `minLength`, `maxLength` | Nombres entiers entre 0 et 6000, `minLength` pas au-dessus de `maxLength` |
| `min`, `max` | `min` pas au-dessus de `max` ; nombres entiers pour une option `'integer'` |
| Les noms traduits des options | Pas deux options avec le même nom dans une langue |
| `cooldown` | Une durée d’une seconde au moins ; pas de `guild` pour une commande avec `where: 'dm'` |
| `autocomplete` | Une fonction par option, pour une option `string`, `integer` ou `number` sans `choices` |
| Le nom d’une commande de menu (et ses traductions) | 1 à 32 caractères, majuscules et espaces permis, pas d’espace à un bout |
| Commandes de menu | 15 utilisées sur un message et 15 sur une personne ; une commande slash, un menu de message et un menu de personne peuvent avoir le même nom |
| Les suggestions (vérifiées à l’envoi) | 25 au plus (les premières sont gardées), chacune affichée en 1 à 100 caractères (coupée au-delà), une valeur texte de 100 caractères au plus, un nombre pour une option nombre, entier pour une option `'integer'` |

[Documentation de Discord](https://docs.discord.com/developers/interactions/application-commands#application-command-object-application-command-naming)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.