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

# ChapterJS

> Le framework Discord. Un dossier de fichiers devient un bot Discord rapide et typé de bout en bout.

[0.5.1
Cinq nouveaux modèles pour démarrer](https://www.chapterjs.org/fr/setup/project-structure.md#modèles)

# Le framework Discord

Un dossier de fichiers devient un bot Discord rapide et typé de bout en bout. Rien à configurer, rien à enregistrer, rien à installer pour le faire tourner.

```bash pnpm theme={"theme":{"light":"github-light","dark":"vesper"}}
pnpm create chapterjs
```

```bash npm theme={"theme":{"light":"github-light","dark":"vesper"}}
npm create chapterjs@latest
```

```bash yarn theme={"theme":{"light":"github-light","dark":"vesper"}}
yarn create chapterjs
```

```bash bun theme={"theme":{"light":"github-light","dark":"vesper"}}
bun create chapterjs
```

[Commencer ](https://www.chapterjs.org/fr/quickstart.md)

[ GitHub](https://github.com/chapterjs/chapterjs)

my-bot

Explorateur

src

commands

ping.ts

poll.ts

components

vote.ts

events

welcome.ts

.env

package.json

&#x20;src/commands/ping.ts

1
import{ command }from'chapterjs';

2



3
&#x20;   export defaultcommand(\{



4
name: 'ping',

5
description: 'Répond Pong !',



6
&#x20;   asyncrun(\{ interaction }) \{



7
await interaction.reply('Pong ! Bien joué 🏓');

8
},

9
});

&#x20;Terminal

\$ pnpm dev✓ Connected to My Server as my-botℹ Intents computed from your files: GUILDS, GUILD\_MEMBERS✓ 2 commands, 1 event, 1 component loaded↻ Reloaded in 12 ms, 2 commands, 1 event, 1 component loaded

\$

\# bot-testing

Alex

Aujourd’hui à 14:02

a utilisé /ping

My Bot
APP
Aujourd’hui à 14:02

Pong !

Alex

Aujourd’hui à 14:03

a utilisé /ping

My Bot
APP
Aujourd’hui à 14:03

Pong ! Bien joué 🏓

Envoyer un message dans #bot-testing

0

dépendance pour faire tourner un bot

100%

typé, aucun `any`

v10

API et gateway de Discord

1

commande pour commencer

En pratique

## L’export est l’API

Ce qu’un fichier exporte dit ce qu’il est. Une commande a son nom, un événement a son nom, un bouton est nommé par son export, et le même import fonctionne dans chaque fichier. Rien n’est enregistré, rien n’est annoté.

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

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

```ts src/events/welcome.ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import { event } from 'chapterjs';

export default event({
  name: 'memberJoin',
  async run({ member, guild }) {
    await member.send(`Bienvenue sur ${guild.name} !`);
  },
});
```

C’est tout. `/ping` est enregistrée sur Discord, le bot demande le Server Members Intent parce qu’un fichier en a besoin, et `member` et `guild` sont typés sans que vous écriviez un type.

Ce que vous obtenez

## Tout ce dont un bot a besoin, rien à configurer



command(\\\{ name: 'ping' \\})


&#x20;      &#x20;

command(\\\{ name: 'poll' \\})


&#x20;      &#x20;

event(\\\{ name: 'memberJoin' \\})


&#x20;      &#x20;

export const vote = button(...)


&#x20;    &#x20;
&#x20;    &#x20;

/ping


&#x20;      &#x20;

/poll


&#x20;      &#x20;

à l’arrivée d’un membre


&#x20;      &#x20;

un bouton


&#x20;  &#x20;

\### Les exports sont l’API


&#x20;    &#x20;

\`event(\{ name: 'memberJoin' })\` tourne quand quelqu’un arrive. \`command(\{ name: 'ping' })\` apparaît comme une commande slash. \`export const vote = button(...)\` est un bouton, avec un identifiant que vous n’écrivez jamais. Mettez-les dans les fichiers que vous voulez : pas de client, pas de script d’enregistrement, pas de liste d’intents.



enregistrer

en ligne

### Rechargement à chaud instantané

`chapterjs dev` recharge chaque fichier que vous enregistrez, et les fichiers qu’il importe. Un fichier cassé ne fait jamais planter le bot : sa dernière version qui fonctionnait continue de tourner.

options.targt

✗ Property 'targt' does not exist. Did you mean 'target'?

### Typé de bout en bout

Ce que reçoit votre fonction est typé d’après l’endroit où est le fichier et ce qu’il déclare : options de commande, membre d’un événement, salon d’un message. Les erreurs sont soulignées avant que le bot ne tourne.

GUILDS

GUILD\_MESSAGES

GUILD\_MEMBERS

MESSAGE\_CONTENT

### Intents déduits pour vous

Déduits de vos fichiers, jamais listés à la main. Un intent privilégié est nommé avec les fichiers qui en ont besoin et un lien vers la page du Developer Portal pour l’activer.

Ce qui s’est passé

Quoi faire

### Des erreurs en mots simples

Un token manquant, un bot absent de votre serveur, une permission qui manque au bot : chaque message dit ce qui s’est passé, puis quoi faire, avec le fichier et la ligne quand l’erreur est la vôtre.

### Rien à installer pour tourner

Seulement les modules intégrés de Node.js et TypeScript natif. Démarrage rapide, peu de mémoire, et aucune requête à Discord quand le bot connaît déjà la réponse.

### Les limites de Discord, gérées

Les limites de débit et la taille de ce que vous envoyez sont vérifiées et mises en file par le framework. Vous n’écrivez jamais de nouvelle tentative.

### Arrêt propre

Ctrl+C ou SIGTERM ferme proprement la session Discord, donc votre bot passe hors ligne immédiatement et aucun fantôme ne reste en ligne.

Démarrage rapide

## En ligne en trois étapes

01

### Créer

Lancez `pnpm create chapterjs`, choisissez un dossier et un modèle. Les dépendances sont installées pour vous.

02

### Configurer

Mettez `BOT_TOKEN` et `DEV_GUILD_ID` dans `.env`. Tout ce qui manque est expliqué avant que le bot ne se connecte.

03

### Lancer

Lancez `pnpm dev`. Votre bot rejoint votre serveur de test et se recharge à chaque enregistrement.

CLI

## Un seul CLI, du premier test à la production

Le même projet tourne pendant que vous l’écrivez et une fois en ligne. Un processus de dev et un processus de production peuvent même partager un token : le dev ne voit que votre serveur de test, la production l’ignore.

chapterjs dev
développement

<ul>
  <li>Tourne sur votre serveur de test uniquement</li>

  <li>Recharge chaque fichier que vous enregistrez</li>

  <li>Un fichier cassé garde sa dernière version qui fonctionnait</li>

  <li>Erreurs affichées avec le fichier et la ligne</li>
</ul>

chapterjs start
production

<ul>
  <li>Fait tourner ce que `chapterjs build` a vérifié et compilé</li>

  <li>Commandes enregistrées pour tout le monde</li>

  <li>Plusieurs processus pour un gros bot, tout seul</li>

  <li>Ignore votre serveur de test</li>
</ul>

## Votre bot est à une commande.

Créez un projet, ajoutez votre token, et lancez-le sur votre serveur de test.

[Lire le démarrage rapide ](https://www.chapterjs.org/fr/quickstart.md)

[ Étoile sur GitHub](https://github.com/chapterjs/chapterjs)


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