Exemples

Module

Un exemple concret de module Glyria.

Vue d’ensemble

Cette page présente un module Glyria minimal mais complet — @glyria/timers — servant de référence pour créer vos propres modules.

index.ts

Le point d’entrée de votre module. C’est ici que vous vous connectez au cycle de vie du bot et exposez votre API publique.

// src/index.ts
import { globalBus, GlyriaBus } from "@glyria/bot"
import { Events } from "discord.js"

type TimersBusEvents = {
  ready: []
}

export const bus = new GlyriaBus<TimersBusEvents>()

globalBus.on("botReady", async (client) => {
  await bus.emit("ready")

  client.bus.on(Events.MessageCreate, (message) => {
    if (message.content === "!ping") {
      message.reply("Pong! From @glyria/timers !")
    }
  })
})

globalBus

globalBus est le bus d’événements interne de Glyria. L’événement botReady est déclenché une fois que le client Discord est connecté et prêt. C’est le point d’entrée recommandé pour toute logique d’initialisation de module.

client.bus

client.bus est le bus d’événements Discord.js. Il correspond directement à l’enum Events de discord.js, mais passe par la couche de middleware de Glyria — ce qui signifie que les middlewares définis par l’utilisateur et ceux des autres modules sont appliqués. Utiliser client.on directement contourne tous ces middlewares.

// ✅ Passe par les middlewares utilisateur et module
client.bus.on(Events.MessageCreate, handler)

// ⚠️ Contourne tous les middlewares — à utiliser uniquement si vous savez ce que vous faites
client.on(Events.MessageCreate, handler)

Auto-imports

Les auto-imports sont une fonctionnalité pensée pour le projet utilisateur (src/composables/, src/utils/). À l’intérieur d’un module, ils ne sont pas disponibles — utilisez toujours des imports explicites.

// ❌ Ne vous reposez pas sur les auto-imports dans un module
const db = useDatabase()

// ✅ Faites toujours des imports explicites
import { useDatabase } from "./composables/useDatabase.js"
const db = useDatabase()

Exposer une API publique

Tout ce qui est exporté depuis index.ts devient automatiquement disponible dans le projet de l’utilisateur sous le namespace de votre module — aucun import requis de son côté.

// src/index.ts
export const createJob = (fn: () => void, cron: string) => { ... }
export const deleteJob = (id: string) => { ... }
// Dans le projet utilisateur — aucun import requis
Timers.createJob(() => {
    console.log("runs every minute")
}, "* * * * *")

Exposer un Bus

Si votre module émet ses propres événements, exportez directement le bus depuis index.ts. Les utilisateurs pourront ensuite l’écouter via le namespace de votre module.

// src/index.ts
type TimersBusEvents = {
  ready: []
}

export const bus = new GlyriaBus<TimersBusEvents>()
// Dans le projet utilisateur — aucun import requis
Timers.bus.on("ready", () => {
    console.log("Timers module is ready!")
})

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

Copyright © 2026