feat: use message cache in events

This commit is contained in:
MARCROCK22 2024-04-22 19:41:46 -04:00
parent a96db12337
commit 2f1b6e4b8f
5 changed files with 31 additions and 17 deletions

View File

@ -20,12 +20,12 @@ export class Messages extends GuildRelatedResource {
} }
override get(id: string): ReturnCache<Message | undefined> { override get(id: string): ReturnCache<Message | undefined> {
return fakePromise(super.get(id) as APIMessageResource).then(rawMessage => { return fakePromise(super.get(id) as APIMessageResource | undefined).then(rawMessage => {
const user = const user =
this.cache.users && rawMessage.user_id this.cache.users && rawMessage?.user_id
? (this.cache.adapter.get(this.cache.users.hashId(rawMessage.user_id)) as APIUser | undefined) ? (this.cache.adapter.get(this.cache.users.hashId(rawMessage.user_id)) as APIUser | undefined)
: undefined; : undefined;
return user ? new Message(this.client, { ...rawMessage, author: user }) : undefined; return user ? new Message(this.client, { ...rawMessage!, author: user }) : undefined;
}); });
} }

View File

@ -139,6 +139,12 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
await this.events?.execute(packet.t, packet, this as Client<true>, shardId); await this.events?.execute(packet.t, packet, this as Client<true>, shardId);
await this.cache.onPacket(packet); await this.cache.onPacket(packet);
break; break;
case 'MESSAGE_UPDATE':
case 'MESSAGE_DELETE_BULK':
case 'MESSAGE_DELETE':
await this.events?.execute(packet.t, packet, this as Client<true>, shardId);
await this.cache.onPacket(packet);
break;
case 'GUILD_DELETE': case 'GUILD_DELETE':
case 'CHANNEL_UPDATE': case 'CHANNEL_UPDATE':
await this.events?.execute(packet.t, packet, this as Client<true>, shardId); await this.events?.execute(packet.t, packet, this as Client<true>, shardId);

View File

@ -318,10 +318,10 @@ export class WorkerClient<Ready extends boolean = boolean> extends BaseClient {
await this.events?.execute('RAW', packet, this as WorkerClient<true>, shardId); await this.events?.execute('RAW', packet, this as WorkerClient<true>, shardId);
switch (packet.t) { switch (packet.t) {
case 'GUILD_MEMBER_UPDATE': case 'GUILD_MEMBER_UPDATE':
await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId);
await this.cache.onPacket(packet);
break;
case 'PRESENCE_UPDATE': case 'PRESENCE_UPDATE':
case 'MESSAGE_UPDATE':
case 'MESSAGE_DELETE_BULK':
case 'MESSAGE_DELETE':
await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId); await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId);
await this.cache.onPacket(packet); await this.cache.onPacket(packet);
break; break;

View File

@ -49,8 +49,8 @@ export const GUILD_CREATE = (self: BaseClient, data: GatewayGuildCreateDispatchD
return new Guild<'create'>(self, data); return new Guild<'create'>(self, data);
}; };
export const GUILD_DELETE = async (_self: BaseClient, data: GatewayGuildDeleteDispatchData) => { export const GUILD_DELETE = async (self: BaseClient, data: GatewayGuildDeleteDispatchData) => {
return data; return (await self.cache.guilds?.get(data.id)) ?? data;
}; };
export const GUILD_EMOJIS_UPDATE = (self: BaseClient, data: GatewayGuildEmojisUpdateDispatchData) => { export const GUILD_EMOJIS_UPDATE = (self: BaseClient, data: GatewayGuildEmojisUpdateDispatchData) => {

View File

@ -18,12 +18,15 @@ export const MESSAGE_CREATE = (self: BaseClient, data: GatewayMessageCreateDispa
return new Message(self, data); return new Message(self, data);
}; };
export const MESSAGE_DELETE = (_self: BaseClient, data: GatewayMessageDeleteDispatchData) => { export const MESSAGE_DELETE = async (self: BaseClient, data: GatewayMessageDeleteDispatchData) => {
return toCamelCase(data); return (await self.cache.messages?.get(data.id)) ?? toCamelCase(data);
}; };
export const MESSAGE_DELETE_BULK = (_self: BaseClient, data: GatewayMessageDeleteBulkDispatchData) => { export const MESSAGE_DELETE_BULK = async (self: BaseClient, data: GatewayMessageDeleteBulkDispatchData) => {
return toCamelCase(data); return {
...data,
messages: await Promise.all(data.ids.map(id => self.cache.messages?.get(id))),
};
}; };
export const MESSAGE_REACTION_ADD = (_self: BaseClient, data: GatewayMessageReactionAddDispatchData) => { export const MESSAGE_REACTION_ADD = (_self: BaseClient, data: GatewayMessageReactionAddDispatchData) => {
@ -45,14 +48,19 @@ export const MESSAGE_REACTION_REMOVE_EMOJI = (
return toCamelCase(data); return toCamelCase(data);
}; };
export const MESSAGE_UPDATE = ( export const MESSAGE_UPDATE = async (
self: BaseClient, self: BaseClient,
data: GatewayMessageUpdateDispatchData, data: GatewayMessageUpdateDispatchData,
): MakeRequired< ): Promise<
PartialClass<Message>, [
'id' | 'channelId' | 'createdAt' | 'createdTimestamp' | 'rest' | 'cache' | 'api' | 'client' undefined | Message,
MakeRequired<
PartialClass<Message>,
'id' | 'channelId' | 'createdAt' | 'createdTimestamp' | 'rest' | 'cache' | 'api' | 'client'
>,
]
> => { > => {
return new Message(self, data as APIMessage); return [await self.cache.messages?.get(data.id), new Message(self, data as APIMessage)];
}; };
export const MESSAGE_POLL_VOTE_ADD = (_: BaseClient, data: GatewayMessagePollVoteDispatchData) => { export const MESSAGE_POLL_VOTE_ADD = (_: BaseClient, data: GatewayMessagePollVoteDispatchData) => {