From a0d93fb252803c5fded8723d092ae0f394d1b40b Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Sat, 29 Jul 2023 16:59:21 +1000 Subject: * call toJSON of keys in gateway when using erlpack * dont send bitrate/etc as null when should be undefined * set user flags to number instead of string * send empty 'threads' in identify when not using new state v2 --- src/api/routes/guilds/#guild_id/index.ts | 2 +- src/gateway/opcodes/Identify.ts | 2 ++ src/util/dtos/ReadyGuildDTO.ts | 4 ++-- src/util/entities/Channel.ts | 12 ++++++++++++ src/util/entities/Guild.ts | 7 +++++++ src/util/entities/User.ts | 2 +- src/util/util/JSON.ts | 10 ++++++++++ 7 files changed, 35 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/api/routes/guilds/#guild_id/index.ts b/src/api/routes/guilds/#guild_id/index.ts index afe60614..86777b36 100644 --- a/src/api/routes/guilds/#guild_id/index.ts +++ b/src/api/routes/guilds/#guild_id/index.ts @@ -161,7 +161,7 @@ router.patch( const data = guild.toJSON(); // TODO: guild hashes // TODO: fix vanity_url_code, template_id - delete data.vanity_url_code; + // delete data.vanity_url_code; delete data.template_id; await Promise.all([ diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 837ae351..0f91df3e 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -265,6 +265,8 @@ export async function onIdentify(this: WebSocket, data: Payload) { return { ...member.guild.toJSON(), joined_at: member.joined_at, + + threads: [], }; }); diff --git a/src/util/dtos/ReadyGuildDTO.ts b/src/util/dtos/ReadyGuildDTO.ts index 7ca268a0..905ede74 100644 --- a/src/util/dtos/ReadyGuildDTO.ts +++ b/src/util/dtos/ReadyGuildDTO.ts @@ -49,12 +49,12 @@ export interface ReadyPrivateChannel { export type GuildOrUnavailable = | { id: string; unavailable: boolean } - | (Guild & { joined_at?: Date; unavailable: boolean }); + | (Guild & { joined_at?: Date; unavailable: undefined }); const guildIsAvailable = ( guild: GuildOrUnavailable, ): guild is Guild & { joined_at: Date; unavailable: false } => { - return guild.unavailable == false; + return guild.unavailable != true; }; export interface IReadyGuildDTO { diff --git a/src/util/entities/Channel.ts b/src/util/entities/Channel.ts index 19a7a41a..38627c39 100644 --- a/src/util/entities/Channel.ts +++ b/src/util/entities/Channel.ts @@ -468,6 +468,18 @@ export class Channel extends BaseClass { ]; return disallowedChannelTypes.indexOf(this.type) == -1; } + + toJSON() { + return { + ...this, + + // these fields are not returned depending on the type of channel + bitrate: this.bitrate || undefined, + user_limit: this.user_limit || undefined, + rate_limit_per_user: this.rate_limit_per_user || undefined, + owner_id: this.owner_id || undefined, + }; + } } export interface ChannelPermissionOverwrite { diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts index 4c2949a3..e364ed98 100644 --- a/src/util/entities/Guild.ts +++ b/src/util/entities/Guild.ts @@ -390,4 +390,11 @@ export class Guild extends BaseClass { return guild; } + + toJSON() { + return { + ...this, + unavailable: this.unavailable == false ? undefined : true, + }; + } } diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts index 68d7b5e8..3f1bda05 100644 --- a/src/util/entities/User.ts +++ b/src/util/entities/User.ts @@ -175,7 +175,7 @@ export class User extends BaseClass { email?: string; // email of the user @Column() - flags: string = "0"; // UserFlags // TODO: generate + flags: number = 0; // UserFlags // TODO: generate @Column() public_flags: number = 0; diff --git a/src/util/util/JSON.ts b/src/util/util/JSON.ts index 1c39b66e..c7dcf47e 100644 --- a/src/util/util/JSON.ts +++ b/src/util/util/JSON.ts @@ -27,6 +27,16 @@ const JSONReplacer = function ( return (this[key] as Date).toISOString().replace("Z", "+00:00"); } + // erlpack encoding doesn't call json.stringify, + // so our toJSON functions don't get called. + // manually call it here + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + if (this?.[key]?.toJSON) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + this[key] = this[key].toJSON(); + return value; }; -- cgit 1.4.1