Guide

GlyriaBus

Un bus d'événements typé avec support des middlewares pour votre bot Discord.

Qu'est-ce que GlyriaBus ?

GlyriaBus est un bus d'événements typé intégré à glyria.js. Il vous permet de créer des canaux de communication internes entre les différentes parties de votre bot — commandes, événements, services — sans les coupler entre eux.

Considérez-le comme un système pub/sub typé avec support des middlewares.

Utilisation de base

Définissez vos événements et leurs types de payload, puis créez un bus :

// src/utils/useBus.ts
type BotEvents = {
  userBanned: [guildId: string, userId: string, reason: string]
  levelUp: [userId: string, level: number]
  messageLogged: [content: string]
}

export const useBus = new GlyriaBus<BotEvents>()

Comme src/utils/ est auto-importé, useBus est disponible partout sans import.

Écouter des événements

Utilisez .on() pour écouter un événement :

// src/events/ready.ts
export default event()
  .setEvent(Events.ClientReady)
  .once()
  .execute(() => {
    useBus.on("userBanned", (guildId, userId, reason) => {
      console.log(`Utilisateur ${userId} banni de ${guildId} : ${reason}`)
    })
  })

.on() retourne une fonction de désinscription :

const unregister = useBus.on("levelUp", (userId, level) => {
  console.log(`${userId} a atteint le niveau ${level}`)
})

// plus tard
unregister()

Émettre des événements

Utilisez .emit() pour déclencher un événement depuis n'importe où dans votre bot :

// src/commands/moderation/ban.ts
export default new GlyriaCommand()
  .setName("ban")
  .setDescription("Bannir un utilisateur du serveur")
  .execute(async (ctx) => {
    // ... logique de ban

    await useBus.emit("userBanned", ctx.guild.id, targetId, reason)
  })

Middleware

Utilisez .use() pour ajouter des middlewares qui s'exécutent avant les listeners — utile pour la journalisation, la validation ou la transformation des données :

useBus.use("userBanned", async (guildId, userId, reason, next) => {
  console.log(`[middleware] événement ban reçu`)
  await next() // appelle le middleware ou listener suivant
})

useBus.on("userBanned", (guildId, userId, reason) => {
  // s'exécute après le middleware
})

Les middlewares s'exécutent dans l'ordre d'enregistrement. Appeler next() passe le contrôle au middleware ou listener suivant. Ne pas appeler next() stoppe la chaîne.

Supprimer des listeners

Utilisez .off() pour supprimer manuellement un middleware ou un listener :

useBus.off("userBanned", myMiddleware)

Ou utilisez la fonction de désinscription retournée par .on() :

const stop = useBus.on("levelUp", handler)
stop() // supprime le listener

Vider tous les listeners

Utilisez .clear() pour supprimer tous les listeners d'un événement donné :

useBus.clear("userBanned")

API

MéthodeDescription
.use(event, middleware)Enregistre un middleware pour un événement
.on(event, listener)Enregistre un listener — retourne une fonction de désinscription
.off(event, middleware)Supprime un middleware spécifique
.emit(event, ...args)Émet un événement avec des arguments typés
.clear(event)Supprime tous les listeners d'un événement
Copyright © 2026