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
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.
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 fichierindex 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
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.
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.
Avec pnpm : un fichier de plus
pnpm refuse d’installer un projet qui a esbuild quelque part dans ses dépendances (ici, à traverschapterjs) 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.