feat: from parameter in resource#filter method (#311)

This commit is contained in:
MARCROCK22 2024-12-24 22:15:23 -04:00 committed by GitHub
parent ded2a32533
commit db63352dea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 235 additions and 155 deletions

83
src/cache/index.ts vendored
View File

@ -278,6 +278,7 @@ export class Cache {
async bulkPatch(
keys: (
| readonly [
CacheFrom,
/* type */
NonGuildBased,
/* data */
@ -286,6 +287,7 @@ export class Cache {
string,
]
| readonly [
CacheFrom,
/* type */
GuildBased | GuildRelated,
/* data */
@ -299,7 +301,7 @@ export class Cache {
) {
const allData: [string, any][] = [];
const relationshipsData: Record<string, string[]> = {};
for (const [type, data, id, guildId] of keys) {
for (const [from, type, data, id, guildId] of keys) {
switch (type) {
case 'roles':
case 'stickers':
@ -311,7 +313,7 @@ export class Cache {
case 'bans':
case 'messages':
{
if (!this[type]?.filter(data, id, guildId)) continue;
if (!this[type]?.filter(data, id, guildId, from)) continue;
const hashId = this[type]?.hashId(guildId!);
if (!hashId) {
continue;
@ -329,7 +331,7 @@ export class Cache {
case 'voiceStates':
case 'members':
{
if (!this[type]?.filter(data, id, guildId)) continue;
if (!this[type]?.filter(data, id, guildId, from)) continue;
const hashId = this[type]?.hashId(guildId!);
if (!hashId) {
continue;
@ -345,7 +347,7 @@ export class Cache {
case 'users':
case 'guilds':
{
if (!this[type]?.filter(data, id)) continue;
if (!this[type]?.filter(data, id, from)) continue;
const hashId = this[type]?.namespace;
if (!hashId) {
continue;
@ -369,6 +371,7 @@ export class Cache {
async bulkSet(
keys: (
| readonly [
CacheFrom,
/* type */
NonGuildBased,
/* data */
@ -377,6 +380,7 @@ export class Cache {
string,
]
| readonly [
CacheFrom,
/* type */
GuildBased | GuildRelated,
/* data */
@ -390,7 +394,7 @@ export class Cache {
) {
const allData: [string, any][] = [];
const relationshipsData: Record<string, string[]> = {};
for (const [type, data, id, guildId] of keys) {
for (const [from, type, data, id, guildId] of keys) {
switch (type) {
case 'roles':
case 'stickers':
@ -401,7 +405,7 @@ export class Cache {
case 'overwrites':
case 'messages':
{
if (!this[type]?.filter(data, id, guildId)) continue;
if (!this[type]?.filter(data, id, guildId, from)) continue;
const hashId = this[type]?.hashId(guildId!);
if (!hashId) {
continue;
@ -420,7 +424,7 @@ export class Cache {
case 'voiceStates':
case 'members':
{
if (!this[type]?.filter(data, id, guildId)) continue;
if (!this[type]?.filter(data, id, guildId, from)) continue;
const hashId = this[type]?.hashId(guildId!);
if (!hashId) {
continue;
@ -436,7 +440,7 @@ export class Cache {
case 'users':
case 'guilds':
{
if (!this[type]?.filter(data, id)) continue;
if (!this[type]?.filter(data, id, from)) continue;
const hashId = this[type]?.namespace;
if (!hashId) {
continue;
@ -464,17 +468,17 @@ export class Cache {
protected async onPacketDefault(event: GatewayDispatchPayload) {
switch (event.t) {
case 'READY':
await this.users?.set(event.d.user.id, event.d.user);
await this.users?.set(CacheFrom.Gateway, event.d.user.id, event.d.user);
break;
case 'GUILD_CREATE':
case 'GUILD_UPDATE':
case 'RAW_GUILD_CREATE':
await this.guilds?.patch(event.d.id, { unavailable: false, ...event.d });
await this.guilds?.patch(CacheFrom.Gateway, event.d.id, { unavailable: false, ...event.d });
break;
case 'GUILD_DELETE':
case 'RAW_GUILD_DELETE':
if (event.d.unavailable) {
await this.guilds?.patch(event.d.id, event.d);
await this.guilds?.patch(CacheFrom.Gateway, event.d.id, event.d);
} else {
await this.guilds?.remove(event.d.id);
}
@ -483,13 +487,18 @@ export class Cache {
case 'CHANNEL_UPDATE':
{
if ('guild_id' in event.d) {
await this.channels?.set(event.d.id, event.d.guild_id!, event.d);
await this.channels?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id!, event.d);
if (event.d.permission_overwrites?.length)
await this.overwrites?.set(event.d.id, event.d.guild_id!, event.d.permission_overwrites);
await this.overwrites?.set(
CacheFrom.Gateway,
event.d.id,
event.d.guild_id!,
event.d.permission_overwrites,
);
break;
}
if (event.d.type === ChannelType.DM) {
await this.channels?.set(event.d.recipients![0]?.id, '@me', event.d);
await this.channels?.set(CacheFrom.Gateway, event.d.recipients![0]?.id, '@me', event.d);
break;
}
}
@ -499,13 +508,13 @@ export class Cache {
break;
case 'GUILD_ROLE_CREATE':
case 'GUILD_ROLE_UPDATE':
await this.roles?.set(event.d.role.id, event.d.guild_id, event.d.role);
await this.roles?.set(CacheFrom.Gateway, event.d.role.id, event.d.guild_id, event.d.role);
break;
case 'GUILD_ROLE_DELETE':
await this.roles?.remove(event.d.role_id, event.d.guild_id);
break;
case 'GUILD_BAN_ADD':
await this.bans?.set(event.d.user.id, event.d.guild_id, event.d);
await this.bans?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d);
break;
case 'GUILD_BAN_REMOVE':
await this.bans?.remove(event.d.user.id, event.d.guild_id);
@ -514,6 +523,7 @@ export class Cache {
{
await this.emojis?.remove(await this.emojis?.keys(event.d.guild_id), event.d.guild_id);
await this.emojis?.set(
CacheFrom.Gateway,
event.d.emojis.map(x => [x.id!, x] as [string, APIEmoji]),
event.d.guild_id,
);
@ -523,6 +533,7 @@ export class Cache {
{
await this.stickers?.remove(await this.stickers?.keys(event.d.guild_id), event.d.guild_id);
await this.stickers?.set(
CacheFrom.Gateway,
event.d.stickers.map(x => [x.id, x] as [string, APISticker]),
event.d.guild_id,
);
@ -530,7 +541,7 @@ export class Cache {
break;
case 'GUILD_MEMBER_ADD':
case 'GUILD_MEMBER_UPDATE':
if (event.d.user) await this.members?.set(event.d.user.id, event.d.guild_id, event.d);
if (event.d.user) await this.members?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d);
break;
case 'GUILD_MEMBER_REMOVE':
await this.members?.remove(event.d.user.id, event.d.guild_id);
@ -538,12 +549,12 @@ export class Cache {
case 'PRESENCE_UPDATE':
// Should update member data?
await this.presences?.set(event.d.user.id, event.d.guild_id, event.d);
await this.presences?.set(CacheFrom.Gateway, event.d.user.id, event.d.guild_id, event.d);
break;
case 'THREAD_CREATE':
case 'THREAD_UPDATE':
if (event.d.guild_id) await this.channels?.set(event.d.id, event.d.guild_id, event.d);
if (event.d.guild_id) await this.channels?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id, event.d);
break;
case 'THREAD_DELETE':
@ -551,7 +562,7 @@ export class Cache {
break;
case 'USER_UPDATE':
await this.users?.set(event.d.id, event.d);
await this.users?.set(CacheFrom.Gateway, event.d.id, event.d);
break;
case 'VOICE_STATE_UPDATE':
@ -561,7 +572,7 @@ export class Cache {
}
if (event.d.channel_id != null) {
await this.voiceStates?.set(event.d.user_id, event.d.guild_id, event.d);
await this.voiceStates?.set(CacheFrom.Gateway, event.d.user_id, event.d.guild_id, event.d);
} else {
await this.voiceStates?.remove(event.d.user_id, event.d.guild_id);
}
@ -569,7 +580,7 @@ export class Cache {
break;
case 'STAGE_INSTANCE_CREATE':
case 'STAGE_INSTANCE_UPDATE':
await this.stageInstances?.set(event.d.id, event.d.guild_id, event.d);
await this.stageInstances?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id, event.d);
break;
case 'STAGE_INSTANCE_DELETE':
await this.stageInstances?.remove(event.d.id, event.d.guild_id);
@ -578,12 +589,13 @@ export class Cache {
{
if (this.messages !== undefined) {
const data: Parameters<Cache['bulkPatch']>[0] = [
['messages', event.d, event.d.id, event.d.channel_id],
['users', event.d.author, event.d.author.id],
[CacheFrom.Gateway, 'messages', event.d, event.d.id, event.d.channel_id],
[CacheFrom.Gateway, 'users', event.d.author, event.d.author.id],
];
if (event.d.guild_id) {
if (event.d.member) data.push(['members', event.d.member, event.d.author.id, event.d.guild_id]);
if (event.d.member)
data.push([CacheFrom.Gateway, 'members', event.d.member, event.d.author.id, event.d.guild_id]);
}
await this.bulkPatch(data);
@ -594,12 +606,13 @@ export class Cache {
{
if (this.messages !== undefined) {
const data: Parameters<Cache['bulkPatch']>[0] = [
['messages', event.d, event.d.id, event.d.channel_id],
['users', event.d.author, event.d.author.id],
[CacheFrom.Gateway, 'messages', event.d, event.d.id, event.d.channel_id],
[CacheFrom.Gateway, 'users', event.d.author, event.d.author.id],
];
if (event.d.guild_id) {
if (event.d.member) data.push(['members', event.d.member, event.d.author.id, event.d.guild_id]);
if (event.d.member)
data.push([CacheFrom.Gateway, 'members', event.d.member, event.d.author.id, event.d.guild_id]);
}
await this.bulkPatch(data);
@ -674,7 +687,7 @@ export class Cache {
createUser('marcrock'),
];
for (const user of users) {
await this.users.set(user.id, user);
await this.users.set(CacheFrom.Test, user.id, user);
}
let count = 0;
if ((await this.users.values()).length !== users.length)
@ -727,7 +740,7 @@ export class Cache {
for (const guildId in guildMembers) {
const members = guildMembers[guildId];
for (const member of members) {
await this.members.set(member.user.id, guildId, member);
await this.members.set(CacheFrom.Test, member.user.id, guildId, member);
}
if ((await this.members.values(guildId)).length !== members.length)
throw new Error('members.values(guildId) is not of the expected size.');
@ -836,7 +849,7 @@ export class Cache {
for (const guildId in guildChannels) {
const channels = guildChannels[guildId];
for (const channel of channels) {
await this.channels.set(channel.id, guildId, channel);
await this.channels.set(CacheFrom.Test, channel.id, guildId, channel);
}
if ((await this.channels.values(guildId)).length !== channels.length)
throw new Error('channels.values(guildId) is not of the expected size');
@ -905,7 +918,7 @@ export class Cache {
for (const guildId in guildOverwrites) {
const bulkOverwrites = guildOverwrites[guildId];
for (const overwrites of bulkOverwrites) {
await this.overwrites.set(overwrites[0].channel_id, guildId, overwrites);
await this.overwrites.set(CacheFrom.Test, overwrites[0].channel_id, guildId, overwrites);
}
if ((await this.overwrites.values(guildId)).length !== bulkOverwrites.length)
throw new Error('overwrites.values(channelId) is not of the expected size');
@ -956,3 +969,9 @@ export class Cache {
this.__logger__!.info('the overwrites cache seems to be alright.');
}
}
export enum CacheFrom {
Gateway = 1,
Rest,
Test,
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { type GuildBanStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIBan, GatewayGuildBanModifyDispatchData } from '../../types';
@ -7,7 +7,7 @@ export class Bans extends GuildBasedResource<any, GatewayGuildBanModifyDispatchD
namespace = 'ban';
//@ts-expect-error
filter(data: APIBan, id: string, guild_id: string) {
filter(data: APIBan, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,14 +1,14 @@
import { fakePromise } from '../../common';
import { type AllChannels, channelFrom } from '../../structures';
import type { APIChannel } from '../../types';
import type { ReturnCache } from '../index';
import type { CacheFrom, ReturnCache } from '../index';
import { GuildRelatedResource } from './default/guild-related';
export class Channels extends GuildRelatedResource<any, APIChannel> {
namespace = 'channel';
//@ts-expect-error
filter(data: APIChannel, id: string, guild_id: string) {
filter(data: APIChannel, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,7 +1,7 @@
import type { UsingClient } from '../../../commands';
import { fakePromise } from '../../../common';
import type { GatewayIntentBits } from '../../../types';
import type { Cache, ReturnCache } from '../../index';
import type { Cache, CacheFrom, ReturnCache } from '../../index';
export class BaseResource<T = any, S = any> {
namespace = 'base';
@ -12,7 +12,7 @@ export class BaseResource<T = any, S = any> {
) {}
//@ts-expect-error
filter(data: any, id: string) {
filter(data: any, id: string, from: CacheFrom) {
return true;
}
@ -27,9 +27,9 @@ export class BaseResource<T = any, S = any> {
return;
}
setIfNI(intent: keyof typeof GatewayIntentBits, id: string, data: S) {
setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, data: S) {
if (!this.cache.hasIntent(intent)) {
return this.set(id, data);
return this.set(from, id, data);
}
}
@ -41,13 +41,13 @@ export class BaseResource<T = any, S = any> {
return fakePromise(this.adapter.bulkGet(ids.map(id => this.hashId(id)))).then(x => x.filter(y => y));
}
set(id: string, data: S) {
if (!this.filter(data, id)) return;
set(from: CacheFrom, id: string, data: S) {
if (!this.filter(data, id, from)) return;
return fakePromise(this.addToRelationship(id)).then(() => this.adapter.set(this.hashId(id), data));
}
patch(id: string, data: S) {
if (!this.filter(data, id)) return;
patch(from: CacheFrom, id: string, data: S) {
if (!this.filter(data, id, from)) return;
return fakePromise(this.addToRelationship(id)).then(() => this.adapter.patch(this.hashId(id), data));
}

View File

@ -1,7 +1,7 @@
import type { UsingClient } from '../../../commands';
import { fakePromise } from '../../../common';
import type { GatewayIntentBits } from '../../../types';
import type { Cache, ReturnCache } from '../../index';
import type { Cache, CacheFrom, ReturnCache } from '../../index';
export class GuildBasedResource<T = any, S = any> {
namespace = 'base';
@ -12,7 +12,7 @@ export class GuildBasedResource<T = any, S = any> {
) {}
//@ts-expect-error
filter(data: any, id: string, guild_id: string) {
filter(data: any, id: string, guild_id: string, from: CacheFrom) {
return true;
}
@ -33,9 +33,9 @@ export class GuildBasedResource<T = any, S = any> {
return;
}
setIfNI(intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) {
setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) {
if (!this.cache.hasIntent(intent)) {
return this.set(id, guildId, data);
return this.set(from, id, guildId, data);
}
}
@ -47,11 +47,11 @@ export class GuildBasedResource<T = any, S = any> {
return fakePromise(this.adapter.bulkGet(ids.map(id => this.hashGuildId(guild, id)))).then(x => x.filter(y => y));
}
set(__keys: string, guild: string, data: S): ReturnCache<void>;
set(__keys: [string, S][], guild: string): ReturnCache<void>;
set(__keys: string | [string, S][], guild: string, data?: S): ReturnCache<void> {
set(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache<void>;
set(from: CacheFrom, __keys: [string, S][], guild: string): ReturnCache<void>;
set(from: CacheFrom, __keys: string | [string, S][], guild: string, data?: S): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x =>
this.filter(x[1], x[0] as string, guild),
this.filter(x[1], x[0] as string, guild, from),
) as [string, any][];
return fakePromise(
@ -68,13 +68,12 @@ export class GuildBasedResource<T = any, S = any> {
) as void;
}
patch(__keys: string, guild: string, data: S): ReturnCache<void>;
patch(__keys: [string, any][], guild: string): ReturnCache<void>;
patch(__keys: string | [string, any][], guild: string, data?: any): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => this.filter(x[1], x[0], guild)) as [
string,
any,
][];
patch(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache<void>;
patch(from: CacheFrom, __keys: [string, any][], guild: string): ReturnCache<void>;
patch(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x =>
this.filter(x[1], x[0], guild, from),
) as [string, any][];
return fakePromise(this.adapter.bulkGet(keys.map(([key]) => this.hashGuildId(guild, key)))).then(oldDatas =>
fakePromise(

View File

@ -1,7 +1,7 @@
import type { UsingClient } from '../../../commands';
import { fakePromise } from '../../../common';
import type { GatewayIntentBits } from '../../../types';
import type { Cache, ReturnCache } from '../../index';
import type { Cache, CacheFrom, ReturnCache } from '../../index';
export class GuildRelatedResource<T = any, S = any> {
namespace = 'base';
@ -12,7 +12,7 @@ export class GuildRelatedResource<T = any, S = any> {
) {}
//@ts-expect-error
filter(data: any, id: string, guild_id?: string) {
filter(data: any, id: string, guild_id: string, from: CacheFrom) {
return true;
}
@ -32,9 +32,9 @@ export class GuildRelatedResource<T = any, S = any> {
}
}
setIfNI(intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) {
setIfNI(from: CacheFrom, intent: keyof typeof GatewayIntentBits, id: string, guildId: string, data: S) {
if (!this.cache.hasIntent(intent)) {
return this.set(id, guildId, data);
return this.set(from, id, guildId, data);
}
}
@ -46,11 +46,11 @@ export class GuildRelatedResource<T = any, S = any> {
return fakePromise(this.adapter.bulkGet(ids.map(x => this.hashId(x)))).then(x => x.filter(y => y));
}
set(__keys: string, guild: string, data: S): ReturnCache<void>;
set(__keys: [string, S][], guild: string): ReturnCache<void>;
set(__keys: string | [string, S][], guild: string, data?: S): ReturnCache<void> {
set(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache<void>;
set(from: CacheFrom, __keys: [string, S][], guild: string): ReturnCache<void>;
set(from: CacheFrom, __keys: string | [string, S][], guild: string, data?: S): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x =>
this.filter(x[1], x[0] as string, guild),
this.filter(x[1], x[0] as string, guild, from),
) as [string, any][];
return fakePromise(
@ -68,13 +68,12 @@ export class GuildRelatedResource<T = any, S = any> {
);
}
patch(__keys: string, guild: string, data?: any): ReturnCache<void>;
patch(__keys: [string, any][], guild: string): ReturnCache<void>;
patch(__keys: string | [string, any][], guild: string, data?: any): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x => this.filter(x[1], x[0], guild)) as [
string,
any,
][];
patch(from: CacheFrom, __keys: string, guild: string, data?: any): ReturnCache<void>;
patch(from: CacheFrom, __keys: [string, any][], guild: string): ReturnCache<void>;
patch(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any): ReturnCache<void> {
const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x =>
this.filter(x[1], x[0], guild, from),
) as [string, any][];
return fakePromise(
this.addToRelationship(

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { type GuildEmojiStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIEmoji } from '../../types';
@ -8,7 +8,7 @@ export class Emojis extends GuildRelatedResource<any, APIEmoji> {
namespace = 'emoji';
//@ts-expect-error
filter(data: APIEmoji, id: string, guild_id?: string) {
filter(data: APIEmoji, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,4 +1,4 @@
import type { Cache, ReturnCache } from '..';
import type { Cache, CacheFrom, ReturnCache } from '..';
import { type GuildStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIGuild, GatewayGuildCreateDispatchData } from '../../types';
@ -8,7 +8,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
namespace = 'guild';
//@ts-expect-error
filter(data: APIGuild, id: string) {
filter(data: APIGuild, id: string, from: CacheFrom) {
return true;
}
@ -86,49 +86,49 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
await super.remove(id);
}
override async set(id: string, data: any) {
override async set(from: CacheFrom, id: string, data: any) {
const bulkData: Parameters<Cache['bulkSet']>[0] = [];
for (const member of data.members ?? []) {
if (!member.user?.id) {
continue;
}
bulkData.push(['members', member, member.user.id, id]);
bulkData.push(['users', member.user, member.user.id]);
bulkData.push([from, 'members', member, member.user.id, id]);
bulkData.push([from, 'users', member.user, member.user.id]);
}
for (const role of data.roles ?? []) {
bulkData.push(['roles', role, role.id, id]);
bulkData.push([from, 'roles', role, role.id, id]);
}
for (const channel of data.channels ?? []) {
bulkData.push(['channels', channel, channel.id, id]);
bulkData.push([from, 'channels', channel, channel.id, id]);
if (channel.permission_overwrites?.length)
bulkData.push(['overwrites', channel.permission_overwrites, channel.id, id]);
bulkData.push([from, 'overwrites', channel.permission_overwrites, channel.id, id]);
}
for (const thread of data.threads ?? []) {
bulkData.push(['channels', thread, thread.id, id]);
bulkData.push([from, 'channels', thread, thread.id, id]);
}
for (const emoji of data.emojis ?? []) {
bulkData.push(['emojis', emoji, emoji.id, id]);
bulkData.push([from, 'emojis', emoji, emoji.id, id]);
}
for (const sticker of data.stickers ?? []) {
bulkData.push(['stickers', sticker, sticker.id, id]);
bulkData.push([from, 'stickers', sticker, sticker.id, id]);
}
for (const voiceState of data.voice_states ?? []) {
bulkData.push(['voiceStates', voiceState, voiceState.user_id, id]);
bulkData.push([from, 'voiceStates', voiceState, voiceState.user_id, id]);
}
for (const presence of data.presences ?? []) {
bulkData.push(['presences', presence, presence.user.id, id]);
bulkData.push([from, 'presences', presence, presence.user.id, id]);
}
for (const instance of data.stage_instances ?? []) {
bulkData.push(['stageInstances', instance, instance.id, id]);
bulkData.push([from, 'stageInstances', instance, instance.id, id]);
}
const {
@ -146,55 +146,55 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
...guild
} = data;
bulkData.push(['guilds', guild, id]);
bulkData.push([from, 'guilds', guild, id]);
await this.cache.bulkSet(bulkData);
}
override async patch(id: string, data: any) {
override async patch(from: CacheFrom, id: string, data: any) {
const bulkData: Parameters<Cache['bulkPatch']>[0] = [];
for (const member of data.members ?? []) {
if (!member.user?.id) {
continue;
}
bulkData.push(['members', member, member.user.id, id]);
bulkData.push(['users', member.user, member.user.id]);
bulkData.push([from, 'members', member, member.user.id, id]);
bulkData.push([from, 'users', member.user, member.user.id]);
}
for (const role of data.roles ?? []) {
bulkData.push(['roles', role, role.id, id]);
bulkData.push([from, 'roles', role, role.id, id]);
}
for (const channel of data.channels ?? []) {
bulkData.push(['channels', channel, channel.id, id]);
bulkData.push([from, 'channels', channel, channel.id, id]);
if (channel.permission_overwrites?.length) {
bulkData.push(['overwrites', channel.permission_overwrites, channel.id, id]);
bulkData.push([from, 'overwrites', channel.permission_overwrites, channel.id, id]);
}
}
for (const thread of data.threads ?? []) {
bulkData.push(['channels', thread, thread.id, id]);
bulkData.push([from, 'channels', thread, thread.id, id]);
}
for (const emoji of data.emojis ?? []) {
bulkData.push(['emojis', emoji, emoji.id, id]);
bulkData.push([from, 'emojis', emoji, emoji.id, id]);
}
for (const sticker of data.stickers ?? []) {
bulkData.push(['stickers', sticker, sticker.id, id]);
bulkData.push([from, 'stickers', sticker, sticker.id, id]);
}
for (const voiceState of data.voice_states ?? []) {
bulkData.push(['voiceStates', voiceState, voiceState.user_id, id]);
bulkData.push([from, 'voiceStates', voiceState, voiceState.user_id, id]);
}
for (const presence of data.presences ?? []) {
bulkData.push(['presences', presence, presence.user.id, id]);
bulkData.push([from, 'presences', presence, presence.user.id, id]);
}
for (const instance of data.stage_instances ?? []) {
bulkData.push(['stageInstances', instance, instance.id, id]);
bulkData.push([from, 'stageInstances', instance, instance.id, id]);
}
const {
@ -212,7 +212,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
...guild
} = data;
bulkData.push(['guilds', guild, id]);
bulkData.push([from, 'guilds', guild, id]);
await this.cache.bulkPatch(bulkData);
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { type GuildMemberStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIGuildMember } from '../../types';
@ -7,7 +7,7 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
namespace = 'member';
//@ts-expect-error
filter(data: APIGuildMember, id: string, guild_id: string) {
filter(data: APIGuildMember, id: string, guild_id: string, from: CacheFrom) {
return true;
}
@ -71,16 +71,16 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
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) {
override async set(from: CacheFrom, memberId: string, guildId: string, data: any): Promise<void>;
override async set(from: CacheFrom, memberId_dataArray: [string, any][], guildId: string): Promise<void>;
override async set(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any) {
const keys: [string, any][] = Array.isArray(__keys) ? __keys : [[__keys, data]];
const bulkData: (['members', any, string, string] | ['users', any, string])[] = [];
const bulkData: ([typeof from, 'members', any, string, string] | [typeof from, 'users', any, string])[] = [];
for (const [id, value] of keys) {
if (value.user) {
bulkData.push(['members', value, id, guild]);
bulkData.push(['users', value.user, id]);
bulkData.push([from, 'members', value, id, guild]);
bulkData.push([from, 'users', value.user, id]);
}
}

View File

@ -1,4 +1,4 @@
import type { MessageData, ReturnCache } from '../..';
import type { CacheFrom, MessageData, ReturnCache } from '../..';
import { type MessageStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIMessage, APIUser } from '../../types';
@ -8,7 +8,7 @@ export class Messages extends GuildRelatedResource<any, APIMessage> {
namespace = 'message';
//@ts-expect-error
filter(data: MessageData, id: string, channel_id?: string) {
filter(data: MessageData, id: string, channel_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { fakePromise } from '../../common/it/utils';
import { PermissionsBitField } from '../../structures/extra/Permissions';
import type { APIOverwrite } from '../../types';
@ -8,7 +8,7 @@ export class Overwrites extends GuildRelatedResource<any, APIOverwrite[]> {
namespace = 'overwrite';
//@ts-expect-error
filter(data: APIOverwrite[], id: string, guild_id?: string) {
filter(data: APIOverwrite[], id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,3 +1,4 @@
import type { CacheFrom } from '../..';
import type { GatewayPresenceUpdate } from '../../types';
import { GuildRelatedResource } from './default/guild-related';
@ -5,7 +6,7 @@ export class Presences extends GuildRelatedResource<PresenceResource, GatewayPre
namespace = 'presence';
//@ts-expect-error
filter(data: GatewayPresenceUpdate, id: string, guild_id?: string) {
filter(data: GatewayPresenceUpdate, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { type GuildRoleStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIRole } from '../../types';
@ -8,7 +8,7 @@ export class Roles extends GuildRelatedResource<any, APIRole> {
namespace = 'role';
//@ts-expect-error
filter(data: APIRole, id: string, guild_id?: string) {
filter(data: APIRole, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,3 +1,4 @@
import type { CacheFrom } from '../..';
import type { APIStageInstance } from '../../types';
import { GuildRelatedResource } from './default/guild-related';
@ -5,7 +6,7 @@ export class StageInstances extends GuildRelatedResource<APIStageInstance, APISt
namespace = 'stage_instance';
//@ts-expect-error
filter(data: APIStageInstance, id: string, guild_id?: string) {
filter(data: APIStageInstance, id: string, guild_id: string, from: CacheFrom) {
return true;
}
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { type StickerStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APISticker } from '../../types';
@ -8,7 +8,7 @@ export class Stickers extends GuildRelatedResource<any, APISticker> {
namespace = 'sticker';
//@ts-expect-error
filter(data: APISticker, id: string, guild_id?: string) {
filter(data: APISticker, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { Transformers, type UserStructure } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIUser } from '../../types';
@ -8,7 +8,7 @@ export class Users extends BaseResource<any, APIUser> {
namespace = 'user';
//@ts-expect-error
filter(data: APIUser, id: string) {
filter(data: APIUser, id: string, from: CacheFrom) {
return true;
}

View File

@ -1,4 +1,4 @@
import type { ReturnCache } from '../..';
import type { CacheFrom, ReturnCache } from '../..';
import { Transformers, type VoiceStateStructure } from '../../client/transformers';
import { fakePromise } from '../../common';
import type { APIVoiceState } from '../../types';
@ -8,7 +8,7 @@ export class VoiceStates extends GuildBasedResource<any, APIVoiceState> {
namespace = 'voice_state';
//@ts-expect-error
filter(data: APIVoiceState, id: string, guild_id: string) {
filter(data: APIVoiceState, id: string, guild_id: string, from: CacheFrom) {
return true;
}

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../../cache';
import { type GuildBanStructure, Transformers } from '../../client/transformers';
import type {
APIBan,
@ -57,7 +58,7 @@ export class BanShorter extends BaseShorter {
}
ban = await this.client.proxy.guilds(guildId).bans(userId).get();
await this.client.cache.members?.set(ban.user.id, guildId, ban);
await this.client.cache.members?.set(CacheFrom.Rest, ban.user.id, guildId, ban);
return Transformers.GuildBan(this.client, ban, guildId);
}
@ -78,6 +79,7 @@ export class BanShorter extends BaseShorter {
query,
});
await this.client.cache.bans?.set(
CacheFrom.Rest,
bans.map<[string, APIBan]>(x => [x.user.id, x]),
guildId,
);

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../../cache';
import type { Channels } from '../../cache/resources/channels';
import type { Overwrites } from '../../cache/resources/overwrites';
import { type MessageStructure, type ThreadChannelStructure, Transformers } from '../../client/transformers';
@ -40,6 +41,7 @@ export class ChannelShorter extends BaseShorter {
channel = await this.client.proxy.channels(id).get();
await this.client.cache.channels?.patch(
CacheFrom.Rest,
id,
'guild_id' in channel && channel.guild_id ? channel.guild_id : '@me',
channel,
@ -74,9 +76,16 @@ export class ChannelShorter extends BaseShorter {
): Promise<AllChannels> {
const options = MergeOptions<MakeRequired<ChannelShorterOptionalParams, 'guildId'>>({ guildId: '@me' }, optional);
const res = await this.client.proxy.channels(id).patch({ body, reason: options.reason });
await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(options.guildId), res.id, options.guildId, res);
await this.client.cache.channels?.setIfNI(
CacheFrom.Rest,
BaseChannel.__intent__(options.guildId),
res.id,
options.guildId,
res,
);
if (body.permission_overwrites && 'permission_overwrites' in res && res.permission_overwrites)
await this.client.cache.overwrites?.setIfNI(
CacheFrom.Rest,
BaseChannel.__intent__(options.guildId),
res.id,
options.guildId,
@ -97,6 +106,7 @@ export class ChannelShorter extends BaseShorter {
async pins(channelId: string): Promise<MessageStructure[]> {
const messages = await this.client.proxy.channels(channelId).pins.get();
await this.client.cache.messages?.patch(
CacheFrom.Rest,
messages.map(x => {
return [x.id, x];
}) satisfies [string, any][],
@ -206,6 +216,7 @@ export class ChannelShorter extends BaseShorter {
query,
});
await this.client.cache.messages?.patch(
CacheFrom.Rest,
result.map(x => {
return [x.id, x];
}) satisfies [string, any][],

View File

@ -1,4 +1,5 @@
import { resolveImage } from '../../builders';
import { CacheFrom } from '../../cache';
import { type GuildEmojiStructure, Transformers } from '../../client/transformers';
import type { APIEmoji, RESTPatchAPIGuildEmojiJSONBody, RESTPostAPIGuildEmojiJSONBody } from '../../types';
import type { ImageResolvable } from '../types/resolvables';
@ -22,6 +23,7 @@ export class EmojiShorter extends BaseShorter {
}
emojis = await this.client.proxy.guilds(guildId).emojis.get();
await this.client.cache.emojis?.set(
CacheFrom.Rest,
emojis.map<[string, APIEmoji]>(x => [x.id!, x]),
guildId,
);
@ -43,7 +45,7 @@ export class EmojiShorter extends BaseShorter {
body: bodyResolved,
});
await this.client.cache.emojis?.setIfNI('GuildExpressions', emoji.id!, guildId, emoji);
await this.client.cache.emojis?.setIfNI(CacheFrom.Rest, 'GuildExpressions', emoji.id!, guildId, emoji);
return Transformers.GuildEmoji(this.client, emoji, guildId);
}
@ -91,7 +93,7 @@ export class EmojiShorter extends BaseShorter {
reason?: string,
): Promise<GuildEmojiStructure> {
const emoji = await this.client.proxy.guilds(guildId).emojis(emojiId).patch({ body, reason });
await this.client.cache.emojis?.setIfNI('GuildExpressions', emoji.id!, guildId, emoji);
await this.client.cache.emojis?.setIfNI(CacheFrom.Rest, 'GuildExpressions', emoji.id!, guildId, emoji);
return Transformers.GuildEmoji(this.client, emoji, guildId);
}
}

View File

@ -1,4 +1,5 @@
import { resolveFiles } from '../../builders';
import { CacheFrom } from '../../cache';
import type { Channels } from '../../cache/resources/channels';
import {
type AnonymousGuildStructure,
@ -33,7 +34,7 @@ export class GuildShorter extends BaseShorter {
*/
async create(body: RESTPostAPIGuildsJSONBody): Promise<GuildStructure<'api'>> {
const guild = await this.client.proxy.guilds.post({ body });
await this.client.cache.guilds?.setIfNI('Guilds', guild.id, guild);
await this.client.cache.guilds?.setIfNI(CacheFrom.Rest, 'Guilds', guild.id, guild);
return Transformers.Guild<'api'>(this.client, guild);
}
@ -54,7 +55,7 @@ export class GuildShorter extends BaseShorter {
}
const data = await this.client.proxy.guilds(id).get();
await this.client.cache.guilds?.patch(id, data);
await this.client.cache.guilds?.patch(CacheFrom.Rest, id, data);
return (await this.client.cache.guilds?.raw(id)) ?? data;
}
@ -71,7 +72,7 @@ export class GuildShorter extends BaseShorter {
async edit(guildId: string, body: RESTPatchAPIGuildJSONBody, reason?: string) {
const guild = await this.client.proxy.guilds(guildId).patch({ body, reason });
if (!this.client.cache.hasGuildsIntent) await this.client.cache.guilds?.patch(guildId, guild);
if (!this.client.cache.hasGuildsIntent) await this.client.cache.guilds?.patch(CacheFrom.Rest, guildId, guild);
return new Guild(this.client, guild);
}
@ -88,7 +89,7 @@ export class GuildShorter extends BaseShorter {
if (self?.user) return Transformers.GuildMember(this.client, self, self.user, id);
}
const self = await this.client.proxy.guilds(id).members(this.client.botId).get();
await this.client.cache.members?.patch(self.user.id, id, self);
await this.client.cache.members?.patch(CacheFrom.Rest, self.user.id, id, self);
return Transformers.GuildMember(this.client, self, self.user, id);
}
@ -121,6 +122,7 @@ export class GuildShorter extends BaseShorter {
}
channels = await this.client.proxy.guilds(guildId).channels.get();
await this.client.cache.channels?.set(
CacheFrom.Rest,
channels.map<[string, APIChannel]>(x => [x.id, x]),
guildId,
);
@ -142,7 +144,7 @@ export class GuildShorter extends BaseShorter {
}
channel = await this.client.proxy.channels(channelId).get();
await this.client.cache.channels?.patch(channelId, guildId, channel);
await this.client.cache.channels?.patch(CacheFrom.Rest, channelId, guildId, channel);
return channelFrom(channel, this.client);
},
@ -154,7 +156,13 @@ export class GuildShorter extends BaseShorter {
*/
create: async (guildId: string, body: RESTPostAPIGuildChannelJSONBody) => {
const res = await this.client.proxy.guilds(guildId).channels.post({ body });
await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(guildId), res.id, guildId, res);
await this.client.cache.channels?.setIfNI(
CacheFrom.Rest,
BaseChannel.__intent__(guildId),
res.id,
guildId,
res,
);
return channelFrom(res, this.client);
},
@ -181,7 +189,13 @@ export class GuildShorter extends BaseShorter {
*/
edit: async (guildchannelId: string, channelId: string, body: RESTPatchAPIChannelJSONBody, reason?: string) => {
const res = await this.client.proxy.channels(channelId).patch({ body, reason });
await this.client.cache.channels?.setIfNI(BaseChannel.__intent__(guildchannelId), res.id, guildchannelId, res);
await this.client.cache.channels?.setIfNI(
CacheFrom.Rest,
BaseChannel.__intent__(guildchannelId),
res.id,
guildchannelId,
res,
);
return channelFrom(res, this.client);
},
@ -293,6 +307,7 @@ export class GuildShorter extends BaseShorter {
list: async (guildId: string): Promise<StickerStructure[]> => {
const stickers = await this.client.proxy.guilds(guildId).stickers.get();
await this.client.cache.stickers?.set(
CacheFrom.Rest,
stickers.map(st => [st.id, st] as any),
guildId,
);
@ -315,7 +330,7 @@ export class GuildShorter extends BaseShorter {
const sticker = await this.client.proxy
.guilds(guildId)
.stickers.post({ reason, body: json, files: [{ ...fileResolve[0], key: 'file' }], appendToFormData: true });
await this.client.cache.stickers?.setIfNI('GuildExpressions', sticker.id, guildId, sticker);
await this.client.cache.stickers?.setIfNI(CacheFrom.Rest, 'GuildExpressions', sticker.id, guildId, sticker);
return Transformers.Sticker(this.client, sticker);
},
@ -334,7 +349,7 @@ export class GuildShorter extends BaseShorter {
reason?: string,
): Promise<StickerStructure> => {
const sticker = await this.client.proxy.guilds(guildId).stickers(stickerId).patch({ body, reason });
await this.client.cache.stickers?.setIfNI('GuildExpressions', stickerId, guildId, sticker);
await this.client.cache.stickers?.setIfNI(CacheFrom.Rest, 'GuildExpressions', stickerId, guildId, sticker);
return Transformers.Sticker(this.client, sticker);
},
@ -352,7 +367,7 @@ export class GuildShorter extends BaseShorter {
if (sticker) return sticker;
}
sticker = await this.client.proxy.guilds(guildId).stickers(stickerId).get();
await this.client.cache.stickers?.patch(stickerId, guildId, sticker);
await this.client.cache.stickers?.patch(CacheFrom.Rest, stickerId, guildId, sticker);
return Transformers.Sticker(this.client, sticker);
},

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../../cache';
import {
type GuildMemberStructure,
type GuildRoleStructure,
@ -58,6 +59,7 @@ export class MemberShorter extends BaseShorter {
query,
});
await this.client.cache.members?.set(
CacheFrom.Rest,
members.map(x => [x.user.id, x] as [string, APIGuildMember]),
guildId,
);
@ -112,7 +114,7 @@ export class MemberShorter extends BaseShorter {
reason?: string,
): Promise<GuildMemberStructure> {
const member = await this.client.proxy.guilds(guildId).members(memberId).patch({ body, reason });
await this.client.cache.members?.setIfNI('GuildMembers', memberId, guildId, member);
await this.client.cache.members?.setIfNI(CacheFrom.Rest, 'GuildMembers', memberId, guildId, member);
return Transformers.GuildMember(this.client, member, member.user, guildId);
}
@ -137,7 +139,7 @@ export class MemberShorter extends BaseShorter {
return;
}
await this.client.cache.members?.setIfNI('GuildMembers', member.user.id, guildId, member);
await this.client.cache.members?.setIfNI(CacheFrom.Rest, 'GuildMembers', member.user.id, guildId, member);
return Transformers.GuildMember(this.client, member, member.user, guildId);
}
@ -162,7 +164,7 @@ export class MemberShorter extends BaseShorter {
}
member = await this.client.proxy.guilds(guildId).members(memberId).get();
await this.client.cache.members?.set(member.user.id, guildId, member);
await this.client.cache.members?.set(CacheFrom.Rest, member.user.id, guildId, member);
return member;
}
@ -182,7 +184,11 @@ export class MemberShorter extends BaseShorter {
members = await this.client.proxy.guilds(guildId).members.get({
query,
});
await this.client.cache.members?.set(members.map(x => [x.user.id, x]) as [string, APIGuildMember][], guildId);
await this.client.cache.members?.set(
CacheFrom.Rest,
members.map(x => [x.user.id, x]) as [string, APIGuildMember][],
guildId,
);
return members.map(m => Transformers.GuildMember(this.client, m, m.user, guildId));
}
@ -244,7 +250,7 @@ export class MemberShorter extends BaseShorter {
}
const state = await this.client.proxy.guilds(guildId)['voice-states'](memberId).get();
await this.client.cache.voiceStates?.set(memberId, guildId, state);
await this.client.cache.voiceStates?.set(CacheFrom.Rest, memberId, guildId, state);
return Transformers.VoiceState(this.client, state);
}

View File

@ -8,6 +8,7 @@ import type {
} from '../../types';
import type { ValidAnswerId } from '../../api/Routes/channels';
import { CacheFrom } from '../../cache';
import { type MessageStructure, type ThreadChannelStructure, Transformers, type UserStructure } from '../../client';
import type { MessageCreateBodyRequest, MessageUpdateBodyRequest } from '../types/write';
import { BaseShorter } from './base';
@ -28,7 +29,13 @@ export class MessageShorter extends BaseShorter {
files: parsedFiles,
})
.then(async message => {
await this.client.cache.messages?.setIfNI('GuildMessages', message.id, message.channel_id, message);
await this.client.cache.messages?.setIfNI(
CacheFrom.Rest,
'GuildMessages',
message.id,
message.channel_id,
message,
);
return Transformers.Message(this.client, message);
});
}
@ -47,7 +54,13 @@ export class MessageShorter extends BaseShorter {
files: parsedFiles,
})
.then(async message => {
await this.client.cache.messages?.setIfNI('GuildMessages', message.id, message.channel_id, message);
await this.client.cache.messages?.setIfNI(
CacheFrom.Rest,
'GuildMessages',
message.id,
message.channel_id,
message,
);
return Transformers.Message(this.client, message);
});
}
@ -58,7 +71,7 @@ export class MessageShorter extends BaseShorter {
.messages(messageId)
.crosspost.post({ reason })
.then(async m => {
await this.client.cache.messages?.setIfNI('GuildMessages', m.id, m.channel_id, m);
await this.client.cache.messages?.setIfNI(CacheFrom.Rest, 'GuildMessages', m.id, m.channel_id, m);
return Transformers.Message(this.client, m);
});
}
@ -85,7 +98,7 @@ export class MessageShorter extends BaseShorter {
.messages(messageId)
.get()
.then(async x => {
await this.client.cache.messages?.set(x.id, x.channel_id, x);
await this.client.cache.messages?.set(CacheFrom.Rest, x.id, x.channel_id, x);
return Transformers.Message(this.client, x);
});
}

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../../cache';
import { type GuildRoleStructure, Transformers } from '../../client/transformers';
import type {
APIRole,
@ -17,7 +18,7 @@ export class RoleShorter extends BaseShorter {
*/
async create(guildId: string, body: RESTPostAPIGuildRoleJSONBody, reason?: string): Promise<GuildRoleStructure> {
const res = await this.client.proxy.guilds(guildId).roles.post({ body, reason });
await this.client.cache.roles?.setIfNI('Guilds', res.id, guildId, res);
await this.client.cache.roles?.setIfNI(CacheFrom.Rest, 'Guilds', res.id, guildId, res);
return Transformers.GuildRole(this.client, res, guildId);
}
@ -33,7 +34,7 @@ export class RoleShorter extends BaseShorter {
if (role) return role;
}
role = await this.client.proxy.guilds(guildId).roles(roleId).get();
await this.client.cache.roles?.set(roleId, guildId, role);
await this.client.cache.roles?.set(CacheFrom.Rest, roleId, guildId, role);
return role;
}
@ -58,6 +59,7 @@ export class RoleShorter extends BaseShorter {
}
roles = await this.client.proxy.guilds(guildId).roles.get();
await this.client.cache.roles?.set(
CacheFrom.Rest,
roles.map<[string, APIRole]>(r => [r.id, r]),
guildId,
);
@ -79,7 +81,7 @@ export class RoleShorter extends BaseShorter {
reason?: string,
): Promise<GuildRoleStructure> {
const res = await this.client.proxy.guilds(guildId).roles(roleId).patch({ body, reason });
await this.client.cache.roles?.setIfNI('Guilds', roleId, guildId, res);
await this.client.cache.roles?.setIfNI(CacheFrom.Rest, 'Guilds', roleId, guildId, res);
return Transformers.GuildRole(this.client, res, guildId);
}
@ -108,6 +110,7 @@ export class RoleShorter extends BaseShorter {
});
if (!this.client.cache.hasRolesIntent) {
await this.client.cache.roles?.set(
CacheFrom.Rest,
roles.map(x => [x.id, x] as [string, any]),
guildId,
);

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../..';
import type { ThreadChannelStructure } from '../../client/transformers';
import { channelFrom } from '../../structures';
import type {
@ -32,6 +33,7 @@ export class ThreadShorter extends BaseShorter {
// When testing this, discord returns the thread object, but in discord api types it does not.
.then(async thread => {
await this.client.cache.channels?.setIfNI(
CacheFrom.Rest,
'Guilds',
thread.id,
(thread as APIThreadChannel).guild_id!,
@ -54,7 +56,13 @@ export class ThreadShorter extends BaseShorter {
.messages(messageId)
.threads.post({ body, reason })
.then(async thread => {
await this.client.cache.channels?.setIfNI('Guilds', thread.id, (thread as APIThreadChannel).guild_id!, thread);
await this.client.cache.channels?.setIfNI(
CacheFrom.Rest,
'Guilds',
thread.id,
(thread as APIThreadChannel).guild_id!,
thread,
);
return channelFrom(thread, this.client) as ThreadChannelStructure;
});
}

View File

@ -1,3 +1,4 @@
import { CacheFrom } from '../..';
import {
type DMChannelStructure,
type MessageStructure,
@ -17,7 +18,7 @@ export class UsersShorter extends BaseShorter {
const data = await this.client.proxy.users('@me').channels.post({
body: { recipient_id: userId },
});
await this.client.cache.channels?.set(userId, '@me', data);
await this.client.cache.channels?.set(CacheFrom.Rest, userId, '@me', data);
return Transformers.DMChannel(this.client, data);
}
@ -38,7 +39,7 @@ export class UsersShorter extends BaseShorter {
}
const data = await this.client.proxy.users(userId).get();
await this.client.cache.users?.patch(userId, data);
await this.client.cache.users?.patch(CacheFrom.Rest, userId, data);
return data;
}