From dbad537eaecfc956101861abe1f7dbf1fbddae9c Mon Sep 17 00:00:00 2001 From: MARCROCK22 <57925328+MARCROCK22@users.noreply.github.com> Date: Tue, 19 Mar 2024 19:57:57 -0400 Subject: [PATCH] fix redis cache, prefixed commands --- src/cache/adapters/redis.ts | 7 +++++-- src/cache/index.ts | 4 ++-- src/cache/resources/default/guild-based.ts | 12 ++++++------ src/cache/resources/default/guild-related.ts | 1 - src/cache/resources/guilds.ts | 3 ++- src/cache/resources/overwrites.ts | 14 ++++++++++---- src/client/onmessagecreate.ts | 2 +- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/cache/adapters/redis.ts b/src/cache/adapters/redis.ts index c9a54b1..dbea944 100644 --- a/src/cache/adapters/redis.ts +++ b/src/cache/adapters/redis.ts @@ -197,7 +197,9 @@ const isObject = (o: unknown) => { return !!o && typeof o === 'object' && !Array.isArray(o); }; -function toNormal(target: Record) { +function toNormal(target: Record): undefined | Record | Record[] { + if (typeof target.ARRAY_OF === 'string') return JSON.parse(target.ARRAY_OF as string).map(toNormal); + if (!Object.keys(target).length) return undefined; const result: Record = {}; for (const [key, value] of Object.entries(target)) { if (key.startsWith('O_')) { @@ -213,7 +215,8 @@ function toNormal(target: Record) { return result; } -function toDb(target: Record) { +function toDb(target: Record): Record | Record[] { + if (Array.isArray(target)) return { ARRAY_OF: JSON.stringify(target.map(toDb)) }; const result: Record = {}; for (const [key, value] of Object.entries(target)) { switch (typeof value) { diff --git a/src/cache/index.ts b/src/cache/index.ts index 2a165e8..c1676d9 100644 --- a/src/cache/index.ts +++ b/src/cache/index.ts @@ -335,7 +335,7 @@ export class Cache { } relationshipsData[hashId].push(id); data.guild_id = guildId; - allData.push([this[type]!.hashGuildId(id, guildId), this[type]!.parse(data, id, guildId!)]); + allData.push([this[type]!.hashGuildId(guildId, id), this[type]!.parse(data, id, guildId!)]); } break; case 'users': @@ -422,7 +422,7 @@ export class Cache { } relationshipsData[hashId].push(id); data.guild_id = guildId; - allData.push([this[type]!.hashGuildId(id, guildId), this[type]!.parse(data, id, guildId!)]); + allData.push([this[type]!.hashGuildId(guildId, id), this[type]!.parse(data, id, guildId!)]); } break; case 'users': diff --git a/src/cache/resources/default/guild-based.ts b/src/cache/resources/default/guild-based.ts index 37ebfd7..d5608db 100644 --- a/src/cache/resources/default/guild-based.ts +++ b/src/cache/resources/default/guild-based.ts @@ -44,11 +44,11 @@ export class GuildBasedResource { } get(id: string, guild: string): ReturnCache<(T & { guild_id: string }) | undefined> { - return this.adapter.get(this.hashGuildId(id, guild)); + return this.adapter.get(this.hashGuildId(guild, id)); } bulk(ids: string[], guild: string): ReturnCache<(T & { guild_id: string })[]> { - return fakePromise(this.adapter.get(ids.map(id => this.hashGuildId(id, guild)))).then(x => x.filter(y => y)); + return fakePromise(this.adapter.get(ids.map(id => this.hashGuildId(guild, id)))).then(x => x.filter(y => y)); } set(__keys: string, guild: string, data: any): ReturnCache; @@ -64,7 +64,7 @@ export class GuildBasedResource { ).then(() => this.adapter.set( keys.map(([key, value]) => { - return [this.hashGuildId(key, guild), this.parse(value, key, guild)]; + return [this.hashGuildId(guild, key), this.parse(value, key, guild)]; }), ), ) as void; @@ -74,7 +74,7 @@ export class GuildBasedResource { patch(__keys: [string, any][], guild: string): ReturnCache; patch(__keys: string | [string, any][], guild: string, data?: any): ReturnCache { const keys: [string, any][] = Array.isArray(__keys) ? __keys : [[__keys, data]]; - return fakePromise(this.adapter.get(keys.map(([key]) => this.hashGuildId(key, guild)))).then(oldDatas => + return fakePromise(this.adapter.get(keys.map(([key]) => this.hashGuildId(guild, key)))).then(oldDatas => fakePromise( this.addToRelationship( keys.map(x => x[0]), @@ -84,7 +84,7 @@ export class GuildBasedResource { this.adapter.set( keys.map(([key, value]) => { const oldData = oldDatas.find(x => x.id === key) ?? {}; - return [this.hashGuildId(key, guild), this.parse({ ...oldData, ...value }, key, guild)]; + return [this.hashGuildId(guild, key), this.parse({ ...oldData, ...value }, key, guild)]; }), ), ), @@ -94,7 +94,7 @@ export class GuildBasedResource { remove(id: string | string[], guild: string) { const ids = Array.isArray(id) ? id : [id]; return fakePromise(this.removeToRelationship(ids, guild)).then(() => - this.adapter.remove(ids.map(x => this.hashGuildId(x, guild))), + this.adapter.remove(ids.map(x => this.hashGuildId(guild, x))), ); } diff --git a/src/cache/resources/default/guild-related.ts b/src/cache/resources/default/guild-related.ts index 9b6c1af..25283a6 100644 --- a/src/cache/resources/default/guild-related.ts +++ b/src/cache/resources/default/guild-related.ts @@ -54,7 +54,6 @@ export class GuildRelatedResource { set(__keys: [string, any][], guild: string): ReturnCache; set(__keys: string | [string, any][], guild: string, data?: any): ReturnCache { const keys: [string, any][] = Array.isArray(__keys) ? __keys : [[__keys, data]]; - return fakePromise( this.addToRelationship( keys.map(x => x[0]), diff --git a/src/cache/resources/guilds.ts b/src/cache/resources/guilds.ts index be05720..7e08693 100644 --- a/src/cache/resources/guilds.ts +++ b/src/cache/resources/guilds.ts @@ -141,8 +141,9 @@ export class Guilds extends BaseResource { } for (const channel of data.channels ?? []) { - if (channel.permission_overwrites?.length) + if (channel.permission_overwrites?.length) { bulkData.push(['overwrites', channel.permission_overwrites, channel.id, id]); + } } for (const emoji of data.emojis ?? []) { diff --git a/src/cache/resources/overwrites.ts b/src/cache/resources/overwrites.ts index 1be6e7c..09a1633 100644 --- a/src/cache/resources/overwrites.ts +++ b/src/cache/resources/overwrites.ts @@ -7,20 +7,24 @@ import { GuildRelatedResource } from './default/guild-related'; export class Overwrites extends GuildRelatedResource { namespace = 'overwrite'; - parse(data: any, _id: string, _guild_id: string) { + parse(data: any[], _id: string, guild_id: string) { + data.forEach(x => { + x.guild_id = guild_id; + }); return data; } override get( id: string, ): ReturnCache<{ type: number; id: string; deny: PermissionsBitField; allow: PermissionsBitField }[] | undefined> { - return fakePromise(super.get(id) as APIOverwrite[] | undefined).then(rawOverwrites => + return fakePromise(super.get(id) as (APIOverwrite & { guild_id: string })[] | undefined).then(rawOverwrites => rawOverwrites ? rawOverwrites.map(rawOverwrite => ({ allow: new PermissionsBitField(BigInt(rawOverwrite.allow)), deny: new PermissionsBitField(BigInt(rawOverwrite.deny)), id: rawOverwrite.id, type: rawOverwrite.type, + guildId: rawOverwrite.guild_id, })) : undefined, ); @@ -29,13 +33,14 @@ export class Overwrites extends GuildRelatedResource { override values( guild: string, ): ReturnCache<{ type: number; id: string; deny: PermissionsBitField; allow: PermissionsBitField }[][]> { - return fakePromise(super.values(guild) as APIOverwrite[][]).then(values => + return fakePromise(super.values(guild) as (APIOverwrite & { guild_id: string })[][]).then(values => values.map(rawOverwrites => rawOverwrites.map(rawOverwrite => ({ allow: new PermissionsBitField(BigInt(rawOverwrite.allow)), deny: new PermissionsBitField(BigInt(rawOverwrite.deny)), id: rawOverwrite.id, type: rawOverwrite.type, + guildId: rawOverwrite.guild_id, })), ), ); @@ -44,13 +49,14 @@ export class Overwrites extends GuildRelatedResource { override bulk( ids: string[], ): ReturnCache<{ type: number; id: string; deny: PermissionsBitField; allow: PermissionsBitField }[][]> { - return fakePromise(super.bulk(ids) as APIOverwrite[][]).then(values => + return fakePromise(super.bulk(ids) as (APIOverwrite & { guild_id: string })[][]).then(values => values.map(rawOverwrites => rawOverwrites.map(rawOverwrite => ({ allow: new PermissionsBitField(BigInt(rawOverwrite.allow)), deny: new PermissionsBitField(BigInt(rawOverwrite.deny)), id: rawOverwrite.id, type: rawOverwrite.type, + guildId: rawOverwrite.guild_id, })), ), ); diff --git a/src/client/onmessagecreate.ts b/src/client/onmessagecreate.ts index 3262e37..a6c47a4 100644 --- a/src/client/onmessagecreate.ts +++ b/src/client/onmessagecreate.ts @@ -37,7 +37,7 @@ function getCommandFromContent( if (!(parent instanceof Command)) return { fullCommandName }; - if (groupName && !parent.groups?.[groupName!]) return getCommandFromContent([parentName, subcommandName], self); + if (groupName && !parent.groups?.[groupName!]) return getCommandFromContent([parentName, groupName], self); if (subcommandName && !parent.options?.some(x => x instanceof SubCommand && x.name === subcommandName)) return getCommandFromContent([parentName], self);