Today we're announcing the ability to create class based modules! To get started, install
npm install @sern/handler@latest
Quick List of changes!
Incorporate class based modules into your project instead of the traditional commandModule or eventModule
Extend the new CommandExecutable or EventExecutable
import { CommandType, CommandExecutable, type Args, type Context } from "@sern/handler";
import { publish } from "../plugins/publish.js";
import { serendipityOnly } from "../plugins/serendipityOnly.js";
export default class extends CommandExecutable<CommandType.Both> {
type = CommandType.Both as const;
description = 'What is the meaning of life?'
override onEvent = [
serendipityOnly()
];
override plugins = [
publish(),
];
execute = async (ctx: Context, args: Args) => {
await ctx.reply('42')
};
}
execute must not be a method of the class. It should be as above, a property on the class!
import { CommandType, EventExecutable, type EventType } from "@sern/handler";
import type { GuildMember } from 'discord.js'
export default class extends EventExecutable<EventType.Discord> {
type = EventType.Discord as const;
execute = (member: GuildMember) => {
console.log(member)
};
}
Now, you might ask why this feature was added.
Simply put, to give flexibility to the developers.
I believe that you should build your own structures however you might like and customize to your liking.
In addition, decorators now unofficially work with modules!
Feel free to use TypeScript experimental decorators to augment and customize your classes.
The next update will bring sern v2 with some important features. Here are some things to watch out for.