From db63352dea182a24d977ae9aa76388934d6b714d Mon Sep 17 00:00:00 2001 From: MARCROCK22 <57925328+MARCROCK22@users.noreply.github.com> Date: Tue, 24 Dec 2024 22:15:23 -0400 Subject: [PATCH] feat: from parameter in resource#filter method (#311) --- src/cache/index.ts | 83 ++++++++++++-------- src/cache/resources/bans.ts | 4 +- src/cache/resources/channels.ts | 4 +- src/cache/resources/default/base.ts | 16 ++-- src/cache/resources/default/guild-based.ts | 29 ++++--- src/cache/resources/default/guild-related.ts | 29 ++++--- src/cache/resources/emojis.ts | 4 +- src/cache/resources/guilds.ts | 56 ++++++------- src/cache/resources/members.ts | 16 ++-- src/cache/resources/messages.ts | 4 +- src/cache/resources/overwrites.ts | 4 +- src/cache/resources/presence.ts | 3 +- src/cache/resources/roles.ts | 4 +- src/cache/resources/stage-instances.ts | 3 +- src/cache/resources/stickers.ts | 4 +- src/cache/resources/users.ts | 4 +- src/cache/resources/voice-states.ts | 4 +- src/common/shorters/bans.ts | 4 +- src/common/shorters/channels.ts | 13 ++- src/common/shorters/emojis.ts | 6 +- src/common/shorters/guilds.ts | 35 ++++++--- src/common/shorters/members.ts | 16 ++-- src/common/shorters/messages.ts | 21 ++++- src/common/shorters/roles.ts | 9 ++- src/common/shorters/threads.ts | 10 ++- src/common/shorters/users.ts | 5 +- 26 files changed, 235 insertions(+), 155 deletions(-) diff --git a/src/cache/index.ts b/src/cache/index.ts index 045feaa..3fed020 100644 --- a/src/cache/index.ts +++ b/src/cache/index.ts @@ -278,6 +278,7 @@ export class Cache { async bulkPatch( keys: ( | readonly [ + CacheFrom, /* type */ NonGuildBased, /* data */ @@ -286,6 +287,7 @@ export class Cache { string, ] | readonly [ + CacheFrom, /* type */ GuildBased | GuildRelated, /* data */ @@ -299,7 +301,7 @@ export class Cache { ) { const allData: [string, any][] = []; const relationshipsData: Record = {}; - for (const [type, data, id, guildId] of keys) { + for (const [from, type, data, id, guildId] of keys) { switch (type) { case 'roles': case 'stickers': @@ -311,7 +313,7 @@ export class Cache { case 'bans': case 'messages': { - if (!this[type]?.filter(data, id, guildId)) continue; + if (!this[type]?.filter(data, id, guildId, from)) continue; const hashId = this[type]?.hashId(guildId!); if (!hashId) { continue; @@ -329,7 +331,7 @@ export class Cache { case 'voiceStates': case 'members': { - if (!this[type]?.filter(data, id, guildId)) continue; + if (!this[type]?.filter(data, id, guildId, from)) continue; const hashId = this[type]?.hashId(guildId!); if (!hashId) { continue; @@ -345,7 +347,7 @@ export class Cache { case 'users': case 'guilds': { - if (!this[type]?.filter(data, id)) continue; + if (!this[type]?.filter(data, id, from)) continue; const hashId = this[type]?.namespace; if (!hashId) { continue; @@ -369,6 +371,7 @@ export class Cache { async bulkSet( keys: ( | readonly [ + CacheFrom, /* type */ NonGuildBased, /* data */ @@ -377,6 +380,7 @@ export class Cache { string, ] | readonly [ + CacheFrom, /* type */ GuildBased | GuildRelated, /* data */ @@ -390,7 +394,7 @@ export class Cache { ) { const allData: [string, any][] = []; const relationshipsData: Record = {}; - for (const [type, data, id, guildId] of keys) { + for (const [from, type, data, id, guildId] of keys) { switch (type) { case 'roles': case 'stickers': @@ -401,7 +405,7 @@ export class Cache { case 'overwrites': case 'messages': { - if (!this[type]?.filter(data, id, guildId)) continue; + if (!this[type]?.filter(data, id, guildId, from)) continue; const hashId = this[type]?.hashId(guildId!); if (!hashId) { continue; @@ -420,7 +424,7 @@ export class Cache { case 'voiceStates': case 'members': { - if (!this[type]?.filter(data, id, guildId)) continue; + if (!this[type]?.filter(data, id, guildId, from)) continue; const hashId = this[type]?.hashId(guildId!); if (!hashId) { continue; @@ -436,7 +440,7 @@ export class Cache { case 'users': case 'guilds': { - if (!this[type]?.filter(data, id)) continue; + if (!this[type]?.filter(data, id, from)) continue; const hashId = this[type]?.namespace; if (!hashId) { continue; @@ -464,17 +468,17 @@ export class Cache { protected async onPacketDefault(event: GatewayDispatchPayload) { switch (event.t) { case 'READY': - await this.users?.set(event.d.user.id, event.d.user); + await this.users?.set(CacheFrom.Gateway, event.d.user.id, event.d.user); break; case 'GUILD_CREATE': case 'GUILD_UPDATE': case 'RAW_GUILD_CREATE': - await this.guilds?.patch(event.d.id, { unavailable: false, ...event.d }); + await this.guilds?.patch(CacheFrom.Gateway, event.d.id, { unavailable: false, ...event.d }); break; case 'GUILD_DELETE': case 'RAW_GUILD_DELETE': if (event.d.unavailable) { - await this.guilds?.patch(event.d.id, event.d); + await this.guilds?.patch(CacheFrom.Gateway, event.d.id, event.d); } else { await this.guilds?.remove(event.d.id); } @@ -483,13 +487,18 @@ export class Cache { case 'CHANNEL_UPDATE': { if ('guild_id' in event.d) { - await this.channels?.set(event.d.id, event.d.guild_id!, event.d); + await this.channels?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id!, event.d); if (event.d.permission_overwrites?.length) - await this.overwrites?.set(event.d.id, event.d.guild_id!, event.d.permission_overwrites); + await this.overwrites?.set( + CacheFrom.Gateway, + event.d.id, + event.d.guild_id!, + event.d.permission_overwrites, + ); break; } if (event.d.type === ChannelType.DM) { - await this.channels?.set(event.d.recipients![0]?.id, '@me', event.d); + await this.channels?.set(CacheFrom.Gateway, event.d.recipients![0]?.id, '@me', event.d); break; } } @@ -499,13 +508,13 @@ export class Cache { break; case 'GUILD_ROLE_CREATE': case 'GUILD_ROLE_UPDATE': - await this.roles?.set(event.d.role.id, event.d.guild_id, event.d.role); + await this.roles?.set(CacheFrom.Gateway, event.d.role.id, event.d.guild_id, event.d.role); break; case 'GUILD_ROLE_DELETE': await this.roles?.remove(event.d.role_id, event.d.guild_id); break; case 'GUILD_BAN_ADD': - await this.bans?.set(event.d.user.id, event.d.guild_id, event.d); + await this.bans?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d); break; case 'GUILD_BAN_REMOVE': await this.bans?.remove(event.d.user.id, event.d.guild_id); @@ -514,6 +523,7 @@ export class Cache { { await this.emojis?.remove(await this.emojis?.keys(event.d.guild_id), event.d.guild_id); await this.emojis?.set( + CacheFrom.Gateway, event.d.emojis.map(x => [x.id!, x] as [string, APIEmoji]), event.d.guild_id, ); @@ -523,6 +533,7 @@ export class Cache { { await this.stickers?.remove(await this.stickers?.keys(event.d.guild_id), event.d.guild_id); await this.stickers?.set( + CacheFrom.Gateway, event.d.stickers.map(x => [x.id, x] as [string, APISticker]), event.d.guild_id, ); @@ -530,7 +541,7 @@ export class Cache { break; case 'GUILD_MEMBER_ADD': case 'GUILD_MEMBER_UPDATE': - if (event.d.user) await this.members?.set(event.d.user.id, event.d.guild_id, event.d); + if (event.d.user) await this.members?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d); break; case 'GUILD_MEMBER_REMOVE': await this.members?.remove(event.d.user.id, event.d.guild_id); @@ -538,12 +549,12 @@ export class Cache { case 'PRESENCE_UPDATE': // Should update member data? - await this.presences?.set(event.d.user.id, event.d.guild_id, event.d); + await this.presences?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d); break; case 'THREAD_CREATE': case 'THREAD_UPDATE': - if (event.d.guild_id) await this.channels?.set(event.d.id, event.d.guild_id, event.d); + if (event.d.guild_id) await this.channels?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id, event.d); break; case 'THREAD_DELETE': @@ -551,7 +562,7 @@ export class Cache { break; case 'USER_UPDATE': - await this.users?.set(event.d.id, event.d); + await this.users?.set(CacheFrom.Gateway, event.d.id, event.d); break; case 'VOICE_STATE_UPDATE': @@ -561,7 +572,7 @@ export class Cache { } if (event.d.channel_id != null) { - await this.voiceStates?.set(event.d.user_id, event.d.guild_id, event.d); + await this.voiceStates?.set(CacheFrom.Gateway, event.d.user_id, event.d.guild_id, event.d); } else { await this.voiceStates?.remove(event.d.user_id, event.d.guild_id); } @@ -569,7 +580,7 @@ export class Cache { break; case 'STAGE_INSTANCE_CREATE': case 'STAGE_INSTANCE_UPDATE': - await this.stageInstances?.set(event.d.id, event.d.guild_id, event.d); + await this.stageInstances?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id, event.d); break; case 'STAGE_INSTANCE_DELETE': await this.stageInstances?.remove(event.d.id, event.d.guild_id); @@ -578,12 +589,13 @@ export class Cache { { if (this.messages !== undefined) { const data: Parameters[0] = [ - ['messages', event.d, event.d.id, event.d.channel_id], - ['users', event.d.author, event.d.author.id], + [CacheFrom.Gateway, 'messages', event.d, event.d.id, event.d.channel_id], + [CacheFrom.Gateway, 'users', event.d.author, event.d.author.id], ]; if (event.d.guild_id) { - if (event.d.member) data.push(['members', event.d.member, event.d.author.id, event.d.guild_id]); + if (event.d.member) + data.push([CacheFrom.Gateway, 'members', event.d.member, event.d.author.id, event.d.guild_id]); } await this.bulkPatch(data); @@ -594,12 +606,13 @@ export class Cache { { if (this.messages !== undefined) { const data: Parameters[0] = [ - ['messages', event.d, event.d.id, event.d.channel_id], - ['users', event.d.author, event.d.author.id], + [CacheFrom.Gateway, 'messages', event.d, event.d.id, event.d.channel_id], + [CacheFrom.Gateway, 'users', event.d.author, event.d.author.id], ]; if (event.d.guild_id) { - if (event.d.member) data.push(['members', event.d.member, event.d.author.id, event.d.guild_id]); + if (event.d.member) + data.push([CacheFrom.Gateway, 'members', event.d.member, event.d.author.id, event.d.guild_id]); } await this.bulkPatch(data); @@ -674,7 +687,7 @@ export class Cache { createUser('marcrock'), ]; for (const user of users) { - await this.users.set(user.id, user); + await this.users.set(CacheFrom.Test, user.id, user); } let count = 0; if ((await this.users.values()).length !== users.length) @@ -727,7 +740,7 @@ export class Cache { for (const guildId in guildMembers) { const members = guildMembers[guildId]; for (const member of members) { - await this.members.set(member.user.id, guildId, member); + await this.members.set(CacheFrom.Test, member.user.id, guildId, member); } if ((await this.members.values(guildId)).length !== members.length) throw new Error('members.values(guildId) is not of the expected size.'); @@ -836,7 +849,7 @@ export class Cache { for (const guildId in guildChannels) { const channels = guildChannels[guildId]; for (const channel of channels) { - await this.channels.set(channel.id, guildId, channel); + await this.channels.set(CacheFrom.Test, channel.id, guildId, channel); } if ((await this.channels.values(guildId)).length !== channels.length) throw new Error('channels.values(guildId) is not of the expected size'); @@ -905,7 +918,7 @@ export class Cache { for (const guildId in guildOverwrites) { const bulkOverwrites = guildOverwrites[guildId]; for (const overwrites of bulkOverwrites) { - await this.overwrites.set(overwrites[0].channel_id, guildId, overwrites); + await this.overwrites.set(CacheFrom.Test, overwrites[0].channel_id, guildId, overwrites); } if ((await this.overwrites.values(guildId)).length !== bulkOverwrites.length) throw new Error('overwrites.values(channelId) is not of the expected size'); @@ -956,3 +969,9 @@ export class Cache { this.__logger__!.info('the overwrites cache seems to be alright.'); } } + +export enum CacheFrom { + Gateway = 1, + Rest, + Test, +} diff --git a/src/cache/resources/bans.ts b/src/cache/resources/bans.ts index e63d762..9c344f3 100644 --- a/src/cache/resources/bans.ts +++ b/src/cache/resources/bans.ts @@ -1,4 +1,4 @@ -import type { ReturnCache } from '../..'; +import type { CacheFrom, ReturnCache } from '../..'; import { type GuildBanStructure, Transformers } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIBan, GatewayGuildBanModifyDispatchData } from '../../types'; @@ -7,7 +7,7 @@ export class Bans extends GuildBasedResource { namespace = 'channel'; //@ts-expect-error - filter(data: APIChannel, id: string, guild_id: string) { + filter(data: APIChannel, id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/default/base.ts b/src/cache/resources/default/base.ts index e985a21..ffcb8d7 100644 --- a/src/cache/resources/default/base.ts +++ b/src/cache/resources/default/base.ts @@ -1,7 +1,7 @@ import type { UsingClient } from '../../../commands'; import { fakePromise } from '../../../common'; import type { GatewayIntentBits } from '../../../types'; -import type { Cache, ReturnCache } from '../../index'; +import type { Cache, CacheFrom, ReturnCache } from '../../index'; export class BaseResource { namespace = 'base'; @@ -12,7 +12,7 @@ export class BaseResource { ) {} //@ts-expect-error - filter(data: any, id: string) { + filter(data: any, id: string, from: CacheFrom) { return true; } @@ -27,9 +27,9 @@ export class BaseResource { return; } - setIfNI(intent: keyof typeof GatewayIntentBits, id: string, data: S) { + setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, data: S) { if (!this.cache.hasIntent(intent)) { - return this.set(id, data); + return this.set(from, id, data); } } @@ -41,13 +41,13 @@ export class BaseResource { return fakePromise(this.adapter.bulkGet(ids.map(id => this.hashId(id)))).then(x => x.filter(y => y)); } - set(id: string, data: S) { - if (!this.filter(data, id)) return; + set(from: CacheFrom, id: string, data: S) { + if (!this.filter(data, id, from)) return; return fakePromise(this.addToRelationship(id)).then(() => this.adapter.set(this.hashId(id), data)); } - patch(id: string, data: S) { - if (!this.filter(data, id)) return; + patch(from: CacheFrom, id: string, data: S) { + if (!this.filter(data, id, from)) return; return fakePromise(this.addToRelationship(id)).then(() => this.adapter.patch(this.hashId(id), data)); } diff --git a/src/cache/resources/default/guild-based.ts b/src/cache/resources/default/guild-based.ts index edd3aa5..8fce6d7 100644 --- a/src/cache/resources/default/guild-based.ts +++ b/src/cache/resources/default/guild-based.ts @@ -1,7 +1,7 @@ import type { UsingClient } from '../../../commands'; import { fakePromise } from '../../../common'; import type { GatewayIntentBits } from '../../../types'; -import type { Cache, ReturnCache } from '../../index'; +import type { Cache, CacheFrom, ReturnCache } from '../../index'; export class GuildBasedResource { namespace = 'base'; @@ -12,7 +12,7 @@ export class GuildBasedResource { ) {} //@ts-expect-error - filter(data: any, id: string, guild_id: string) { + filter(data: any, id: string, guild_id: string, from: CacheFrom) { return true; } @@ -33,9 +33,9 @@ export class GuildBasedResource { return; } - setIfNI(intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) { + setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) { if (!this.cache.hasIntent(intent)) { - return this.set(id, guildId, data); + return this.set(from, id, guildId, data); } } @@ -47,11 +47,11 @@ export class GuildBasedResource { return fakePromise(this.adapter.bulkGet(ids.map(id => this.hashGuildId(guild, id)))).then(x => x.filter(y => y)); } - set(__keys: string, guild: string, data: S): ReturnCache; - set(__keys: [string, S][], guild: string): ReturnCache; - set(__keys: string | [string, S][], guild: string, data?: S): ReturnCache { + set(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache; + set(from: CacheFrom, __keys: [string, S][], guild: string): ReturnCache; + set(from: CacheFrom, __keys: string | [string, S][], guild: string, data?: S): ReturnCache { const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => - this.filter(x[1], x[0] as string, guild), + this.filter(x[1], x[0] as string, guild, from), ) as [string, any][]; return fakePromise( @@ -68,13 +68,12 @@ export class GuildBasedResource { ) as void; } - patch(__keys: string, guild: string, data: S): ReturnCache; - patch(__keys: [string, any][], guild: string): ReturnCache; - patch(__keys: string | [string, any][], guild: string, data?: any): ReturnCache { - const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => this.filter(x[1], x[0], guild)) as [ - string, - any, - ][]; + patch(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache; + patch(from: CacheFrom, __keys: [string, any][], guild: string): ReturnCache; + patch(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any): ReturnCache { + const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => + this.filter(x[1], x[0], guild, from), + ) as [string, any][]; return fakePromise(this.adapter.bulkGet(keys.map(([key]) => this.hashGuildId(guild, key)))).then(oldDatas => fakePromise( diff --git a/src/cache/resources/default/guild-related.ts b/src/cache/resources/default/guild-related.ts index 3d9c009..455601b 100644 --- a/src/cache/resources/default/guild-related.ts +++ b/src/cache/resources/default/guild-related.ts @@ -1,7 +1,7 @@ import type { UsingClient } from '../../../commands'; import { fakePromise } from '../../../common'; import type { GatewayIntentBits } from '../../../types'; -import type { Cache, ReturnCache } from '../../index'; +import type { Cache, CacheFrom, ReturnCache } from '../../index'; export class GuildRelatedResource { namespace = 'base'; @@ -12,7 +12,7 @@ export class GuildRelatedResource { ) {} //@ts-expect-error - filter(data: any, id: string, guild_id?: string) { + filter(data: any, id: string, guild_id: string, from: CacheFrom) { return true; } @@ -32,9 +32,9 @@ export class GuildRelatedResource { } } - setIfNI(intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) { + setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) { if (!this.cache.hasIntent(intent)) { - return this.set(id, guildId, data); + return this.set(from, id, guildId, data); } } @@ -46,11 +46,11 @@ export class GuildRelatedResource { return fakePromise(this.adapter.bulkGet(ids.map(x => this.hashId(x)))).then(x => x.filter(y => y)); } - set(__keys: string, guild: string, data: S): ReturnCache; - set(__keys: [string, S][], guild: string): ReturnCache; - set(__keys: string | [string, S][], guild: string, data?: S): ReturnCache { + set(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache; + set(from: CacheFrom, __keys: [string, S][], guild: string): ReturnCache; + set(from: CacheFrom, __keys: string | [string, S][], guild: string, data?: S): ReturnCache { const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => - this.filter(x[1], x[0] as string, guild), + this.filter(x[1], x[0] as string, guild, from), ) as [string, any][]; return fakePromise( @@ -68,13 +68,12 @@ export class GuildRelatedResource { ); } - patch(__keys: string, guild: string, data?: any): ReturnCache; - patch(__keys: [string, any][], guild: string): ReturnCache; - patch(__keys: string | [string, any][], guild: string, data?: any): ReturnCache { - const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => this.filter(x[1], x[0], guild)) as [ - string, - any, - ][]; + patch(from: CacheFrom, __keys: string, guild: string, data?: any): ReturnCache; + patch(from: CacheFrom, __keys: [string, any][], guild: string): ReturnCache; + patch(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any): ReturnCache { + const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => + this.filter(x[1], x[0], guild, from), + ) as [string, any][]; return fakePromise( this.addToRelationship( diff --git a/src/cache/resources/emojis.ts b/src/cache/resources/emojis.ts index 00d1e7f..32bd077 100644 --- a/src/cache/resources/emojis.ts +++ b/src/cache/resources/emojis.ts @@ -1,4 +1,4 @@ -import type { ReturnCache } from '../..'; +import type { CacheFrom, ReturnCache } from '../..'; import { type GuildEmojiStructure, Transformers } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIEmoji } from '../../types'; @@ -8,7 +8,7 @@ export class Emojis extends GuildRelatedResource { namespace = 'emoji'; //@ts-expect-error - filter(data: APIEmoji, id: string, guild_id?: string) { + filter(data: APIEmoji, id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/guilds.ts b/src/cache/resources/guilds.ts index c0bbdc0..d45925d 100644 --- a/src/cache/resources/guilds.ts +++ b/src/cache/resources/guilds.ts @@ -1,4 +1,4 @@ -import type { Cache, ReturnCache } from '..'; +import type { Cache, CacheFrom, ReturnCache } from '..'; import { type GuildStructure, Transformers } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIGuild, GatewayGuildCreateDispatchData } from '../../types'; @@ -8,7 +8,7 @@ export class Guilds extends BaseResource[0] = []; for (const member of data.members ?? []) { if (!member.user?.id) { continue; } - bulkData.push(['members', member, member.user.id, id]); - bulkData.push(['users', member.user, member.user.id]); + bulkData.push([from, 'members', member, member.user.id, id]); + bulkData.push([from, 'users', member.user, member.user.id]); } for (const role of data.roles ?? []) { - bulkData.push(['roles', role, role.id, id]); + bulkData.push([from, 'roles', role, role.id, id]); } for (const channel of data.channels ?? []) { - bulkData.push(['channels', channel, channel.id, id]); + bulkData.push([from, 'channels', channel, channel.id, id]); if (channel.permission_overwrites?.length) - bulkData.push(['overwrites', channel.permission_overwrites, channel.id, id]); + bulkData.push([from, 'overwrites', channel.permission_overwrites, channel.id, id]); } for (const thread of data.threads ?? []) { - bulkData.push(['channels', thread, thread.id, id]); + bulkData.push([from, 'channels', thread, thread.id, id]); } for (const emoji of data.emojis ?? []) { - bulkData.push(['emojis', emoji, emoji.id, id]); + bulkData.push([from, 'emojis', emoji, emoji.id, id]); } for (const sticker of data.stickers ?? []) { - bulkData.push(['stickers', sticker, sticker.id, id]); + bulkData.push([from, 'stickers', sticker, sticker.id, id]); } for (const voiceState of data.voice_states ?? []) { - bulkData.push(['voiceStates', voiceState, voiceState.user_id, id]); + bulkData.push([from, 'voiceStates', voiceState, voiceState.user_id, id]); } for (const presence of data.presences ?? []) { - bulkData.push(['presences', presence, presence.user.id, id]); + bulkData.push([from, 'presences', presence, presence.user.id, id]); } for (const instance of data.stage_instances ?? []) { - bulkData.push(['stageInstances', instance, instance.id, id]); + bulkData.push([from, 'stageInstances', instance, instance.id, id]); } const { @@ -146,55 +146,55 @@ export class Guilds extends BaseResource[0] = []; for (const member of data.members ?? []) { if (!member.user?.id) { continue; } - bulkData.push(['members', member, member.user.id, id]); - bulkData.push(['users', member.user, member.user.id]); + bulkData.push([from, 'members', member, member.user.id, id]); + bulkData.push([from, 'users', member.user, member.user.id]); } for (const role of data.roles ?? []) { - bulkData.push(['roles', role, role.id, id]); + bulkData.push([from, 'roles', role, role.id, id]); } for (const channel of data.channels ?? []) { - bulkData.push(['channels', channel, channel.id, id]); + bulkData.push([from, 'channels', channel, channel.id, id]); if (channel.permission_overwrites?.length) { - bulkData.push(['overwrites', channel.permission_overwrites, channel.id, id]); + bulkData.push([from, 'overwrites', channel.permission_overwrites, channel.id, id]); } } for (const thread of data.threads ?? []) { - bulkData.push(['channels', thread, thread.id, id]); + bulkData.push([from, 'channels', thread, thread.id, id]); } for (const emoji of data.emojis ?? []) { - bulkData.push(['emojis', emoji, emoji.id, id]); + bulkData.push([from, 'emojis', emoji, emoji.id, id]); } for (const sticker of data.stickers ?? []) { - bulkData.push(['stickers', sticker, sticker.id, id]); + bulkData.push([from, 'stickers', sticker, sticker.id, id]); } for (const voiceState of data.voice_states ?? []) { - bulkData.push(['voiceStates', voiceState, voiceState.user_id, id]); + bulkData.push([from, 'voiceStates', voiceState, voiceState.user_id, id]); } for (const presence of data.presences ?? []) { - bulkData.push(['presences', presence, presence.user.id, id]); + bulkData.push([from, 'presences', presence, presence.user.id, id]); } for (const instance of data.stage_instances ?? []) { - bulkData.push(['stageInstances', instance, instance.id, id]); + bulkData.push([from, 'stageInstances', instance, instance.id, id]); } const { @@ -212,7 +212,7 @@ export class Guilds extends BaseResource { namespace = 'member'; //@ts-expect-error - filter(data: APIGuildMember, id: string, guild_id: string) { + filter(data: APIGuildMember, id: string, guild_id: string, from: CacheFrom) { return true; } @@ -71,16 +71,16 @@ export class Members extends GuildBasedResource { return super.values(guild); } - override async set(memberId: string, guildId: string, data: any): Promise; - override async set(memberId_dataArray: [string, any][], guildId: string): Promise; - override async set(__keys: string | [string, any][], guild: string, data?: any) { + override async set(from: CacheFrom, memberId: string, guildId: string, data: any): Promise; + override async set(from: CacheFrom, memberId_dataArray: [string, any][], guildId: string): Promise; + override async set(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any) { const keys: [string, any][] = Array.isArray(__keys) ? __keys : [[__keys, data]]; - const bulkData: (['members', any, string, string] | ['users', any, string])[] = []; + const bulkData: ([typeof from, 'members', any, string, string] | [typeof from, 'users', any, string])[] = []; for (const [id, value] of keys) { if (value.user) { - bulkData.push(['members', value, id, guild]); - bulkData.push(['users', value.user, id]); + bulkData.push([from, 'members', value, id, guild]); + bulkData.push([from, 'users', value.user, id]); } } diff --git a/src/cache/resources/messages.ts b/src/cache/resources/messages.ts index 651dc28..361bd1e 100644 --- a/src/cache/resources/messages.ts +++ b/src/cache/resources/messages.ts @@ -1,4 +1,4 @@ -import type { MessageData, ReturnCache } from '../..'; +import type { CacheFrom, MessageData, ReturnCache } from '../..'; import { type MessageStructure, Transformers } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIMessage, APIUser } from '../../types'; @@ -8,7 +8,7 @@ export class Messages extends GuildRelatedResource { namespace = 'message'; //@ts-expect-error - filter(data: MessageData, id: string, channel_id?: string) { + filter(data: MessageData, id: string, channel_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/overwrites.ts b/src/cache/resources/overwrites.ts index 10d15f9..a35a77a 100644 --- a/src/cache/resources/overwrites.ts +++ b/src/cache/resources/overwrites.ts @@ -1,4 +1,4 @@ -import type { ReturnCache } from '../..'; +import type { CacheFrom, ReturnCache } from '../..'; import { fakePromise } from '../../common/it/utils'; import { PermissionsBitField } from '../../structures/extra/Permissions'; import type { APIOverwrite } from '../../types'; @@ -8,7 +8,7 @@ export class Overwrites extends GuildRelatedResource { namespace = 'overwrite'; //@ts-expect-error - filter(data: APIOverwrite[], id: string, guild_id?: string) { + filter(data: APIOverwrite[], id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/presence.ts b/src/cache/resources/presence.ts index 2a91495..d57b494 100644 --- a/src/cache/resources/presence.ts +++ b/src/cache/resources/presence.ts @@ -1,3 +1,4 @@ +import type { CacheFrom } from '../..'; import type { GatewayPresenceUpdate } from '../../types'; import { GuildRelatedResource } from './default/guild-related'; @@ -5,7 +6,7 @@ export class Presences extends GuildRelatedResource { namespace = 'role'; //@ts-expect-error - filter(data: APIRole, id: string, guild_id?: string) { + filter(data: APIRole, id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/stage-instances.ts b/src/cache/resources/stage-instances.ts index f478f54..81e1911 100644 --- a/src/cache/resources/stage-instances.ts +++ b/src/cache/resources/stage-instances.ts @@ -1,3 +1,4 @@ +import type { CacheFrom } from '../..'; import type { APIStageInstance } from '../../types'; import { GuildRelatedResource } from './default/guild-related'; @@ -5,7 +6,7 @@ export class StageInstances extends GuildRelatedResource { namespace = 'sticker'; //@ts-expect-error - filter(data: APISticker, id: string, guild_id?: string) { + filter(data: APISticker, id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/users.ts b/src/cache/resources/users.ts index 1d11f4a..7dd6e5c 100644 --- a/src/cache/resources/users.ts +++ b/src/cache/resources/users.ts @@ -1,4 +1,4 @@ -import type { ReturnCache } from '../..'; +import type { CacheFrom, ReturnCache } from '../..'; import { Transformers, type UserStructure } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIUser } from '../../types'; @@ -8,7 +8,7 @@ export class Users extends BaseResource { namespace = 'user'; //@ts-expect-error - filter(data: APIUser, id: string) { + filter(data: APIUser, id: string, from: CacheFrom) { return true; } diff --git a/src/cache/resources/voice-states.ts b/src/cache/resources/voice-states.ts index c324267..9ce4744 100644 --- a/src/cache/resources/voice-states.ts +++ b/src/cache/resources/voice-states.ts @@ -1,4 +1,4 @@ -import type { ReturnCache } from '../..'; +import type { CacheFrom, ReturnCache } from '../..'; import { Transformers, type VoiceStateStructure } from '../../client/transformers'; import { fakePromise } from '../../common'; import type { APIVoiceState } from '../../types'; @@ -8,7 +8,7 @@ export class VoiceStates extends GuildBasedResource { namespace = 'voice_state'; //@ts-expect-error - filter(data: APIVoiceState, id: string, guild_id: string) { + filter(data: APIVoiceState, id: string, guild_id: string, from: CacheFrom) { return true; } diff --git a/src/common/shorters/bans.ts b/src/common/shorters/bans.ts index e29a953..801bd77 100644 --- a/src/common/shorters/bans.ts +++ b/src/common/shorters/bans.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../../cache'; import { type GuildBanStructure, Transformers } from '../../client/transformers'; import type { APIBan, @@ -57,7 +58,7 @@ export class BanShorter extends BaseShorter { } ban = await this.client.proxy.guilds(guildId).bans(userId).get(); - await this.client.cache.members?.set(ban.user.id, guildId, ban); + await this.client.cache.members?.set(CacheFrom.Rest, ban.user.id, guildId, ban); return Transformers.GuildBan(this.client, ban, guildId); } @@ -78,6 +79,7 @@ export class BanShorter extends BaseShorter { query, }); await this.client.cache.bans?.set( + CacheFrom.Rest, bans.map<[string, APIBan]>(x => [x.user.id, x]), guildId, ); diff --git a/src/common/shorters/channels.ts b/src/common/shorters/channels.ts index b97ccd0..dfa8445 100644 --- a/src/common/shorters/channels.ts +++ b/src/common/shorters/channels.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../../cache'; import type { Channels } from '../../cache/resources/channels'; import type { Overwrites } from '../../cache/resources/overwrites'; import { type MessageStructure, type ThreadChannelStructure, Transformers } from '../../client/transformers'; @@ -40,6 +41,7 @@ export class ChannelShorter extends BaseShorter { channel = await this.client.proxy.channels(id).get(); await this.client.cache.channels?.patch( + CacheFrom.Rest, id, 'guild_id' in channel && channel.guild_id ? channel.guild_id : '@me', channel, @@ -74,9 +76,16 @@ export class ChannelShorter extends BaseShorter { ): Promise { const options = MergeOptions>({ guildId: '@me' }, optional); const res = await this.client.proxy.channels(id).patch({ body, reason: options.reason }); - await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(options.guildId), res.id, options.guildId, res); + await this.client.cache.channels?.setIfNI( + CacheFrom.Rest, + BaseChannel.__intent__(options.guildId), + res.id, + options.guildId, + res, + ); if (body.permission_overwrites && 'permission_overwrites' in res && res.permission_overwrites) await this.client.cache.overwrites?.setIfNI( + CacheFrom.Rest, BaseChannel.__intent__(options.guildId), res.id, options.guildId, @@ -97,6 +106,7 @@ export class ChannelShorter extends BaseShorter { async pins(channelId: string): Promise { const messages = await this.client.proxy.channels(channelId).pins.get(); await this.client.cache.messages?.patch( + CacheFrom.Rest, messages.map(x => { return [x.id, x]; }) satisfies [string, any][], @@ -206,6 +216,7 @@ export class ChannelShorter extends BaseShorter { query, }); await this.client.cache.messages?.patch( + CacheFrom.Rest, result.map(x => { return [x.id, x]; }) satisfies [string, any][], diff --git a/src/common/shorters/emojis.ts b/src/common/shorters/emojis.ts index e4bf7e4..839e327 100644 --- a/src/common/shorters/emojis.ts +++ b/src/common/shorters/emojis.ts @@ -1,4 +1,5 @@ import { resolveImage } from '../../builders'; +import { CacheFrom } from '../../cache'; import { type GuildEmojiStructure, Transformers } from '../../client/transformers'; import type { APIEmoji, RESTPatchAPIGuildEmojiJSONBody, RESTPostAPIGuildEmojiJSONBody } from '../../types'; import type { ImageResolvable } from '../types/resolvables'; @@ -22,6 +23,7 @@ export class EmojiShorter extends BaseShorter { } emojis = await this.client.proxy.guilds(guildId).emojis.get(); await this.client.cache.emojis?.set( + CacheFrom.Rest, emojis.map<[string, APIEmoji]>(x => [x.id!, x]), guildId, ); @@ -43,7 +45,7 @@ export class EmojiShorter extends BaseShorter { body: bodyResolved, }); - await this.client.cache.emojis?.setIfNI('GuildExpressions', emoji.id!, guildId, emoji); + await this.client.cache.emojis?.setIfNI(CacheFrom.Rest, 'GuildExpressions', emoji.id!, guildId, emoji); return Transformers.GuildEmoji(this.client, emoji, guildId); } @@ -91,7 +93,7 @@ export class EmojiShorter extends BaseShorter { reason?: string, ): Promise { const emoji = await this.client.proxy.guilds(guildId).emojis(emojiId).patch({ body, reason }); - await this.client.cache.emojis?.setIfNI('GuildExpressions', emoji.id!, guildId, emoji); + await this.client.cache.emojis?.setIfNI(CacheFrom.Rest, 'GuildExpressions', emoji.id!, guildId, emoji); return Transformers.GuildEmoji(this.client, emoji, guildId); } } diff --git a/src/common/shorters/guilds.ts b/src/common/shorters/guilds.ts index 6023c0b..a1ff1bc 100644 --- a/src/common/shorters/guilds.ts +++ b/src/common/shorters/guilds.ts @@ -1,4 +1,5 @@ import { resolveFiles } from '../../builders'; +import { CacheFrom } from '../../cache'; import type { Channels } from '../../cache/resources/channels'; import { type AnonymousGuildStructure, @@ -33,7 +34,7 @@ export class GuildShorter extends BaseShorter { */ async create(body: RESTPostAPIGuildsJSONBody): Promise> { const guild = await this.client.proxy.guilds.post({ body }); - await this.client.cache.guilds?.setIfNI('Guilds', guild.id, guild); + await this.client.cache.guilds?.setIfNI(CacheFrom.Rest, 'Guilds', guild.id, guild); return Transformers.Guild<'api'>(this.client, guild); } @@ -54,7 +55,7 @@ export class GuildShorter extends BaseShorter { } const data = await this.client.proxy.guilds(id).get(); - await this.client.cache.guilds?.patch(id, data); + await this.client.cache.guilds?.patch(CacheFrom.Rest, id, data); return (await this.client.cache.guilds?.raw(id)) ?? data; } @@ -71,7 +72,7 @@ export class GuildShorter extends BaseShorter { async edit(guildId: string, body: RESTPatchAPIGuildJSONBody, reason?: string) { const guild = await this.client.proxy.guilds(guildId).patch({ body, reason }); - if (!this.client.cache.hasGuildsIntent) await this.client.cache.guilds?.patch(guildId, guild); + if (!this.client.cache.hasGuildsIntent) await this.client.cache.guilds?.patch(CacheFrom.Rest, guildId, guild); return new Guild(this.client, guild); } @@ -88,7 +89,7 @@ export class GuildShorter extends BaseShorter { if (self?.user) return Transformers.GuildMember(this.client, self, self.user, id); } const self = await this.client.proxy.guilds(id).members(this.client.botId).get(); - await this.client.cache.members?.patch(self.user.id, id, self); + await this.client.cache.members?.patch(CacheFrom.Rest, self.user.id, id, self); return Transformers.GuildMember(this.client, self, self.user, id); } @@ -121,6 +122,7 @@ export class GuildShorter extends BaseShorter { } channels = await this.client.proxy.guilds(guildId).channels.get(); await this.client.cache.channels?.set( + CacheFrom.Rest, channels.map<[string, APIChannel]>(x => [x.id, x]), guildId, ); @@ -142,7 +144,7 @@ export class GuildShorter extends BaseShorter { } channel = await this.client.proxy.channels(channelId).get(); - await this.client.cache.channels?.patch(channelId, guildId, channel); + await this.client.cache.channels?.patch(CacheFrom.Rest, channelId, guildId, channel); return channelFrom(channel, this.client); }, @@ -154,7 +156,13 @@ export class GuildShorter extends BaseShorter { */ create: async (guildId: string, body: RESTPostAPIGuildChannelJSONBody) => { const res = await this.client.proxy.guilds(guildId).channels.post({ body }); - await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(guildId), res.id, guildId, res); + await this.client.cache.channels?.setIfNI( + CacheFrom.Rest, + BaseChannel.__intent__(guildId), + res.id, + guildId, + res, + ); return channelFrom(res, this.client); }, @@ -181,7 +189,13 @@ export class GuildShorter extends BaseShorter { */ edit: async (guildchannelId: string, channelId: string, body: RESTPatchAPIChannelJSONBody, reason?: string) => { const res = await this.client.proxy.channels(channelId).patch({ body, reason }); - await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(guildchannelId), res.id, guildchannelId, res); + await this.client.cache.channels?.setIfNI( + CacheFrom.Rest, + BaseChannel.__intent__(guildchannelId), + res.id, + guildchannelId, + res, + ); return channelFrom(res, this.client); }, @@ -293,6 +307,7 @@ export class GuildShorter extends BaseShorter { list: async (guildId: string): Promise => { const stickers = await this.client.proxy.guilds(guildId).stickers.get(); await this.client.cache.stickers?.set( + CacheFrom.Rest, stickers.map(st => [st.id, st] as any), guildId, ); @@ -315,7 +330,7 @@ export class GuildShorter extends BaseShorter { const sticker = await this.client.proxy .guilds(guildId) .stickers.post({ reason, body: json, files: [{ ...fileResolve[0], key: 'file' }], appendToFormData: true }); - await this.client.cache.stickers?.setIfNI('GuildExpressions', sticker.id, guildId, sticker); + await this.client.cache.stickers?.setIfNI(CacheFrom.Rest, 'GuildExpressions', sticker.id, guildId, sticker); return Transformers.Sticker(this.client, sticker); }, @@ -334,7 +349,7 @@ export class GuildShorter extends BaseShorter { reason?: string, ): Promise => { const sticker = await this.client.proxy.guilds(guildId).stickers(stickerId).patch({ body, reason }); - await this.client.cache.stickers?.setIfNI('GuildExpressions', stickerId, guildId, sticker); + await this.client.cache.stickers?.setIfNI(CacheFrom.Rest, 'GuildExpressions', stickerId, guildId, sticker); return Transformers.Sticker(this.client, sticker); }, @@ -352,7 +367,7 @@ export class GuildShorter extends BaseShorter { if (sticker) return sticker; } sticker = await this.client.proxy.guilds(guildId).stickers(stickerId).get(); - await this.client.cache.stickers?.patch(stickerId, guildId, sticker); + await this.client.cache.stickers?.patch(CacheFrom.Rest, stickerId, guildId, sticker); return Transformers.Sticker(this.client, sticker); }, diff --git a/src/common/shorters/members.ts b/src/common/shorters/members.ts index ef17e0f..db7132b 100644 --- a/src/common/shorters/members.ts +++ b/src/common/shorters/members.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../../cache'; import { type GuildMemberStructure, type GuildRoleStructure, @@ -58,6 +59,7 @@ export class MemberShorter extends BaseShorter { query, }); await this.client.cache.members?.set( + CacheFrom.Rest, members.map(x => [x.user.id, x] as [string, APIGuildMember]), guildId, ); @@ -112,7 +114,7 @@ export class MemberShorter extends BaseShorter { reason?: string, ): Promise { const member = await this.client.proxy.guilds(guildId).members(memberId).patch({ body, reason }); - await this.client.cache.members?.setIfNI('GuildMembers', memberId, guildId, member); + await this.client.cache.members?.setIfNI(CacheFrom.Rest, 'GuildMembers', memberId, guildId, member); return Transformers.GuildMember(this.client, member, member.user, guildId); } @@ -137,7 +139,7 @@ export class MemberShorter extends BaseShorter { return; } - await this.client.cache.members?.setIfNI('GuildMembers', member.user.id, guildId, member); + await this.client.cache.members?.setIfNI(CacheFrom.Rest, 'GuildMembers', member.user.id, guildId, member); return Transformers.GuildMember(this.client, member, member.user, guildId); } @@ -162,7 +164,7 @@ export class MemberShorter extends BaseShorter { } member = await this.client.proxy.guilds(guildId).members(memberId).get(); - await this.client.cache.members?.set(member.user.id, guildId, member); + await this.client.cache.members?.set(CacheFrom.Rest, member.user.id, guildId, member); return member; } @@ -182,7 +184,11 @@ export class MemberShorter extends BaseShorter { members = await this.client.proxy.guilds(guildId).members.get({ query, }); - await this.client.cache.members?.set(members.map(x => [x.user.id, x]) as [string, APIGuildMember][], guildId); + await this.client.cache.members?.set( + CacheFrom.Rest, + members.map(x => [x.user.id, x]) as [string, APIGuildMember][], + guildId, + ); return members.map(m => Transformers.GuildMember(this.client, m, m.user, guildId)); } @@ -244,7 +250,7 @@ export class MemberShorter extends BaseShorter { } const state = await this.client.proxy.guilds(guildId)['voice-states'](memberId).get(); - await this.client.cache.voiceStates?.set(memberId, guildId, state); + await this.client.cache.voiceStates?.set(CacheFrom.Rest, memberId, guildId, state); return Transformers.VoiceState(this.client, state); } diff --git a/src/common/shorters/messages.ts b/src/common/shorters/messages.ts index a57579e..fc1077e 100644 --- a/src/common/shorters/messages.ts +++ b/src/common/shorters/messages.ts @@ -8,6 +8,7 @@ import type { } from '../../types'; import type { ValidAnswerId } from '../../api/Routes/channels'; +import { CacheFrom } from '../../cache'; import { type MessageStructure, type ThreadChannelStructure, Transformers, type UserStructure } from '../../client'; import type { MessageCreateBodyRequest, MessageUpdateBodyRequest } from '../types/write'; import { BaseShorter } from './base'; @@ -28,7 +29,13 @@ export class MessageShorter extends BaseShorter { files: parsedFiles, }) .then(async message => { - await this.client.cache.messages?.setIfNI('GuildMessages', message.id, message.channel_id, message); + await this.client.cache.messages?.setIfNI( + CacheFrom.Rest, + 'GuildMessages', + message.id, + message.channel_id, + message, + ); return Transformers.Message(this.client, message); }); } @@ -47,7 +54,13 @@ export class MessageShorter extends BaseShorter { files: parsedFiles, }) .then(async message => { - await this.client.cache.messages?.setIfNI('GuildMessages', message.id, message.channel_id, message); + await this.client.cache.messages?.setIfNI( + CacheFrom.Rest, + 'GuildMessages', + message.id, + message.channel_id, + message, + ); return Transformers.Message(this.client, message); }); } @@ -58,7 +71,7 @@ export class MessageShorter extends BaseShorter { .messages(messageId) .crosspost.post({ reason }) .then(async m => { - await this.client.cache.messages?.setIfNI('GuildMessages', m.id, m.channel_id, m); + await this.client.cache.messages?.setIfNI(CacheFrom.Rest, 'GuildMessages', m.id, m.channel_id, m); return Transformers.Message(this.client, m); }); } @@ -85,7 +98,7 @@ export class MessageShorter extends BaseShorter { .messages(messageId) .get() .then(async x => { - await this.client.cache.messages?.set(x.id, x.channel_id, x); + await this.client.cache.messages?.set(CacheFrom.Rest, x.id, x.channel_id, x); return Transformers.Message(this.client, x); }); } diff --git a/src/common/shorters/roles.ts b/src/common/shorters/roles.ts index 31fad86..8f730f4 100644 --- a/src/common/shorters/roles.ts +++ b/src/common/shorters/roles.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../../cache'; import { type GuildRoleStructure, Transformers } from '../../client/transformers'; import type { APIRole, @@ -17,7 +18,7 @@ export class RoleShorter extends BaseShorter { */ async create(guildId: string, body: RESTPostAPIGuildRoleJSONBody, reason?: string): Promise { const res = await this.client.proxy.guilds(guildId).roles.post({ body, reason }); - await this.client.cache.roles?.setIfNI('Guilds', res.id, guildId, res); + await this.client.cache.roles?.setIfNI(CacheFrom.Rest, 'Guilds', res.id, guildId, res); return Transformers.GuildRole(this.client, res, guildId); } @@ -33,7 +34,7 @@ export class RoleShorter extends BaseShorter { if (role) return role; } role = await this.client.proxy.guilds(guildId).roles(roleId).get(); - await this.client.cache.roles?.set(roleId, guildId, role); + await this.client.cache.roles?.set(CacheFrom.Rest, roleId, guildId, role); return role; } @@ -58,6 +59,7 @@ export class RoleShorter extends BaseShorter { } roles = await this.client.proxy.guilds(guildId).roles.get(); await this.client.cache.roles?.set( + CacheFrom.Rest, roles.map<[string, APIRole]>(r => [r.id, r]), guildId, ); @@ -79,7 +81,7 @@ export class RoleShorter extends BaseShorter { reason?: string, ): Promise { const res = await this.client.proxy.guilds(guildId).roles(roleId).patch({ body, reason }); - await this.client.cache.roles?.setIfNI('Guilds', roleId, guildId, res); + await this.client.cache.roles?.setIfNI(CacheFrom.Rest, 'Guilds', roleId, guildId, res); return Transformers.GuildRole(this.client, res, guildId); } @@ -108,6 +110,7 @@ export class RoleShorter extends BaseShorter { }); if (!this.client.cache.hasRolesIntent) { await this.client.cache.roles?.set( + CacheFrom.Rest, roles.map(x => [x.id, x] as [string, any]), guildId, ); diff --git a/src/common/shorters/threads.ts b/src/common/shorters/threads.ts index 016aec9..11840d0 100644 --- a/src/common/shorters/threads.ts +++ b/src/common/shorters/threads.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../..'; import type { ThreadChannelStructure } from '../../client/transformers'; import { channelFrom } from '../../structures'; import type { @@ -32,6 +33,7 @@ export class ThreadShorter extends BaseShorter { // When testing this, discord returns the thread object, but in discord api types it does not. .then(async thread => { await this.client.cache.channels?.setIfNI( + CacheFrom.Rest, 'Guilds', thread.id, (thread as APIThreadChannel).guild_id!, @@ -54,7 +56,13 @@ export class ThreadShorter extends BaseShorter { .messages(messageId) .threads.post({ body, reason }) .then(async thread => { - await this.client.cache.channels?.setIfNI('Guilds', thread.id, (thread as APIThreadChannel).guild_id!, thread); + await this.client.cache.channels?.setIfNI( + CacheFrom.Rest, + 'Guilds', + thread.id, + (thread as APIThreadChannel).guild_id!, + thread, + ); return channelFrom(thread, this.client) as ThreadChannelStructure; }); } diff --git a/src/common/shorters/users.ts b/src/common/shorters/users.ts index 5bfd210..5e11f22 100644 --- a/src/common/shorters/users.ts +++ b/src/common/shorters/users.ts @@ -1,3 +1,4 @@ +import { CacheFrom } from '../..'; import { type DMChannelStructure, type MessageStructure, @@ -17,7 +18,7 @@ export class UsersShorter extends BaseShorter { const data = await this.client.proxy.users('@me').channels.post({ body: { recipient_id: userId }, }); - await this.client.cache.channels?.set(userId, '@me', data); + await this.client.cache.channels?.set(CacheFrom.Rest, userId, '@me', data); return Transformers.DMChannel(this.client, data); } @@ -38,7 +39,7 @@ export class UsersShorter extends BaseShorter { } const data = await this.client.proxy.users(userId).get(); - await this.client.cache.users?.patch(userId, data); + await this.client.cache.users?.patch(CacheFrom.Rest, userId, data); return data; }