> ## 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.

# Vue d’ensemble

> Trouver chaque propriété et méthode de ce que reçoivent vos fonctions : serveurs, membres, salons, messages

ChapterJS donne à votre code des **structures** : un serveur, un membre, un salon, un message... Chacune a des propriétés à lire et des méthodes pour agir. Tout est typé, donc votre éditeur complète les noms et souligne les erreurs avant que le bot ne tourne. Vous ne créez jamais une structure : vos [commandes](https://www.chapterjs.org/fr/commands.md), vos [événements](https://www.chapterjs.org/fr/events.md) et vos [composants](https://www.chapterjs.org/fr/components.md) les reçoivent.

> [!NOTE]
>
> Cet onglet liste tout. Comment écrire un bot avec est dans le guide, en commençant par le [démarrage rapide](https://www.chapterjs.org/fr/quickstart.md).

## Les structures

> [card] [Guild](https://www.chapterjs.org/fr/reference/guild.md)
>
> Un serveur : ses membres, rôles, salons, bannissements.

> [card] [GuildMember](https://www.chapterjs.org/fr/reference/member.md)
>
> Un utilisateur dans un serveur : surnom, rôles, permissions, modération.

> [card] [User](https://www.chapterjs.org/fr/reference/user.md)
>
> Un compte Discord, le même dans chaque serveur.

> [card] [Role](https://www.chapterjs.org/fr/reference/role.md)
>
> Un rôle d’un serveur : permissions, position, membres.

> [card] [Salons](https://www.chapterjs.org/fr/reference/channels)
>
> Salons textuels, vocaux, catégories, forums, fils et salons privés.

> [card] [Message](https://www.chapterjs.org/fr/reference/message.md)
>
> Un message : répondre, modifier, réagir, épingler.

> [card] [Interaction](https://www.chapterjs.org/fr/reference/interaction.md)
>
> Quelqu’un a utilisé une commande, un bouton, un menu ou un formulaire, et attend une réponse.

> [card] [GuildEmoji](https://www.chapterjs.org/fr/reference/emoji.md)
>
> Un emoji personnalisé d’un serveur.

> [card] [Invite](https://www.chapterjs.org/fr/reference/invite.md)
>
> Une invitation vers un serveur.

> [card] [Webhook](https://www.chapterjs.org/fr/reference/webhook.md)
>
> Un moyen de publier dans un salon sous n’importe quel nom.

Ce avec quoi s’écrivent vos fichiers a ses propres pages : [command()](https://www.chapterjs.org/fr/reference/command.md), [event()](https://www.chapterjs.org/fr/reference/event.md) et [chaque événement](https://www.chapterjs.org/fr/reference/events.md), [button()](https://www.chapterjs.org/fr/reference/button.md), [select()](https://www.chapterjs.org/fr/reference/select.md), [modal()](https://www.chapterjs.org/fr/reference/modal.md), [embed()](https://www.chapterjs.org/fr/reference/embed.md), la [mise en page](https://www.chapterjs.org/fr/reference/layout.md) d’un message et [task()](https://www.chapterjs.org/fr/reference/task.md). Les types partagés ont chacun une page : [options des messages](https://www.chapterjs.org/fr/reference/message-options.md), [options](https://www.chapterjs.org/fr/reference/options.md), [données](https://www.chapterjs.org/fr/reference/data.md), [permissions](https://www.chapterjs.org/fr/reference/permissions.md), [énumérations](https://www.chapterjs.org/fr/reference/enums.md), [helpers](https://www.chapterjs.org/fr/reference/helpers.md) et [erreurs](https://www.chapterjs.org/fr/reference/errors.md).

## Trois règles

**1. Une propriété ne coûte jamais rien**

`guild.name`, `member.roles`, `guild.channels`... lisent ce dont le bot se souvient. Elles sont instantanées et n’envoient jamais de requête à Discord.

**2. Une méthode fetch demande à Discord**

Les méthodes qui commencent par `fetch` renvoient une promesse. Quand elles récupèrent une seule chose par son identifiant, elles regardent d’abord ce dont le bot se souvient et ne demandent à Discord que si elle n’y est pas. Passez `{ force: true }` pour demander à Discord quand même.

**3. Les autres méthodes agissent**

`member.ban()`, `channel.send()`, `message.delete()`... font quelque chose sur Discord et renvoient une promesse. Mettez toujours `await` devant.

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import type { Guild } from 'chapterjs';

async function example(guild: Guild) {
  console.log(guild.name, guild.roles.size); // instantané
  const owner = await guild.fetchOwner(); // en mémoire, sinon demandé à Discord
  await owner.send(`Bonjour de la part de ${guild.name} !`); // fait sur Discord
}
```

## Les noms sont en camelCase

Discord nomme ses champs comme `rate_limit_per_user`. Dans ChapterJS, vous lisez et écrivez toujours `rateLimitPerUser` : le framework traduit dans les deux sens, à l’intérieur des embeds et des options aussi.

## Les listes sont des Maps

`guild.members`, `guild.roles`, `guild.channels`, `channel.messages`... sont des [`Map`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Map) JavaScript que vous pouvez seulement lire, avec l’identifiant comme clé :

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import type { Guild } from 'chapterjs';

function example(guild: Guild) {
  const role = guild.roles.get('123456789012345678');
  const names = [...guild.channels.values()].map(channel => channel.name);
  return { role, names };
}
```

Ce que contient une `Map` est ce dont le bot se souvient, ce qui n’est pas toujours tout : voir [Mémoire](https://www.chapterjs.org/fr/memory.md).

## Les identifiants

Un identifiant Discord (un `Snowflake`) est un texte fait de chiffres, comme `'175928847299117063'`. Ne le stockez jamais sous forme de nombre : il est trop grand et perdrait en précision.

Partout où une méthode prend un utilisateur, un rôle, un salon ou un message, vous pouvez passer son identifiant ou la structure elle-même.

## La raison

Les actions que les modérateurs peuvent voir dans le journal d’audit du serveur prennent une `reason`, qui y est affichée :

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import type { GuildMember } from 'chapterjs';

async function example(member: GuildMember) {
  await member.kick('Spam de liens d’invitation');
  await member.ban({ reason: 'Raid', deleteMessageSeconds: 3600 });
}
```

## Les limites sont vérifiées pour vous

Ce que vous passez est vérifié avant d’être envoyé : un message trop long, une taille d’image qui n’existe pas ou une exclusion de plus de 28 jours lève une erreur qui dit quelle est la limite. Les limites de débit de Discord sont gérées par le framework : une requête attend son tour.

Quand Discord refuse une action (une permission manquante, quelque chose qui n’existe plus...), la méthode lève une erreur : voir [Erreurs](https://www.chapterjs.org/fr/reference/errors.md).

## Afficher dans la console

`console.log(guild)` affiche le nom de la classe et les données de la structure avec des noms en camelCase. `toJSON()` renvoie ces données sous forme d’objet simple. Aucun des deux n’affiche de secret : un [webhook](https://www.chapterjs.org/fr/reference/webhook.md) laisse son token de côté.


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