diff --git a/src/client/client.ts b/src/client/client.ts index 2d29608..dcdc4cb 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -141,7 +141,7 @@ export class Client extends BaseClient { protected async onPacket(shardId: number, packet: GatewayDispatchPayload) { Promise.allSettled([ this.events?.runEvent('RAW', this, packet, shardId, false), - this.collectors.run('RAW', packet), + this.collectors.run('RAW', packet, this), ]); //ignore promise switch (packet.t) { //// Cases where we must obtain the old data before updating diff --git a/src/client/collectors.ts b/src/client/collectors.ts index 09bb3da..47ede72 100644 --- a/src/client/collectors.ts +++ b/src/client/collectors.ts @@ -2,6 +2,8 @@ import { randomUUID } from 'node:crypto'; import type { Awaitable, CamelCase } from '../common'; import type { CallbackEventHandler, CustomEventsKeys, GatewayEvents } from '../events'; import { error } from 'node:console'; +import * as RawEvents from '../events/hooks'; +import type { UsingClient } from '../commands'; export type AllClientEvents = CustomEventsKeys | GatewayEvents; export type ParseClientEventName = T extends CustomEventsKeys ? T : CamelCase; @@ -98,11 +100,14 @@ export class Collectors { /**@internal */ async run( name: T, - data: Awaited]>[0]>, + raw: Awaited]>[0]>, + client: UsingClient, ) { const collectors = this.values.get(name); if (!collectors) return; + const data = RawEvents[name]?.(client, raw as never) ?? raw; + for (const i of collectors) { if (await i.options.filter(data as never)) { i.idle?.refresh(); diff --git a/src/client/workerclient.ts b/src/client/workerclient.ts index b7d35ea..60b305b 100644 --- a/src/client/workerclient.ts +++ b/src/client/workerclient.ts @@ -357,7 +357,7 @@ export class WorkerClient extends BaseClient { protected async onPacket(packet: GatewayDispatchPayload, shardId: number) { Promise.allSettled([ this.events?.runEvent('RAW', this, packet, shardId, false), - this.collectors.run('RAW', packet), + this.collectors.run('RAW', packet, this), ]); //ignore promise switch (packet.t) { //// Cases where we must obtain the old data before updating diff --git a/src/events/handler.ts b/src/events/handler.ts index f2c4766..2eb1cf4 100644 --- a/src/events/handler.ts +++ b/src/events/handler.ts @@ -111,7 +111,7 @@ export class EventHandler extends BaseHandler { await Promise.all([ this.runEvent(args[0].t as never, args[1], args[0].d, args[2]), - this.client.collectors.run(args[0].t as never, args[0].d as never), + this.client.collectors.run(args[0].t as never, args[0].d as never, this.client), ]); } @@ -150,15 +150,15 @@ export class EventHandler extends BaseHandler { async runCustom(name: T, ...args: Parameters) { const Event = this.values[name]; if (!Event) { - return this.client.collectors.run(name, args as never); + return this.client.collectors.run(name, args as never, this.client); } try { if (Event.data.once && Event.fired) { - return this.client.collectors.run(name, args as never); + return this.client.collectors.run(name, args as never, this.client); } Event.fired = true; this.logger.debug(`executed a custom event [${name}]`, Event.data.once ? 'once' : ''); - await Promise.all([Event.run(args, this.client), this.client.collectors.run(name, args as never)]); + await Promise.all([Event.run(args, this.client), this.client.collectors.run(name, args as never, this.client)]); } catch (e) { await this.onFail(name, e); }