💼 Event Manager
The EventManager is the object that holds together the nyx event system.
It consists of:
- The
EventBuscollection for storing buses, mapped by their IDs. - An
EventBusfor Bot events. - An
EventBusfor Client events. - An
EventBusfor Manager events.
As well as methods to interact with them.
👷 Creation
You can create a custom event manager by either:
- Extending
DefaultEventManagerfrom@nyx-discord/framework(recommended). - Implementing
EventManagerfrom@nyx-discord/core.
Then you can pass it to your bot:
class MyEventManager extends DefaultEventManager {
public myCustomPublicMethod() {}
}
const myBot = Bot.create((bot: NyxBot) => ({
// ...
events: new MyEventManager(/** ... */),
}));
myBot.getEventManager().myCustomPublicMethod() // Works!
The Bot class is able to infer the type of your custom manager via generics, so accessing any custom public method or
property will work without errors.
👂 Client event bus
The manager holds a EventBus that wraps the Discord.js Client, for client events. You can get it with
EventManager#getClientBus(), and you can directly subscribe to it with EventManager#subscribeClient().
You can use the utility abstraction on @nyx-discord/framework for a subscriber for a Client,
the AbstractDJSClientSubscriber. It receives a generic which is the handled event, where you can use the
discord.js Event enum. Said value will be used to safely type the arguments of the event handler.
import { Events } from 'discord.js';
import { AbstractDJSClientSubscriber } from '@nyx-discord/framework';
class InteractionCreateSubscriber
extends AbstractDJSClientSubscriber<Events.InteractionCreate> {
protected override readonly event = Events.InteractionCreate;
public handleEvent(
meta: EventDispatchMeta,
interaction: Interaction,
): void {
// Since the built-in client event bus has a bot, this will never throw an error.
const bot = meta.getBot(true);
bot.getLogger().info(`Interaction ${interaction.id} received.`);
}
}
const subscriber = new InteractionCreateSubscriber();
await bot.getEventManager().subscribeClient(subscriber);
// same as:
const bus = bot.getEventManager().getClientBus();
await bus.subscribe(subscriber);