mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
perf: optimize members cache
This commit is contained in:
parent
ce3d75121d
commit
f03eb57ed5
6
src/cache/resources/guilds.ts
vendored
6
src/cache/resources/guilds.ts
vendored
@ -18,7 +18,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
|
||||
);
|
||||
}
|
||||
|
||||
raw(id: string): ReturnCache<APIGuild | undefined> {
|
||||
raw(id: string): ReturnCache<(APIGuild & { member_count?: number }) | undefined> {
|
||||
return super.get(id);
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
|
||||
);
|
||||
}
|
||||
|
||||
bulkRaw(ids: string[]): ReturnCache<APIGuild[]> {
|
||||
bulkRaw(ids: string[]): ReturnCache<(APIGuild & { member_count?: number })[]> {
|
||||
return super.bulk(ids);
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
|
||||
);
|
||||
}
|
||||
|
||||
valuesRaw(): ReturnCache<APIGuild[]> {
|
||||
valuesRaw(): ReturnCache<(APIGuild & { member_count?: number })[]> {
|
||||
return super.values();
|
||||
}
|
||||
|
||||
|
36
src/cache/resources/members.ts
vendored
36
src/cache/resources/members.ts
vendored
@ -1,7 +1,7 @@
|
||||
import type { CacheFrom, ReturnCache } from '../..';
|
||||
import { type GuildMemberStructure, Transformers } from '../../client/transformers';
|
||||
import { fakePromise } from '../../common';
|
||||
import type { APIGuildMember } from '../../types';
|
||||
import type { APIGuildMember, APIUser } from '../../types';
|
||||
import { GuildBasedResource } from './default/guild-based';
|
||||
export class Members extends GuildBasedResource<any, APIGuildMember> {
|
||||
namespace = 'member';
|
||||
@ -39,14 +39,21 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
|
||||
|
||||
override bulk(ids: string[], guild: string): ReturnCache<GuildMemberStructure[]> {
|
||||
return fakePromise(super.bulk(ids, guild)).then(members =>
|
||||
fakePromise(this.client.cache.users?.bulkRaw(ids)).then(users =>
|
||||
members
|
||||
fakePromise(this.client.cache.users?.bulkRaw(ids)).then(users => {
|
||||
if (!users) return [];
|
||||
let usersRecord: null | Partial<Record<string, APIUser>> = {};
|
||||
for (const user of users) {
|
||||
usersRecord[user.id] = user;
|
||||
}
|
||||
const result = members
|
||||
.map(rawMember => {
|
||||
const user = users?.find(x => x.id === rawMember.id);
|
||||
const user = usersRecord![rawMember.id];
|
||||
return user ? Transformers.GuildMember(this.client, rawMember, user, guild) : undefined;
|
||||
})
|
||||
.filter(x => x !== undefined),
|
||||
),
|
||||
.filter(x => x !== undefined);
|
||||
usersRecord = null;
|
||||
return result;
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@ -56,14 +63,21 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
|
||||
|
||||
override values(guild: string): ReturnCache<GuildMemberStructure[]> {
|
||||
return fakePromise(super.values(guild)).then(members =>
|
||||
fakePromise(this.client.cache.users?.valuesRaw()).then(users =>
|
||||
members
|
||||
fakePromise(this.client.cache.users?.bulkRaw(members.map(member => member.id))).then(users => {
|
||||
if (!users) return [];
|
||||
let usersRecord: null | Partial<Record<string, APIUser>> = {};
|
||||
for (const user of users) {
|
||||
usersRecord[user.id] = user;
|
||||
}
|
||||
const result = members
|
||||
.map(rawMember => {
|
||||
const user = users?.find(x => x.id === rawMember.id);
|
||||
const user = usersRecord![rawMember.id];
|
||||
return user ? Transformers.GuildMember(this.client, rawMember, user, rawMember.guild_id) : undefined;
|
||||
})
|
||||
.filter(x => x !== undefined),
|
||||
),
|
||||
.filter(x => x !== undefined);
|
||||
usersRecord = null;
|
||||
return result;
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user