mirror of
https://github.com/kevinthedang/discord-ollama.git
synced 2025-12-12 11:56:06 -05:00
NodeJS TypeScript Setup (#1)
* bot can login to discord * changed node and npm to iron lts * added typescript runnables * more dev scripts * readme update on scripts * event handling skeleton * fixed compiler target issue
This commit is contained in:
43
src/utils/events.ts
Normal file
43
src/utils/events.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import type { ClientEvents, Awaitable, Client } from 'discord.js';
|
||||
|
||||
// Export events through here to reduce amount of imports
|
||||
export { Events } from 'discord.js';
|
||||
|
||||
export type LogMethod = (...args: unknown[]) => void;
|
||||
export type EventKeys = keyof ClientEvents; // only wants keys of ClientEvents object
|
||||
|
||||
// Event properties
|
||||
export interface EventProps {
|
||||
client: Client;
|
||||
log: LogMethod;
|
||||
}
|
||||
export type EventCallback<T extends EventKeys> = (
|
||||
props: EventProps,
|
||||
...args: ClientEvents[T]
|
||||
) => Awaitable<unknown>; // Method can be synchronous or async, unknown so we can return anything
|
||||
|
||||
// Event interface
|
||||
export interface Event<T extends EventKeys = EventKeys> {
|
||||
key: T;
|
||||
callback: EventCallback<T>;
|
||||
}
|
||||
|
||||
export function event<T extends EventKeys>(key: T, callback: EventCallback<T>): Event<T> {
|
||||
return { key, callback };
|
||||
}
|
||||
|
||||
export function registerEvents(client: Client, events: Event[]): void {
|
||||
for (const { key, callback } of events) {
|
||||
client.on(key, (...args) => {
|
||||
// Create a new log method for this event
|
||||
const log = console.log.bind(console, `[Event: ${key}]`);
|
||||
|
||||
// Handle Errors, call callback, log errors as needed
|
||||
try {
|
||||
callback({ client, log }, ...args);
|
||||
} catch (error) {
|
||||
log('[Uncaught Error]', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user