diff --git a/src/cache/resources/guilds.ts b/src/cache/resources/guilds.ts index d45925d..a2db4e2 100644 --- a/src/cache/resources/guilds.ts +++ b/src/cache/resources/guilds.ts @@ -18,7 +18,7 @@ export class Guilds extends BaseResource { + raw(id: string): ReturnCache<(APIGuild & { member_count?: number }) | undefined> { return super.get(id); } @@ -28,7 +28,7 @@ export class Guilds extends BaseResource { + bulkRaw(ids: string[]): ReturnCache<(APIGuild & { member_count?: number })[]> { return super.bulk(ids); } @@ -38,7 +38,7 @@ export class Guilds extends BaseResource { + valuesRaw(): ReturnCache<(APIGuild & { member_count?: number })[]> { return super.values(); } diff --git a/src/cache/resources/members.ts b/src/cache/resources/members.ts index 73cef5b..f67e80c 100644 --- a/src/cache/resources/members.ts +++ b/src/cache/resources/members.ts @@ -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 { namespace = 'member'; @@ -39,14 +39,21 @@ export class Members extends GuildBasedResource { override bulk(ids: string[], guild: string): ReturnCache { 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> = {}; + 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 { override values(guild: string): ReturnCache { 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> = {}; + 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; + }), ); }