From 9e0586986d9ecdd9b52006d64fef80a6c90b6696 Mon Sep 17 00:00:00 2001 From: MARCROCK22 Date: Tue, 2 Jul 2024 21:53:00 +0000 Subject: [PATCH] feat: cache raw methods --- src/cache/resources/bans.ts | 24 ++++++++++++++++++++++++ src/cache/resources/channels.ts | 16 ++++++++++++---- src/cache/resources/emojis.ts | 12 ++++++++++++ src/cache/resources/guilds.ts | 16 ++++++++++++---- src/cache/resources/members.ts | 24 ++++++++++++++++-------- src/cache/resources/messages.ts | 14 +++++++++++++- src/cache/resources/overwrites.ts | 10 +++++++++- src/cache/resources/roles.ts | 12 ++++++++---- src/cache/resources/stickers.ts | 12 ++++++++++++ src/cache/resources/threads.ts | 12 ++++++++++++ src/cache/resources/users.ts | 8 ++++---- src/cache/resources/voice-states.ts | 12 ++++++++++++ src/common/shorters/channels.ts | 8 +++++++- 13 files changed, 153 insertions(+), 27 deletions(-) diff --git a/src/cache/resources/bans.ts b/src/cache/resources/bans.ts index 1bbed63..9c22177 100644 --- a/src/cache/resources/bans.ts +++ b/src/cache/resources/bans.ts @@ -22,6 +22,10 @@ export class Bans extends GuildBasedResource | undefined> { + return super.get(id, guild); + } + override bulk(ids: string[], guild: string): ReturnCache { return fakePromise(super.bulk(ids, guild)).then( bans => @@ -33,6 +37,16 @@ export class Bans extends GuildBasedResource[]> { + return fakePromise(super.bulk(ids, guild)).then(bans => + bans + .map(rawBan => { + return rawBan; + }) + .filter(Boolean), + ); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild)).then( bans => @@ -43,4 +57,14 @@ export class Bans extends GuildBasedResource[]> { + return fakePromise(super.values(guild)).then(bans => + bans + .map(rawBan => { + return rawBan; + }) + .filter(Boolean), + ); + } } diff --git a/src/cache/resources/channels.ts b/src/cache/resources/channels.ts index 51aee77..bc757b5 100644 --- a/src/cache/resources/channels.ts +++ b/src/cache/resources/channels.ts @@ -13,25 +13,33 @@ export class Channels extends GuildRelatedResource { return rest; } - raw(id: string): ReturnCache { - return super.get(id); - } - override get(id: string): ReturnCache { return fakePromise(super.get(id)).then(rawChannel => rawChannel ? channelFrom(rawChannel, this.client) : undefined, ); } + raw(id: string): ReturnCache | undefined> { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache[]> { return fakePromise(super.bulk(ids)).then(channels => channels.map(rawChannel => channelFrom(rawChannel, this.client)), ); } + bulkRaw(ids: string[]): ReturnCache[]> { + return fakePromise(super.bulk(ids)).then(channels => channels.map(rawChannel => rawChannel)); + } + override values(guild: string): ReturnCache[]> { return fakePromise(super.values(guild)).then(channels => channels.map(rawChannel => channelFrom(rawChannel, this.client)), ); } + + valuesRaw(guild: string): ReturnCache[]> { + return fakePromise(super.values(guild)).then(channels => channels.map(rawChannel => rawChannel)); + } } diff --git a/src/cache/resources/emojis.ts b/src/cache/resources/emojis.ts index 0a446af..51e9966 100644 --- a/src/cache/resources/emojis.ts +++ b/src/cache/resources/emojis.ts @@ -18,15 +18,27 @@ export class Emojis extends GuildRelatedResource { ); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids) as (APIEmoji & { id: string; guild_id: string })[]).then(emojis => emojis.map(rawEmoji => Transformers.GuildEmoji(this.client, rawEmoji, rawEmoji.guild_id)), ); } + bulkRaw(ids: string[]): ReturnCache<(APIEmoji & { id: string; guild_id: string })[]> { + return super.bulk(ids); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild) as (APIEmoji & { id: string; guild_id: string })[]).then(emojis => emojis.map(rawEmoji => Transformers.GuildEmoji(this.client, rawEmoji, rawEmoji.guild_id)), ); } + + valuesRaw(guild: string): ReturnCache<(APIEmoji & { id: string; guild_id: string })[]> { + return super.values(guild); + } } diff --git a/src/cache/resources/guilds.ts b/src/cache/resources/guilds.ts index 7c74d4d..a350e09 100644 --- a/src/cache/resources/guilds.ts +++ b/src/cache/resources/guilds.ts @@ -12,28 +12,36 @@ export class Guilds extends BaseResource { - return super.get(id); - } - override get(id: string): ReturnCache | undefined> { return fakePromise(super.get(id)).then(guild => guild ? Transformers.Guild<'cached'>(this.client, guild) : undefined, ); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache[]> { return fakePromise(super.bulk(ids) as APIGuild[]).then(guilds => guilds.map(x => Transformers.Guild<'cached'>(this.client, x)), ); } + bulkRaw(ids: string[]): ReturnCache { + return super.bulk(ids); + } + override values(): ReturnCache[]> { return fakePromise(super.values() as APIGuild[]).then(guilds => guilds.map(x => Transformers.Guild<'cached'>(this.client, x)), ); } + valuesRaw(): ReturnCache { + return super.values(); + } + override async remove(id: string) { const keysChannels = this.cache.channels?.keys(id) ?? []; await this.cache.adapter.bulkRemove( diff --git a/src/cache/resources/members.ts b/src/cache/resources/members.ts index 40cc464..419771b 100644 --- a/src/cache/resources/members.ts +++ b/src/cache/resources/members.ts @@ -16,6 +16,14 @@ export class Members extends GuildBasedResource { return rest; } + override get(id: string, guild: string): ReturnCache { + return fakePromise(super.get(id, guild)).then(rawMember => + fakePromise(this.client.cache.users?.raw(id)).then(user => + rawMember && user ? Transformers.GuildMember(this.client, rawMember, user, guild) : undefined, + ), + ); + } + raw(id: string, guild: string): ReturnCache { return fakePromise(super.get(id, guild) as Omit).then(rawMember => { return fakePromise(this.client.cache.users?.raw(id)).then(user => @@ -29,14 +37,6 @@ export class Members extends GuildBasedResource { }); } - override get(id: string, guild: string): ReturnCache { - return fakePromise(super.get(id, guild)).then(rawMember => - fakePromise(this.client.cache.users?.raw(id)).then(user => - rawMember && user ? Transformers.GuildMember(this.client, rawMember, user, guild) : undefined, - ), - ); - } - override bulk(ids: string[], guild: string): ReturnCache { return fakePromise(super.bulk(ids, guild)).then(members => fakePromise(this.client.cache.users?.bulkRaw(ids)).then( @@ -51,6 +51,10 @@ export class Members extends GuildBasedResource { ); } + bulkRaw(ids: string[], guild: string): ReturnCache[]> { + return super.bulk(ids, guild); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild)).then(members => fakePromise(this.client.cache.users?.valuesRaw()).then( @@ -65,6 +69,10 @@ export class Members extends GuildBasedResource { ); } + valuesRaw(guild: string): ReturnCache[]> { + 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) { diff --git a/src/cache/resources/messages.ts b/src/cache/resources/messages.ts index 4f707ae..fd6a94b 100644 --- a/src/cache/resources/messages.ts +++ b/src/cache/resources/messages.ts @@ -31,6 +31,10 @@ export class Messages extends GuildRelatedResource { }); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids) as APIMessageResource[]).then( messages => @@ -48,6 +52,10 @@ export class Messages extends GuildRelatedResource { ); } + bulkRaw(ids: string[]): ReturnCache { + return super.bulk(ids); + } + override values(channel: string): ReturnCache { return fakePromise(super.values(channel) as APIMessageResource[]).then(messages => { const hashes: (string | undefined)[] = this.cache.users @@ -64,9 +72,13 @@ export class Messages extends GuildRelatedResource { }); } + valuesRaw(channel: string): ReturnCache { + return super.values(channel); + } + keys(channel: string) { return super.keys(channel); } } -export type APIMessageResource = Omit & { user_id?: string }; +export type APIMessageResource = Omit & { user_id?: string }; diff --git a/src/cache/resources/overwrites.ts b/src/cache/resources/overwrites.ts index 31d62b4..5fe5e73 100644 --- a/src/cache/resources/overwrites.ts +++ b/src/cache/resources/overwrites.ts @@ -19,7 +19,7 @@ export class Overwrites extends GuildRelatedResource { return data; } - raw(id: string): ReturnCache<(APIOverwrite & { guild_id: string })[]> { + raw(id: string): ReturnCache<(APIOverwrite & { guild_id: string })[] | undefined> { return super.get(id); } @@ -59,6 +59,10 @@ export class Overwrites extends GuildRelatedResource { ); } + valuesRaw(guild: string): ReturnCache<(APIOverwrite & { guild_id: string })[][]> { + return super.values(guild); + } + override bulk( ids: string[], ): ReturnCache<{ type: number; id: string; deny: PermissionsBitField; allow: PermissionsBitField }[][]> { @@ -74,4 +78,8 @@ export class Overwrites extends GuildRelatedResource { ), ); } + + bulkRaw(ids: string[]): ReturnCache<(APIOverwrite & { guild_id: string })[][]> { + return super.bulk(ids); + } } diff --git a/src/cache/resources/roles.ts b/src/cache/resources/roles.ts index a96aa5f..afc568d 100644 --- a/src/cache/resources/roles.ts +++ b/src/cache/resources/roles.ts @@ -12,22 +12,26 @@ export class Roles extends GuildRelatedResource { return true; } - raw(id: string): ReturnCache { - return super.get(id); - } - override get(id: string): ReturnCache { return fakePromise(super.get(id)).then(rawRole => rawRole ? Transformers.GuildRole(this.client, rawRole, rawRole.guild_id) : undefined, ); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids)).then(roles => roles.map(rawRole => Transformers.GuildRole(this.client, rawRole, rawRole.guild_id)), ); } + bulkRaw(ids: string[]): ReturnCache { + return super.bulk(ids); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild)).then(roles => roles.map(rawRole => Transformers.GuildRole(this.client, rawRole, rawRole.guild_id)), diff --git a/src/cache/resources/stickers.ts b/src/cache/resources/stickers.ts index 0449842..1b2571a 100644 --- a/src/cache/resources/stickers.ts +++ b/src/cache/resources/stickers.ts @@ -18,15 +18,27 @@ export class Stickers extends GuildRelatedResource { ); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids) as APISticker[]).then(emojis => emojis.map(rawSticker => Transformers.Sticker(this.client, rawSticker)), ); } + bulkRaw(ids: string[]): ReturnCache { + return super.bulk(ids); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild) as APISticker[]).then(emojis => emojis.map(rawSticker => Transformers.Sticker(this.client, rawSticker)), ); } + + valuesRaw(guild: string): ReturnCache { + return super.values(guild); + } } diff --git a/src/cache/resources/threads.ts b/src/cache/resources/threads.ts index 29a9a26..ec1f1e9 100644 --- a/src/cache/resources/threads.ts +++ b/src/cache/resources/threads.ts @@ -18,15 +18,27 @@ export class Threads extends GuildRelatedResource { ); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids) as APIThreadChannel[]).then(threads => threads.map(rawThread => Transformers.ThreadChannel(this.client, rawThread)), ); } + bulkRaw(ids: string[]): ReturnCache { + return super.bulk(ids); + } + override values(guild: string): ReturnCache { return fakePromise(super.values(guild) as APIThreadChannel[]).then(threads => threads.map(rawThread => Transformers.ThreadChannel(this.client, rawThread)), ); } + + valuesRaw(guild: string): ReturnCache { + return super.values(guild); + } } diff --git a/src/cache/resources/users.ts b/src/cache/resources/users.ts index 03b2b89..55b47c9 100644 --- a/src/cache/resources/users.ts +++ b/src/cache/resources/users.ts @@ -12,14 +12,14 @@ export class Users extends BaseResource { return true; } - raw(id: string): ReturnCache { - return super.get(id); - } - override get(id: string): ReturnCache { return fakePromise(super.get(id)).then(rawUser => (rawUser ? Transformers.User(this.client, rawUser) : undefined)); } + raw(id: string): ReturnCache { + return super.get(id); + } + override bulk(ids: string[]): ReturnCache { return fakePromise(super.bulk(ids) as APIUser[]).then(users => users.map(rawUser => Transformers.User(this.client, rawUser)), diff --git a/src/cache/resources/voice-states.ts b/src/cache/resources/voice-states.ts index 5bace4a..f9f0265 100644 --- a/src/cache/resources/voice-states.ts +++ b/src/cache/resources/voice-states.ts @@ -23,6 +23,10 @@ export class VoiceStates extends GuildBasedResource { ); } + raw(memberId: string, guildId: string): ReturnCache { + return super.get(memberId, guildId); + } + override bulk(ids: string[], guild: string): ReturnCache { return fakePromise(super.bulk(ids, guild)).then( states => @@ -32,11 +36,19 @@ export class VoiceStates extends GuildBasedResource { ); } + bulkRaw(ids: string[], guild: string): ReturnCache { + return super.bulk(ids, guild); + } + override values(guildId: string): ReturnCache { return fakePromise(super.values(guildId)).then(states => states.map(state => Transformers.VoiceState(this.client, state)), ); } + + valuesRaw(guildId: string): ReturnCache { + return super.values(guildId); + } } export type VoiceStateResource = Omit & { guild_id: string }; diff --git a/src/common/shorters/channels.ts b/src/common/shorters/channels.ts index b2cee8f..5fd93e5 100644 --- a/src/common/shorters/channels.ts +++ b/src/common/shorters/channels.ts @@ -5,6 +5,8 @@ import { type RESTPatchAPIChannelJSONBody, type RESTPostAPIChannelThreadsJSONBody, type RESTPostAPIGuildForumThreadsJSONBody, + type ChannelType, + type APIGuildChannel, } from 'discord-api-types/v10'; import { BaseChannel, type GuildRole, type GuildMember } from '../../structures'; import channelFrom, { type AllChannels } from '../../structures/channels'; @@ -29,7 +31,11 @@ export class ChannelShorter extends BaseShorter { let channel; if (!force) { channel = await this.client.cache.channels?.raw(id); - if (channel) return channel; + const overwrites = await this.client.cache.overwrites?.raw(id); + if (channel) { + if (overwrites) (channel as APIGuildChannel).permission_overwrites = overwrites; + return channel as APIChannel; + } } channel = await this.client.proxy.channels(id).get();