import type { DiscordMessage, DiscordReady } from "../vendor/external.ts"; import type { Snowflake } from "../util/Snowflake.ts"; import type { Session } from "../session/Session.ts"; import Message from "../structures/Message.ts"; export type RawHandler = (...args: [Session, number, ...T]) => void; export type Handler = (...args: T) => unknown; export type Ready = [DiscordReady]; export const READY: RawHandler = (session, shardId, payload) => { session.emit("ready", payload, shardId); }; export type MessageCreate = [DiscordMessage]; export const MESSAGE_CREATE: RawHandler = (session, _shardId, message) => { session.emit("messageCreate", new Message(session, message)); }; export type MessageUpdate = [DiscordMessage]; export const MESSAGE_UPDATE: RawHandler = (session, _shardId, new_message) => { session.emit("messageUpdate", new Message(session, new_message)); }; export type MessageDelete = [Snowflake]; export const MESSAGE_DELETE: RawHandler = (session, _shardId, deleted_message_id) => { session.emit("messageDelete", deleted_message_id); }; export const raw: RawHandler<[unknown]> = (session, shardId, data) => { session.emit("raw", data, shardId); }; export interface Events { "ready": Handler<[DiscordReady, number]>; "messageCreate": Handler<[Message]>; "messageUpdate": Handler<[Message]>; "messageDelete": Handler<[Snowflake]>; "raw": Handler<[unknown]>; }