Bien démarrer

Structure d’un module

Vue d’ensemble de la structure de dossiers attendue pour un module Glyria.

Un module Glyria est un package NPM standard qui suit une structure de dossiers spécifique. Lorsqu’il est déclaré dans glyria.config.ts, Glyria découvre et charge automatiquement ses commandes et événements.

@glyria/your-module/
  src/
    commands/
    events/
    index.ts
  dist/
    commands/
    events/
    index.js
  package.json

dist/ vs src/

Glyria privilégie toujours dist/ par rapport à src/. Si dist/ existe, il est utilisé — sinon Glyria utilise src/ comme fallback.

DossierUtilisé lorsque
dist/Le package est buildé (production)
src/Le package n’est pas encore buildé (dev local)

commands/

Les commandes slash exposées par le module. Glyria analyse récursivement ce dossier et charge chaque fichier, exactement comme votre propre src/commands/.

dist/
  commands/
    ban.js
    kick.js
    config/
      logs.js
Les sous-dossiers servent uniquement à l’organisation — chaque fichier, peu importe sa profondeur, est chargé comme une commande.

events/

Les listeners d’événements Discord exposés par le module. Chargés en même temps que vos propres src/events/.

dist/
  events/
    guildMemberAdd.js
    messageCreate.js

index.ts

Le point d’entrée principal du module. Tous les exports de ce fichier sont automatiquement disponibles dans le projet de l’utilisateur sous le namespace du module — aucun import requis.

// @glyria/timers — src/index.ts
export const createJob = () => { ... }
export const deleteJob = () => { ... }
// Dans le projet de l'utilisateur — aucun import requis
const job = Timers.createJob(() => {
    console.log("runs every minute")
}, "* * * * *")

Le namespace est dérivé du nom du package en PascalCase — @glyria/timersTimers.

package.json

Le champ main doit pointer vers le point d’entrée buildé de votre module. Il est recommandé de déclarer @glyria/bot comme peer dependency afin d’éviter d’embarquer plusieurs instances du framework dans le projet de l’utilisateur.

{
  "name": "@glyria/your-module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "peerDependencies": {
    "@glyria/bot": "*"
  }
}
Utiliser peerDependencies permet au module de réutiliser l’instance de @glyria/bot déjà installée dans le projet de l’utilisateur, au lieu d’embarquer sa propre copie.

Exemple minimal

Un module n’a pas besoin d’avoir à la fois commands/ et events/. Si un dossier n’existe pas, Glyria l’ignore silencieusement. Un module qui expose uniquement des fonctions utilitaires via son index.ts est totalement valide.

@glyria/timers/
  dist/
    index.js    ← uniquement des exports, aucune commande ni événement
  package.json
Copyright © 2026