feat: event proxying

This commit is contained in:
QuantumlyTangled
2021-05-16 14:26:08 +02:00
parent f40a010c6a
commit 0059eba00f
2 changed files with 11 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ import { DiscordGatewayIntents } from "./types/gateway/gateway_intents.ts";
import { snowflakeToBigint } from "./util/bigint.ts";
import { GATEWAY_VERSION } from "./util/constants.ts";
import { ws } from "./ws/ws.ts";
import { EventEmitter } from "https://deno.land/std@0.96.0/node/events.ts";
// deno-lint-ignore prefer-const
export let secretKey = "";
@@ -16,7 +17,15 @@ export let eventHandlers: EventHandlers = {};
export let proxyWSURL = `wss://gateway.discord.gg`;
export async function startBot(config: BotConfig) {
if (config.eventHandlers) eventHandlers = config.eventHandlers;
if (config.eventProxy) {
eventHandlers = new Proxy(eventHandlers, {
get(target, prop: keyof EventHandlers) {
return target[prop] !== undefined ? target[prop] : ((...args: unknown[]) => config.eventProxy!.emit(prop, ...args));
},
});
if (config.eventHandlers) updateEventHandlers(config.eventHandlers);
}
if (config.eventHandlers && !config.eventProxy) eventHandlers = config.eventHandlers;
ws.identifyPayload.token = `Bot ${config.token}`;
rest.token = `Bot ${config.token}`;
ws.identifyPayload.intents = config.intents.reduce(
@@ -67,4 +76,5 @@ export interface BotConfig {
compress?: boolean;
intents: (DiscordGatewayIntents | keyof typeof DiscordGatewayIntents)[];
eventHandlers?: EventHandlers;
eventProxy?: EventEmitter;
}

View File

@@ -4,7 +4,6 @@ import { DiscordenoMember } from "../../structures/member.ts";
import { DiscordenoMessage } from "../../structures/message.ts";
import { DiscordenoRole } from "../../structures/role.ts";
import { Collection } from "../../util/collection.ts";
import { DiscordenoShard } from "../../ws/ws.ts";
import { ThreadMember } from "../channels/threads/thread_member.ts";
import { ThreadMembersUpdate } from "../channels/threads/thread_members_update.ts";
import { IntegrationCreateUpdate } from "../integrations/integration_create_update.ts";