diff --git a/src/cache/index.ts b/src/cache/index.ts index 00b4122..8e33b8b 100644 --- a/src/cache/index.ts +++ b/src/cache/index.ts @@ -511,11 +511,8 @@ export class Cache { event.d.guild_id!, event.d.permission_overwrites, ); - break; - } - if (event.d.type === ChannelType.DM) { + } else if (event.d.type === ChannelType.DM) { await this.channels?.set(CacheFrom.Gateway, event.d.recipients![0]?.id, '@me', event.d); - break; } } break; @@ -593,7 +590,11 @@ export class Cache { case 'THREAD_CREATE': case 'THREAD_UPDATE': - if (event.d.guild_id) await this.channels?.set(CacheFrom.Gateway, 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); + if (event.d.permission_overwrites?.length) + await this.overwrites?.set(CacheFrom.Gateway, event.d.id, event.d.guild_id!, event.d.permission_overwrites); + } break; case 'THREAD_DELETE': diff --git a/src/cache/resources/default/guild-related.ts b/src/cache/resources/default/guild-related.ts index 455601b..ffb37ac 100644 --- a/src/cache/resources/default/guild-related.ts +++ b/src/cache/resources/default/guild-related.ts @@ -19,7 +19,8 @@ export class GuildRelatedResource { parse(data: any, id: string, guild_id: string) { if (!data.id) data.id = id; data.guild_id = guild_id; - return data; + const { permission_overwrites, ...rest } = data; + return rest; } get adapter() { diff --git a/src/common/shorters/channels.ts b/src/common/shorters/channels.ts index 24f6c26..f88ba78 100644 --- a/src/common/shorters/channels.ts +++ b/src/common/shorters/channels.ts @@ -44,6 +44,9 @@ export class ChannelShorter extends BaseShorter { 'guild_id' in channel && channel.guild_id ? channel.guild_id : '@me', channel, ); + if ('permission_overwrites' in channel && channel.permission_overwrites && channel.guild_id) { + await this.client.cache.overwrites?.set(CacheFrom.Rest, id, channel.guild_id, channel.permission_overwrites); + } return channel as APIChannel; } diff --git a/src/common/shorters/guilds.ts b/src/common/shorters/guilds.ts index ef43bf4..5c31c62 100644 --- a/src/common/shorters/guilds.ts +++ b/src/common/shorters/guilds.ts @@ -32,6 +32,8 @@ import type { RESTPostAPIGuildChannelJSONBody, RESTPostAPIGuildsJSONBody, } from '../../types'; +import type { APITextChannel } from '../../types/payloads/channel'; +import type { MakeRequired } from '../types/util'; import { BaseShorter } from './base'; export class GuildShorter extends BaseShorter { @@ -145,6 +147,21 @@ export class GuildShorter extends BaseShorter { channels.map<[string, APIChannel]>(x => [x.id, x]), guildId, ); + + const filtered = channels.filter( + (ch): ch is MakeRequired => { + return 'permission_overwrites' in ch && ch.permission_overwrites !== undefined && ch.guild_id !== undefined; + }, + ); + if (filtered.length) { + await this.client.cache.overwrites?.set( + CacheFrom.Rest, + filtered.map(x => { + return [x.id, x.permission_overwrites] as const; + }), + guildId, + ); + } return channels.map(m => channelFrom(m, this.client)); }, @@ -164,6 +181,9 @@ export class GuildShorter extends BaseShorter { channel = await this.client.proxy.channels(channelId).get(); await this.client.cache.channels?.patch(CacheFrom.Rest, channelId, guildId, channel); + if ('permission_overwrites' in channel && channel.permission_overwrites) { + await this.client.cache.overwrites?.set(CacheFrom.Rest, channelId, guildId, channel.permission_overwrites); + } return channelFrom(channel, this.client); },