Passer au contenu principal
Un projet créé avec create chapterjs, à partir du modèle minimal, ressemble à ceci. Tout ce que fait votre bot vit dans src/ ; le reste est de la configuration que vous touchez rarement.
my-bot
.chapterjs
public
src
presence.ts
.env
.env.example
.gitignore
package.json
tsconfig.json

Modèles

create chapterjs propose cinq modèles. minimal est présélectionné : un fichier, et le reste de ce site pour le faire grandir. Les autres sont des bots complets : lisez-les une fois le framework connu, ou partez de l’un d’eux. Chaque modèle sauf minimal a ses textes en deux langues (en-US et fr), une présence et un fichier de test. levels a besoin du Message Content Intent, pour entendre chaque message : chapterjs dev dit où l’activer.

src/ : ce qu’un fichier exporte dit ce qu’il est

ChapterJS ne vous demande jamais d’enregistrer quoi que ce soit. Il charge chaque fichier de src/, où qu’il soit et quel que soit son nom, et fait tourner ce que les fichiers exportent, fabriqué avec l’une de ses fonctions : Tous s’importent du même endroit, et un fichier peut en déclarer autant que vous voulez. Le modèle tickets met tout ce qui touche aux tickets dans src/tickets/ : les commandes, le formulaire, les boutons et leurs textes, et son tickets.ts déclare à la fois un store et un événement. Un fichier qui déclare plusieurs choses ressemble à ceci :
src/moderation/ban.ts
Tout fichier qui n’exporte rien de tout ça est à vous : src/lib/greet.ts, src/db/index.ts, ce que vous voulez. Il est chargé avec les autres, et vos fichiers l’importent comme d’habitude.
Comment écrire chaque sorte de déclaration est dans Commandes, Événements, Boutons et Tâches.

Les noms

Deux choses se nomment elles-mêmes, parce que Discord les affiche ou parce qu’elles sont la chose même : une commande (name: 'ping') et un événement (name: 'memberJoin'). Tout le reste est nommé par son export : export const again = button(...) est le bouton again, export const report = task(...) la tâche report. Un export par défaut prend le nom de son fichier : export default button(...) dans src/again.ts est again aussi. Discord renvoie le nom d’un bouton à chaque clic, donc renommer l’export d’un bouton casse les boutons déjà sur Discord (ils répondent « This button is not available any more. ») ; déplacer le fichier ne change rien.
Deux choses ne peuvent pas porter le même nom : deux commandes nommées ping, ou deux boutons exportés sous confirm. La seconde est signalée avec les deux fichiers et laissée de côté.

Imports

Vos fichiers sont du TypeScript, exécuté directement par Node. Un import relatif n’a pas besoin d’extension, et un dossier avec un fichier index fonctionne aussi :
Écrire l’extension fonctionne aussi : '../lib/greet.ts'. Les paquets de node_modules s’importent comme d’habitude. Chaque fichier de src/ est surveillé : dans chapterjs dev, enregistrer src/lib/greet.ts recharge chaque fichier qui l’utilise. Un test à côté de votre code (greet.test.ts, greet.spec.ts) n’est jamais chargé par le bot : chapterjs test le lance.

public/ : les fichiers que votre bot envoie

Images, documents, sons : mettez-les dans public/, dans les dossiers que vous voulez, et envoyez-en un avec asset('photos/monday.png') dans les files d’un message. Votre éditeur liste les fichiers du dossier pendant que vous tapez, et chapterjs dev garde cette liste à jour pendant que vous ajoutez des fichiers. Un fichier est lu quand le message est envoyé. Voir Fichiers. Un son de public/ se joue dans un salon vocal de la même façon, avec voice.play(asset('intro.ogg')) : voir Jouer en vocal.

.chapterjs/ : généré, ignoré, supprimable sans risque

Ce dossier est écrit par ChapterJS, et git l’ignore. Il contient : Il est écrit quand vous installez votre projet (postinstall lance chapterjs sync) et à chaque démarrage de chapterjs dev ou chapterjs build. Si votre éditeur ne connaît pas les fichiers de public/ ou vos textes, lancez chapterjs sync : voir la référence du CLI.

.env

Deux valeurs, lues par chapterjs dev ; chapterjs start n’a besoin que de la première :
.env
Où les trouver est dans Votre application Discord. Le vrai environnement l’emporte sur le fichier : chez un hébergeur, vous donnez BOT_TOKEN dans ses réglages et n’envoyez aucun .env. Deux de plus, REDIS_URL et REDIS_PASSWORD, ne comptent que quand un store garde ses données dans Redis : voir Stockage.
Votre token est un mot de passe : ne le partagez jamais, et ne committez jamais .env. Les projets créés avec create chapterjs l’ignorent déjà dans git.

package.json

Les scripts de votre projet lancent le CLI : chapterjs est la seule dépendance de votre bot, à la version exacte qu’avait create chapterjs ("chapterjs": "0.3.0", sans ^) : votre projet ne change de version que quand vous lancez la commande que chapterjs dev vous donne. TypeScript et @types/node sont des dépendances de développement : elles vérifient votre code, et ne servent pas à le faire tourner.

tsconfig.json

Il ne contient que des options du compilateur et une référence vers ./.chapterjs, qui est là où se trouve le vrai projet : chaque fichier de src/, plus ce que le framework écrit sur votre projet. Gardez-le ainsi.
Un simple tsc ne vérifie rien dans un projet ChapterJS. Utilisez le script typecheck, qui lance tsc -b : c’est ce que suit votre éditeur aussi.

Avec pnpm : un fichier de plus

pnpm refuse d’installer un projet qui a esbuild quelque part dans ses dépendances (ici, à travers chapterjs) tant qu’on ne lui a pas dit si le script d’installation d’esbuild peut tourner. Il ne peut pas, et esbuild n’en a pas besoin. create chapterjs écrit la réponse pour vous ; dans un projet créé autrement, créez-le à côté de package.json :
pnpm-workspace.yaml

Commandes

Une commande slash, des options typées pour vous.

Événements

Une réaction à tout ce qui se passe sur Discord.