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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import type { UsingClient } from '../../../commands'; import type { UsingClient } from '../../../commands';
import { fakePromise } from '../../../common'; import { fakePromise } from '../../../common';
import type { GatewayIntentBits } from '../../../types'; 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> { export class GuildRelatedResource<T = any, S = any> {
namespace = 'base'; namespace = 'base';
@ -12,7 +12,7 @@ export class GuildRelatedResource<T = any, S = any> {
) {} ) {}
//@ts-expect-error //@ts-expect-error
filter(data: any, id: string, guild_id?: string) { filter(data: any, id: string, guild_id: string, from: CacheFrom) {
return true; 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)) { 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)); 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(from: CacheFrom, __keys: string, guild: string, data: S): ReturnCache<void>;
set(__keys: [string, S][], guild: string): ReturnCache<void>; set(from: CacheFrom, __keys: [string, S][], guild: string): ReturnCache<void>;
set(__keys: string | [string, S][], guild: string, data?: S): 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 => 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][]; ) as [string, any][];
return fakePromise( return fakePromise(
@ -68,13 +68,12 @@ export class GuildRelatedResource<T = any, S = any> {
); );
} }
patch(__keys: string, guild: string, data?: any): ReturnCache<void>; patch(from: CacheFrom, __keys: string, guild: string, data?: any): ReturnCache<void>;
patch(__keys: [string, any][], guild: string): ReturnCache<void>; patch(from: CacheFrom, __keys: [string, any][], guild: string): ReturnCache<void>;
patch(__keys: string | [string, any][], guild: string, data?: any): 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)) as [ const keys = (Array.isArray(__keys) ? __keys : [[__keys, data]]).filter(x =>
string, this.filter(x[1], x[0], guild, from),
any, ) as [string, any][];
][];
return fakePromise( return fakePromise(
this.addToRelationship( 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 { type GuildEmojiStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIEmoji } from '../../types'; import type { APIEmoji } from '../../types';
@ -8,7 +8,7 @@ export class Emojis extends GuildRelatedResource<any, APIEmoji> {
namespace = 'emoji'; namespace = 'emoji';
//@ts-expect-error //@ts-expect-error
filter(data: APIEmoji, id: string, guild_id?: string) { filter(data: APIEmoji, id: string, guild_id: string, from: CacheFrom) {
return true; 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 { type GuildStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIGuild, GatewayGuildCreateDispatchData } from '../../types'; import type { APIGuild, GatewayGuildCreateDispatchData } from '../../types';
@ -8,7 +8,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
namespace = 'guild'; namespace = 'guild';
//@ts-expect-error //@ts-expect-error
filter(data: APIGuild, id: string) { filter(data: APIGuild, id: string, from: CacheFrom) {
return true; return true;
} }
@ -86,49 +86,49 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
await super.remove(id); 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] = []; const bulkData: Parameters<Cache['bulkSet']>[0] = [];
for (const member of data.members ?? []) { for (const member of data.members ?? []) {
if (!member.user?.id) { if (!member.user?.id) {
continue; continue;
} }
bulkData.push(['members', member, member.user.id, id]); bulkData.push([from, 'members', member, member.user.id, id]);
bulkData.push(['users', member.user, member.user.id]); bulkData.push([from, 'users', member.user, member.user.id]);
} }
for (const role of data.roles ?? []) { 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 ?? []) { 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) 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { for (const instance of data.stage_instances ?? []) {
bulkData.push(['stageInstances', instance, instance.id, id]); bulkData.push([from, 'stageInstances', instance, instance.id, id]);
} }
const { const {
@ -146,55 +146,55 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
...guild ...guild
} = data; } = data;
bulkData.push(['guilds', guild, id]); bulkData.push([from, 'guilds', guild, id]);
await this.cache.bulkSet(bulkData); 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] = []; const bulkData: Parameters<Cache['bulkPatch']>[0] = [];
for (const member of data.members ?? []) { for (const member of data.members ?? []) {
if (!member.user?.id) { if (!member.user?.id) {
continue; continue;
} }
bulkData.push(['members', member, member.user.id, id]); bulkData.push([from, 'members', member, member.user.id, id]);
bulkData.push(['users', member.user, member.user.id]); bulkData.push([from, 'users', member.user, member.user.id]);
} }
for (const role of data.roles ?? []) { 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 ?? []) { 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) { 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { 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 ?? []) { for (const instance of data.stage_instances ?? []) {
bulkData.push(['stageInstances', instance, instance.id, id]); bulkData.push([from, 'stageInstances', instance, instance.id, id]);
} }
const { const {
@ -212,7 +212,7 @@ export class Guilds extends BaseResource<any, APIGuild | GatewayGuildCreateDispa
...guild ...guild
} = data; } = data;
bulkData.push(['guilds', guild, id]); bulkData.push([from, 'guilds', guild, id]);
await this.cache.bulkPatch(bulkData); 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 { type GuildMemberStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIGuildMember } from '../../types'; import type { APIGuildMember } from '../../types';
@ -7,7 +7,7 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
namespace = 'member'; namespace = 'member';
//@ts-expect-error //@ts-expect-error
filter(data: APIGuildMember, id: string, guild_id: string) { filter(data: APIGuildMember, id: string, guild_id: string, from: CacheFrom) {
return true; return true;
} }
@ -71,16 +71,16 @@ export class Members extends GuildBasedResource<any, APIGuildMember> {
return super.values(guild); return super.values(guild);
} }
override async set(memberId: string, guildId: string, data: any): Promise<void>; override async set(from: CacheFrom, memberId: string, guildId: string, data: any): Promise<void>;
override async set(memberId_dataArray: [string, any][], guildId: string): Promise<void>; override async set(from: CacheFrom, memberId_dataArray: [string, any][], guildId: string): Promise<void>;
override async set(__keys: string | [string, any][], guild: string, data?: any) { override async set(from: CacheFrom, __keys: string | [string, any][], guild: string, data?: any) {
const keys: [string, any][] = Array.isArray(__keys) ? __keys : [[__keys, data]]; 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) { for (const [id, value] of keys) {
if (value.user) { if (value.user) {
bulkData.push(['members', value, id, guild]); bulkData.push([from, 'members', value, id, guild]);
bulkData.push(['users', value.user, id]); 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 { type MessageStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIMessage, APIUser } from '../../types'; import type { APIMessage, APIUser } from '../../types';
@ -8,7 +8,7 @@ export class Messages extends GuildRelatedResource<any, APIMessage> {
namespace = 'message'; namespace = 'message';
//@ts-expect-error //@ts-expect-error
filter(data: MessageData, id: string, channel_id?: string) { filter(data: MessageData, id: string, channel_id: string, from: CacheFrom) {
return true; return true;
} }

View File

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

View File

@ -1,3 +1,4 @@
import type { CacheFrom } from '../..';
import type { GatewayPresenceUpdate } from '../../types'; import type { GatewayPresenceUpdate } from '../../types';
import { GuildRelatedResource } from './default/guild-related'; import { GuildRelatedResource } from './default/guild-related';
@ -5,7 +6,7 @@ export class Presences extends GuildRelatedResource<PresenceResource, GatewayPre
namespace = 'presence'; namespace = 'presence';
//@ts-expect-error //@ts-expect-error
filter(data: GatewayPresenceUpdate, id: string, guild_id?: string) { filter(data: GatewayPresenceUpdate, id: string, guild_id: string, from: CacheFrom) {
return true; 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 { type GuildRoleStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIRole } from '../../types'; import type { APIRole } from '../../types';
@ -8,7 +8,7 @@ export class Roles extends GuildRelatedResource<any, APIRole> {
namespace = 'role'; namespace = 'role';
//@ts-expect-error //@ts-expect-error
filter(data: APIRole, id: string, guild_id?: string) { filter(data: APIRole, id: string, guild_id: string, from: CacheFrom) {
return true; return true;
} }

View File

@ -1,3 +1,4 @@
import type { CacheFrom } from '../..';
import type { APIStageInstance } from '../../types'; import type { APIStageInstance } from '../../types';
import { GuildRelatedResource } from './default/guild-related'; import { GuildRelatedResource } from './default/guild-related';
@ -5,7 +6,7 @@ export class StageInstances extends GuildRelatedResource<APIStageInstance, APISt
namespace = 'stage_instance'; namespace = 'stage_instance';
//@ts-expect-error //@ts-expect-error
filter(data: APIStageInstance, id: string, guild_id?: string) { filter(data: APIStageInstance, id: string, guild_id: string, from: CacheFrom) {
return true; 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 { type StickerStructure, Transformers } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APISticker } from '../../types'; import type { APISticker } from '../../types';
@ -8,7 +8,7 @@ export class Stickers extends GuildRelatedResource<any, APISticker> {
namespace = 'sticker'; namespace = 'sticker';
//@ts-expect-error //@ts-expect-error
filter(data: APISticker, id: string, guild_id?: string) { filter(data: APISticker, id: string, guild_id: string, from: CacheFrom) {
return true; 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 { Transformers, type UserStructure } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIUser } from '../../types'; import type { APIUser } from '../../types';
@ -8,7 +8,7 @@ export class Users extends BaseResource<any, APIUser> {
namespace = 'user'; namespace = 'user';
//@ts-expect-error //@ts-expect-error
filter(data: APIUser, id: string) { filter(data: APIUser, id: string, from: CacheFrom) {
return true; 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 { Transformers, type VoiceStateStructure } from '../../client/transformers';
import { fakePromise } from '../../common'; import { fakePromise } from '../../common';
import type { APIVoiceState } from '../../types'; import type { APIVoiceState } from '../../types';
@ -8,7 +8,7 @@ export class VoiceStates extends GuildBasedResource<any, APIVoiceState> {
namespace = 'voice_state'; namespace = 'voice_state';
//@ts-expect-error //@ts-expect-error
filter(data: APIVoiceState, id: string, guild_id: string) { filter(data: APIVoiceState, id: string, guild_id: string, from: CacheFrom) {
return true; return true;
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,6 +8,7 @@ import type {
} from '../../types'; } from '../../types';
import type { ValidAnswerId } from '../../api/Routes/channels'; import type { ValidAnswerId } from '../../api/Routes/channels';
import { CacheFrom } from '../../cache';
import { type MessageStructure, type ThreadChannelStructure, Transformers, type UserStructure } from '../../client'; import { type MessageStructure, type ThreadChannelStructure, Transformers, type UserStructure } from '../../client';
import type { MessageCreateBodyRequest, MessageUpdateBodyRequest } from '../types/write'; import type { MessageCreateBodyRequest, MessageUpdateBodyRequest } from '../types/write';
import { BaseShorter } from './base'; import { BaseShorter } from './base';
@ -28,7 +29,13 @@ export class MessageShorter extends BaseShorter {
files: parsedFiles, files: parsedFiles,
}) })
.then(async message => { .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); return Transformers.Message(this.client, message);
}); });
} }
@ -47,7 +54,13 @@ export class MessageShorter extends BaseShorter {
files: parsedFiles, files: parsedFiles,
}) })
.then(async message => { .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); return Transformers.Message(this.client, message);
}); });
} }
@ -58,7 +71,7 @@ export class MessageShorter extends BaseShorter {
.messages(messageId) .messages(messageId)
.crosspost.post({ reason }) .crosspost.post({ reason })
.then(async m => { .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); return Transformers.Message(this.client, m);
}); });
} }
@ -85,7 +98,7 @@ export class MessageShorter extends BaseShorter {
.messages(messageId) .messages(messageId)
.get() .get()
.then(async x => { .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); 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 GuildRoleStructure, Transformers } from '../../client/transformers';
import type { import type {
APIRole, APIRole,
@ -17,7 +18,7 @@ export class RoleShorter extends BaseShorter {
*/ */
async create(guildId: string, body: RESTPostAPIGuildRoleJSONBody, reason?: string): Promise<GuildRoleStructure> { async create(guildId: string, body: RESTPostAPIGuildRoleJSONBody, reason?: string): Promise<GuildRoleStructure> {
const res = await this.client.proxy.guilds(guildId).roles.post({ body, reason }); 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); return Transformers.GuildRole(this.client, res, guildId);
} }
@ -33,7 +34,7 @@ export class RoleShorter extends BaseShorter {
if (role) return role; if (role) return role;
} }
role = await this.client.proxy.guilds(guildId).roles(roleId).get(); 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; return role;
} }
@ -58,6 +59,7 @@ export class RoleShorter extends BaseShorter {
} }
roles = await this.client.proxy.guilds(guildId).roles.get(); roles = await this.client.proxy.guilds(guildId).roles.get();
await this.client.cache.roles?.set( await this.client.cache.roles?.set(
CacheFrom.Rest,
roles.map<[string, APIRole]>(r => [r.id, r]), roles.map<[string, APIRole]>(r => [r.id, r]),
guildId, guildId,
); );
@ -79,7 +81,7 @@ export class RoleShorter extends BaseShorter {
reason?: string, reason?: string,
): Promise<GuildRoleStructure> { ): Promise<GuildRoleStructure> {
const res = await this.client.proxy.guilds(guildId).roles(roleId).patch({ body, reason }); 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); return Transformers.GuildRole(this.client, res, guildId);
} }
@ -108,6 +110,7 @@ export class RoleShorter extends BaseShorter {
}); });
if (!this.client.cache.hasRolesIntent) { if (!this.client.cache.hasRolesIntent) {
await this.client.cache.roles?.set( await this.client.cache.roles?.set(
CacheFrom.Rest,
roles.map(x => [x.id, x] as [string, any]), roles.map(x => [x.id, x] as [string, any]),
guildId, guildId,
); );

View File

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

View File

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