Guide

Events

Listen to Discord events with GlyriaEvent.

Overview

Events in glyria.js are file-based, just like commands. Every file in src/events/ is automatically loaded at startup.

Each event file exports a GlyriaEvent instance as default:

// src/events/ready.ts
export default new GlyriaEvent()
  .setEvent(Events.ClientReady)
  .once()
  .setHandler((client) => {
    console.log(`✅ Logged in as ${client.user.tag}`)
  })
GlyriaEvent and Events are available globally — no import needed.

Listening once

Use .once() to listen to an event only the first time it fires — useful for the ClientReady event:

export default new GlyriaEvent()
  .setEvent(Events.ClientReady)
  .once()
  .setHandler((client) => {
    console.log(`${client.user.tag} is online`)
  })

Without .once(), the handler fires every time the event is emitted.

Message events

// src/events/messageCreate.ts
export default new GlyriaEvent()
  .setEvent(Events.MessageCreate)
  .setHandler(async (message) => {
    if (message.author.bot) return

    if (message.content.startsWith("!ping")) {
      await message.reply("Pong!")
    }
  })

Available events

GlyriaEvent accepts any event from discord.js's Events enum. Common ones:

EventDescription
Events.ClientReadyBot is online and ready
Events.MessageCreateA message is sent
Events.GuildMemberAddA member joins a server
Events.GuildMemberRemoveA member leaves a server
Events.GuildBanAddA member is banned
Events.InteractionCreateAny interaction is received

For the full list, refer to the discord.js Events documentation.

Organizing files

Like commands, subfolders in src/events/ are for organization only:

src/events/
  ready.ts
  guild/
    memberAdd.ts
    memberRemove.ts
  messages/
    messageCreate.ts
Keep one GlyriaEvent per file for clarity and maintainability.
Copyright © 2026