feat: cache raw methods

This commit is contained in:
MARCROCK22 2024-07-02 21:53:00 +00:00
parent eb1a999c45
commit 9e0586986d
13 changed files with 153 additions and 27 deletions

View File

@ -22,6 +22,10 @@ export class Bans extends GuildBasedResource<any, GatewayGuildBanModifyDispatchD
);
}
raw(id: string, guild: string): ReturnCache<Omit<GatewayGuildBanModifyDispatchData | APIBan, 'user'> | undefined> {
return super.get(id, guild);
}
override bulk(ids: string[], guild: string): ReturnCache<GuildBanStructure[]> {
return fakePromise(super.bulk(ids, guild)).then(
bans =>
@ -33,6 +37,16 @@ export class Bans extends GuildBasedResource<any, GatewayGuildBanModifyDispatchD
);
}
bulkRaw(ids: string[], guild: string): ReturnCache<Omit<GatewayGuildBanModifyDispatchData | APIBan, 'user'>[]> {
return fakePromise(super.bulk(ids, guild)).then(bans =>
bans
.map(rawBan => {
return rawBan;
})
.filter(Boolean),
);
}
override values(guild: string): ReturnCache<GuildBanStructure[]> {
return fakePromise(super.values(guild)).then(
bans =>
@ -43,4 +57,14 @@ export class Bans extends GuildBasedResource<any, GatewayGuildBanModifyDispatchD
.filter(Boolean) as GuildBanStructure[],
);
}
valuesRaw(guild: string): ReturnCache<Omit<GatewayGuildBanModifyDispatchData | APIBan, 'user'>[]> {
return fakePromise(super.values(guild)).then(bans =>
bans
.map(rawBan => {
return rawBan;
})
.filter(Boolean),
);
}
}

View File

@ -13,25 +13,33 @@ export class Channels extends GuildRelatedResource<any, APIChannel> {
return rest;
}
raw(id: string): ReturnCache<APIChannel | undefined> {
return super.get(id);
}
override get(id: string): ReturnCache<AllChannels | undefined> {
return fakePromise(super.get(id)).then(rawChannel =>
rawChannel ? channelFrom(rawChannel, this.client) : undefined,
);
}
raw(id: string): ReturnCache<Omit<APIChannel, 'permission_overwrites'> | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<ReturnType<typeof channelFrom>[]> {
return fakePromise(super.bulk(ids)).then(channels =>
channels.map(rawChannel => channelFrom(rawChannel, this.client)),
);
}
bulkRaw(ids: string[]): ReturnCache<Omit<APIChannel, 'permission_overwrites'>[]> {
return fakePromise(super.bulk(ids)).then(channels => channels.map(rawChannel => rawChannel));
}
override values(guild: string): ReturnCache<ReturnType<typeof channelFrom>[]> {
return fakePromise(super.values(guild)).then(channels =>
channels.map(rawChannel => channelFrom(rawChannel, this.client)),
);
}
valuesRaw(guild: string): ReturnCache<Omit<APIChannel, 'permission_overwrites'>[]> {
return fakePromise(super.values(guild)).then(channels => channels.map(rawChannel => rawChannel));
}
}

View File

@ -18,15 +18,27 @@ export class Emojis extends GuildRelatedResource<any, APIEmoji> {
);
}
raw(id: string): ReturnCache<APIEmoji | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<GuildEmojiStructure[]> {
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<GuildEmojiStructure[]> {
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);
}
}

View File

@ -12,28 +12,36 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
return true;
}
raw(id: string): ReturnCache<APIGuild | undefined> {
return super.get(id);
}
override get(id: string): ReturnCache<GuildStructure<'cached'> | undefined> {
return fakePromise(super.get(id)).then(guild =>
guild ? Transformers.Guild<'cached'>(this.client, guild) : undefined,
);
}
raw(id: string): ReturnCache<APIGuild | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<GuildStructure<'cached'>[]> {
return fakePromise(super.bulk(ids) as APIGuild[]).then(guilds =>
guilds.map(x => Transformers.Guild<'cached'>(this.client, x)),
);
}
bulkRaw(ids: string[]): ReturnCache<APIGuild[]> {
return super.bulk(ids);
}
override values(): ReturnCache<GuildStructure<'cached'>[]> {
return fakePromise(super.values() as APIGuild[]).then(guilds =>
guilds.map(x => Transformers.Guild<'cached'>(this.client, x)),
);
}
valuesRaw(): ReturnCache<APIGuild[]> {
return super.values();
}
override async remove(id: string) {
const keysChannels = this.cache.channels?.keys(id) ?? [];
await this.cache.adapter.bulkRemove(

View File

@ -16,6 +16,14 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
return rest;
}
override get(id: string, guild: string): ReturnCache<GuildMemberStructure | undefined> {
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<APIGuildMember | undefined> {
return fakePromise(super.get(id, guild) as Omit<APIGuildMember, 'user'>).then(rawMember => {
return fakePromise(this.client.cache.users?.raw(id)).then(user =>
@ -29,14 +37,6 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
});
}
override get(id: string, guild: string): ReturnCache<GuildMemberStructure | undefined> {
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<GuildMemberStructure[]> {
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<any, APIGuildMember> {
);
}
bulkRaw(ids: string[], guild: string): ReturnCache<Omit<APIGuildMember, 'user'>[]> {
return super.bulk(ids, guild);
}
override values(guild: string): ReturnCache<GuildMemberStructure[]> {
return fakePromise(super.values(guild)).then(members =>
fakePromise(this.client.cache.users?.valuesRaw()).then(
@ -65,6 +69,10 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
);
}
valuesRaw(guild: string): ReturnCache<Omit<APIGuildMember, 'user'>[]> {
return super.values(guild);
}
override async set(memberId: string, guildId: string, data: any): Promise<void>;
override async set(memberId_dataArray: [string, any][], guildId: string): Promise<void>;
override async set(__keys: string | [string, any][], guild: string, data?: any) {

View File

@ -31,6 +31,10 @@ export class Messages extends GuildRelatedResource<any, APIMessage> {
});
}
raw(id: string): ReturnCache<APIMessageResource | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<MessageStructure[]> {
return fakePromise(super.bulk(ids) as APIMessageResource[]).then(
messages =>
@ -48,6 +52,10 @@ export class Messages extends GuildRelatedResource<any, APIMessage> {
);
}
bulkRaw(ids: string[]): ReturnCache<APIMessageResource[]> {
return super.bulk(ids);
}
override values(channel: string): ReturnCache<MessageStructure[]> {
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<any, APIMessage> {
});
}
valuesRaw(channel: string): ReturnCache<APIMessageResource[]> {
return super.values(channel);
}
keys(channel: string) {
return super.keys(channel);
}
}
export type APIMessageResource = Omit<APIMessage, 'author'> & { user_id?: string };
export type APIMessageResource = Omit<APIMessage, 'author' | 'member'> & { user_id?: string };

View File

@ -19,7 +19,7 @@ export class Overwrites extends GuildRelatedResource<any, APIOverwrite[]> {
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<any, APIOverwrite[]> {
);
}
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<any, APIOverwrite[]> {
),
);
}
bulkRaw(ids: string[]): ReturnCache<(APIOverwrite & { guild_id: string })[][]> {
return super.bulk(ids);
}
}

View File

@ -12,22 +12,26 @@ export class Roles extends GuildRelatedResource<any, APIRole> {
return true;
}
raw(id: string): ReturnCache<APIRole | undefined> {
return super.get(id);
}
override get(id: string): ReturnCache<GuildRoleStructure | undefined> {
return fakePromise(super.get(id)).then(rawRole =>
rawRole ? Transformers.GuildRole(this.client, rawRole, rawRole.guild_id) : undefined,
);
}
raw(id: string): ReturnCache<APIRole | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<GuildRoleStructure[]> {
return fakePromise(super.bulk(ids)).then(roles =>
roles.map(rawRole => Transformers.GuildRole(this.client, rawRole, rawRole.guild_id)),
);
}
bulkRaw(ids: string[]): ReturnCache<APIRole[]> {
return super.bulk(ids);
}
override values(guild: string): ReturnCache<GuildRoleStructure[]> {
return fakePromise(super.values(guild)).then(roles =>
roles.map(rawRole => Transformers.GuildRole(this.client, rawRole, rawRole.guild_id)),

View File

@ -18,15 +18,27 @@ export class Stickers extends GuildRelatedResource<any, APISticker> {
);
}
raw(id: string): ReturnCache<APISticker | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<StickerStructure[]> {
return fakePromise(super.bulk(ids) as APISticker[]).then(emojis =>
emojis.map(rawSticker => Transformers.Sticker(this.client, rawSticker)),
);
}
bulkRaw(ids: string[]): ReturnCache<APISticker[]> {
return super.bulk(ids);
}
override values(guild: string): ReturnCache<StickerStructure[]> {
return fakePromise(super.values(guild) as APISticker[]).then(emojis =>
emojis.map(rawSticker => Transformers.Sticker(this.client, rawSticker)),
);
}
valuesRaw(guild: string): ReturnCache<APISticker[]> {
return super.values(guild);
}
}

View File

@ -18,15 +18,27 @@ export class Threads extends GuildRelatedResource<any, APIThreadChannel> {
);
}
raw(id: string): ReturnCache<APIThreadChannel | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<ThreadChannelStructure[]> {
return fakePromise(super.bulk(ids) as APIThreadChannel[]).then(threads =>
threads.map(rawThread => Transformers.ThreadChannel(this.client, rawThread)),
);
}
bulkRaw(ids: string[]): ReturnCache<APIThreadChannel[]> {
return super.bulk(ids);
}
override values(guild: string): ReturnCache<ThreadChannelStructure[]> {
return fakePromise(super.values(guild) as APIThreadChannel[]).then(threads =>
threads.map(rawThread => Transformers.ThreadChannel(this.client, rawThread)),
);
}
valuesRaw(guild: string): ReturnCache<APIThreadChannel[]> {
return super.values(guild);
}
}

View File

@ -12,14 +12,14 @@ export class Users extends BaseResource<any, APIUser> {
return true;
}
raw(id: string): ReturnCache<APIUser | undefined> {
return super.get(id);
}
override get(id: string): ReturnCache<UserStructure | undefined> {
return fakePromise(super.get(id)).then(rawUser => (rawUser ? Transformers.User(this.client, rawUser) : undefined));
}
raw(id: string): ReturnCache<APIUser | undefined> {
return super.get(id);
}
override bulk(ids: string[]): ReturnCache<UserStructure[]> {
return fakePromise(super.bulk(ids) as APIUser[]).then(users =>
users.map(rawUser => Transformers.User(this.client, rawUser)),

View File

@ -23,6 +23,10 @@ export class VoiceStates extends GuildBasedResource<any, GatewayVoiceState> {
);
}
raw(memberId: string, guildId: string): ReturnCache<GatewayVoiceState | undefined> {
return super.get(memberId, guildId);
}
override bulk(ids: string[], guild: string): ReturnCache<VoiceStateStructure[]> {
return fakePromise(super.bulk(ids, guild)).then(
states =>
@ -32,11 +36,19 @@ export class VoiceStates extends GuildBasedResource<any, GatewayVoiceState> {
);
}
bulkRaw(ids: string[], guild: string): ReturnCache<GatewayVoiceState[]> {
return super.bulk(ids, guild);
}
override values(guildId: string): ReturnCache<VoiceStateStructure[]> {
return fakePromise(super.values(guildId)).then(states =>
states.map(state => Transformers.VoiceState(this.client, state)),
);
}
valuesRaw(guildId: string): ReturnCache<GatewayVoiceState[]> {
return super.values(guildId);
}
}
export type VoiceStateResource = Omit<GatewayVoiceState, 'member'> & { guild_id: string };

View File

@ -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<ChannelType>).permission_overwrites = overwrites;
return channel as APIChannel;
}
}
channel = await this.client.proxy.channels(id).get();