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);
|
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);
|
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();
|
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 { CacheFrom, ReturnCache } from '../..';
|
||||||
import { type GuildMemberStructure, Transformers } from '../../client/transformers';
|
import { type GuildMemberStructure, Transformers } from '../../client/transformers';
|
||||||
import { fakePromise } from '../../common';
|
import { fakePromise } from '../../common';
|
||||||
import type { APIGuildMember } from '../../types';
|
import type { APIGuildMember, APIUser } from '../../types';
|
||||||
import { GuildBasedResource } from './default/guild-based';
|
import { GuildBasedResource } from './default/guild-based';
|
||||||
export class Members extends GuildBasedResource<any, APIGuildMember> {
|
export class Members extends GuildBasedResource<any, APIGuildMember> {
|
||||||
namespace = 'member';
|
namespace = 'member';
|
||||||
@ -39,14 +39,21 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
|
|||||||
|
|
||||||
override bulk(ids: string[], guild: string): ReturnCache<GuildMemberStructure[]> {
|
override bulk(ids: string[], guild: string): ReturnCache<GuildMemberStructure[]> {
|
||||||
return fakePromise(super.bulk(ids, guild)).then(members =>
|
return fakePromise(super.bulk(ids, guild)).then(members =>
|
||||||
fakePromise(this.client.cache.users?.bulkRaw(ids)).then(users =>
|
fakePromise(this.client.cache.users?.bulkRaw(ids)).then(users => {
|
||||||
members
|
if (!users) return [];
|
||||||
|
let usersRecord: null | Partial<Record<string, APIUser>> = {};
|
||||||
|
for (const user of users) {
|
||||||
|
usersRecord[user.id] = user;
|
||||||
|
}
|
||||||
|
const result = members
|
||||||
.map(rawMember => {
|
.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;
|
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[]> {
|
override values(guild: string): ReturnCache<GuildMemberStructure[]> {
|
||||||
return fakePromise(super.values(guild)).then(members =>
|
return fakePromise(super.values(guild)).then(members =>
|
||||||
fakePromise(this.client.cache.users?.valuesRaw()).then(users =>
|
fakePromise(this.client.cache.users?.bulkRaw(members.map(member => member.id))).then(users => {
|
||||||
members
|
if (!users) return [];
|
||||||
|
let usersRecord: null | Partial<Record<string, APIUser>> = {};
|
||||||
|
for (const user of users) {
|
||||||
|
usersRecord[user.id] = user;
|
||||||
|
}
|
||||||
|
const result = members
|
||||||
.map(rawMember => {
|
.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;
|
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