This commit is contained in:
Yuzu 2022-06-30 12:33:00 -05:00
parent 9e6a8699ff
commit 9b7e1b9b1b
7 changed files with 53 additions and 59 deletions

View File

@ -1 +1,39 @@
export * from "./MessageRelated.ts";
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<T extends unknown[]> = (...args: [Session, number, ...T]) => void;
export type Handler<T extends unknown[]> = (...args: T) => unknown;
export type Ready = [DiscordReady];
export const READY: RawHandler<Ready> = (session, shardId, payload) => {
session.emit("ready", payload, shardId);
};
export type MessageCreate = [DiscordMessage];
export const MESSAGE_CREATE: RawHandler<MessageCreate> = (session, _shardId, message) => {
session.emit("messageCreate", new Message(session, message));
};
export type MessageUpdate = [DiscordMessage];
export const MESSAGE_UPDATE: RawHandler<MessageUpdate> = (session, _shardId, new_message) => {
session.emit("messageUpdate", new Message(session, new_message));
};
export type MessageDelete = [Snowflake];
export const MESSAGE_DELETE: RawHandler<MessageDelete> = (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]>;
}

View File

@ -1,18 +0,0 @@
import type { DiscordMessage, DiscordReady } from "../vendor/external.ts";
import type { Session } from "../session/Session.ts";
import { Message } from "../structures/Message.ts";
type Handler<T> = (...args: [Session, number, T]) => void;
// TODO: move this lol
export const READY: Handler<DiscordReady> = (session, shardId, payload) => {
session.emit("ready", shardId, payload);
};
export const MESSAGE_CREATE: Handler<DiscordMessage> = (session, _shardId, message) => {
session.emit("messageCreate", new Message(session, message));
};
export const raw: Handler<unknown> = (session, shardId, data) => {
session.emit("raw", data, shardId);
};

1
mod.ts
View File

@ -23,7 +23,6 @@ export * from "./structures/WelcomeChannel.ts";
export * from "./structures/WelcomeScreen.ts";
export * from "./session/Session.ts";
export * from "./session/Events.ts";
export * from "./util/shared/flags.ts";
export * from "./util/shared/images.ts";

View File

@ -1,10 +0,0 @@
import type { DiscordGatewayPayload, DiscordReady, Shard } from "../vendor/external.ts";
import type { Message } from "../structures/Message.ts";
export type DiscordRawEventHandler = (shard: Shard, data: DiscordGatewayPayload) => unknown;
export interface Events {
ready(shardId: number, payload: DiscordReady): unknown;
messageCreate(message: Message): unknown;
raw(data: DiscordGatewayPayload, shardId: number): unknown;
}

View File

@ -1,5 +1,6 @@
import type { DiscordGetGatewayBot, GatewayBot, GatewayIntents } from "../vendor/external.ts";
import type { DiscordRawEventHandler, Events } from "./Events.ts";
import type { Shard, DiscordGatewayPayload } from "../vendor/external.ts";
import type { Events } from "../handlers/Actions.ts";
import { Snowflake } from "../util/Snowflake.ts";
import { EventEmitter } from "../util/EventEmmiter.ts";
@ -8,6 +9,8 @@ import { createGatewayManager, createRestManager } from "../vendor/external.ts";
import * as Routes from "../util/Routes.ts";
import * as Actions from "../handlers/Actions.ts";
export type DiscordRawEventHandler = (shard: Shard, data: DiscordGatewayPayload) => unknown;
export interface RestOptions {
secretKey?: string;
applicationId?: Snowflake;
@ -71,24 +74,18 @@ export class Session extends EventEmitter {
// TODO: set botId in Session.botId or something
}
override on(event: "ready", func: Events["ready"]): this;
override on(event: "messageCreate", func: Events["messageCreate"]): this;
override on(event: "raw", func: Events["raw"]): this;
override on(event: keyof Events, func: Events[keyof Events]): this {
override on<K extends keyof Events>(event: K, func: Events[K]): this;
override on<K extends string>(event: K, func: (...args: unknown[]) => unknown): this {
return super.on(event, func);
}
override off(event: "ready", func: Events["ready"]): this;
override off(event: "messageCreate", func: Events["messageCreate"]): this;
override off(event: "raw", func: Events["raw"]): this;
override off(event: keyof Events, func: Events[keyof Events]): this {
override off<K extends keyof Events>(event: K, func: Events[K]): this;
override off<K extends string>(event: K, func: (...args: unknown[]) => unknown): this {
return super.off(event, func);
}
override once(event: "ready", func: Events["ready"]): this;
override once(event: "messageCreate", func: Events["messageCreate"]): this;
override once(event: "raw", func: Events["raw"]): this;
override once(event: keyof Events, func: Events[keyof Events]): this {
override once<K extends keyof Events>(event: K, func: Events[K]): this;
override once<K extends string>(event: K, func: (...args: unknown[]) => unknown): this {
return super.once(event, func);
}

View File

@ -31,19 +31,7 @@ export interface CreateMessageReference {
export interface CreateMessage {
content: string;
allowedMentions?: AllowedMentions;
messageReference?: CreateMessageReference;
}
export interface CreateMessage {
allowedMentions?: AllowedMentions;
files: FileContent[];
messageReference?: CreateMessageReference;
}
export interface CreateMessage {
content: string;
allowedMentions?: AllowedMentions;
files: FileContent[];
files?: FileContent[];
messageReference?: CreateMessageReference;
}

View File

@ -7,7 +7,7 @@ if (!Deno.args[0]) {
const intents = GatewayIntents.MessageContent | GatewayIntents.Guilds | GatewayIntents.GuildMessages;
const session = new Session({ token: Deno.args[0], intents });
session.on("ready", (_shardId, payload) => {
session.on("ready", (payload) => {
console.log("Logged in as:", payload.user.username);
});