diff --git a/src/cache/resources/messages.ts b/src/cache/resources/messages.ts index f4f9a57..58b1b73 100644 --- a/src/cache/resources/messages.ts +++ b/src/cache/resources/messages.ts @@ -20,12 +20,12 @@ export class Messages extends GuildRelatedResource { } override get(id: string): ReturnCache { - 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; }); } diff --git a/src/client/client.ts b/src/client/client.ts index bfbc95c..4bf6e8f 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -139,6 +139,12 @@ export class Client extends BaseClient { await this.events?.execute(packet.t, packet, this as Client, 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, shardId); + await this.cache.onPacket(packet); + break; case 'GUILD_DELETE': case 'CHANNEL_UPDATE': await this.events?.execute(packet.t, packet, this as Client, shardId); diff --git a/src/client/workerclient.ts b/src/client/workerclient.ts index 6082984..6ac0275 100644 --- a/src/client/workerclient.ts +++ b/src/client/workerclient.ts @@ -318,10 +318,10 @@ export class WorkerClient extends BaseClient { await this.events?.execute('RAW', packet, this as WorkerClient, shardId); switch (packet.t) { case 'GUILD_MEMBER_UPDATE': - await this.events?.execute(packet.t, packet, this as WorkerClient, 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, shardId); await this.cache.onPacket(packet); break; diff --git a/src/events/hooks/guild.ts b/src/events/hooks/guild.ts index ed64669..d5383e9 100644 --- a/src/events/hooks/guild.ts +++ b/src/events/hooks/guild.ts @@ -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) => { diff --git a/src/events/hooks/message.ts b/src/events/hooks/message.ts index ef82b4c..de40f29 100644 --- a/src/events/hooks/message.ts +++ b/src/events/hooks/message.ts @@ -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, - 'id' | 'channelId' | 'createdAt' | 'createdTimestamp' | 'rest' | 'cache' | 'api' | 'client' +): Promise< + [ + undefined | Message, + MakeRequired< + PartialClass, + '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) => {