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> {
return fakePromise(super.get(id) as APIMessageResource).then(rawMessage => {
return fakePromise(super.get(id) as APIMessageResource | undefined).then(rawMessage => {
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)
: 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.cache.onPacket(packet);
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 'CHANNEL_UPDATE':
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);
switch (packet.t) {
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 'MESSAGE_UPDATE':
case 'MESSAGE_DELETE_BULK':
case 'MESSAGE_DELETE':
await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId);
await this.cache.onPacket(packet);
break;

View File

@ -49,8 +49,8 @@ export const GUILD_CREATE = (self: BaseClient, data: GatewayGuildCreateDispatchD
return new Guild<'create'>(self, data);
};
export const GUILD_DELETE = async (_self: BaseClient, data: GatewayGuildDeleteDispatchData) => {
return data;
export const GUILD_DELETE = async (self: BaseClient, data: GatewayGuildDeleteDispatchData) => {
return (await self.cache.guilds?.get(data.id)) ?? data;
};
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);
};
export const MESSAGE_DELETE = (_self: BaseClient, data: GatewayMessageDeleteDispatchData) => {
return toCamelCase(data);
export const MESSAGE_DELETE = async (self: BaseClient, data: GatewayMessageDeleteDispatchData) => {
return (await self.cache.messages?.get(data.id)) ?? toCamelCase(data);
};
export const MESSAGE_DELETE_BULK = (_self: BaseClient, data: GatewayMessageDeleteBulkDispatchData) => {
return toCamelCase(data);
export const MESSAGE_DELETE_BULK = async (self: BaseClient, data: GatewayMessageDeleteBulkDispatchData) => {
return {
...data,
messages: await Promise.all(data.ids.map(id => self.cache.messages?.get(id))),
};
};
export const MESSAGE_REACTION_ADD = (_self: BaseClient, data: GatewayMessageReactionAddDispatchData) => {
@ -45,14 +48,19 @@ export const MESSAGE_REACTION_REMOVE_EMOJI = (
return toCamelCase(data);
};
export const MESSAGE_UPDATE = (
export const MESSAGE_UPDATE = async (
self: BaseClient,
data: GatewayMessageUpdateDispatchData,
): MakeRequired<
PartialClass<Message>,
'id' | 'channelId' | 'createdAt' | 'createdTimestamp' | 'rest' | 'cache' | 'api' | 'client'
): Promise<
[
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) => {