Event Listeners
Listen to Discord gateway events with file-based handlers.
Event listeners react to Discord gateway events (messageCreate, guildMemberAdd, etc.). Each file in src/events/ exports a default EventListener — djs-core registers it on startup.
Event file names become the internal listener id (ready.ts → ready). Use Events.ClientReady, not the deprecated Events.Ready.
Basic listener
import { EventListener } from "@djs-core/runtime";import { ActivityType, Events } from "discord.js";
export default new EventListener() .event(Events.ClientReady) .run((client) => { console.log(`Logged in as ${client.user.tag}!`); client.user.setActivity({ name: "over your server", type: ActivityType.Watching, }); });Message events
import { EventListener } from "@djs-core/runtime";import { Events } from "discord.js";
export default new EventListener() .event(Events.MessageCreate) .run(async (client, message) => { if (message.author.bot) return; if (message.content === "!ping") { await message.reply("Pong!"); } });Member events
import { EventListener } from "@djs-core/runtime";import { Events } from "discord.js";
export default new EventListener() .event(Events.GuildMemberAdd) .run(async (client, member) => { console.log(`${member.user.tag} joined ${member.guild.name}`); });API
| Method | Description |
|---|---|
.event(Events.EventName) |
Discord event to subscribe to |
.run((client, ...args) => { ... }) |
Handler — receives client plus event-specific arguments from discord.js |
Gateway events need the right intents in djs.config.ts. The runtime defaults to Guilds only — add GuildMessages, GuildMembers, etc. when your listeners need them.