After developing several Discord bots in JS, I decided to switch to TypeScript however I was not satisfied with the way we listen on an event that is very "JavaScript".
So last night, I decided to create a very small framework to develop a Discord bot using three TypeScript decorators: @Discord
, @On()
and @Once()
.
How does it works ?
It's quite simple, when you decorate your class with @Discord
, it's instantiated internally, so when a certain event is triggered, the framework will simply call the corresponding class method and pass it all the arguments provided by triggering this event.
So, how ?
The full documentation can be found here but here is a simple example:
import { Discord, On, Client // Use the Client that are provided by @typeit/discord } from "@typeit/discord"; // You must import the types from @types/discord.js import { Message } from "discord.js"; // Decorate the class with the @Discord decorator @Discord export class AppDiscord { private static _client: Client; private _prefix: string = "!"; private _sayHelloMessage: string = "hello !"; private _commandNotFoundMessage: string = "command not found..."; static start() { this._client = new Client(); // In the login method, you must specify the glob string to load your classes (for the framework). // In this case that's not necessary because the entry point of your application is this file. this._client.login( "YOUR_TOKEN", `${__dirname}/*Discord.ts` // glob string to load the classes ); } // When the "message" event is triggered, this method is called with a specific payload (related to the event) @On("message") async onMessage(message: Message, client: Client) { // Your logic... if (AppDiscord._client.user.id !== message.author.id) { if (message.content[0] === this._prefix) { const cmd = message.content.replace(this._prefix, "").toLowerCase(); switch (cmd) { case "hello": message.reply(this._sayHelloMessage); break; default: message.reply(this._commandNotFoundMessage); break; } } } } } // Start your app AppDiscord.start();
Et voilà !
Top comments (1)
vramen vramen interesting