1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-05 10:22:31 +01:00

* 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
This commit is contained in:
Madeline 2023-07-29 16:59:21 +10:00
parent a5a6321156
commit a0d93fb252
No known key found for this signature in database
GPG Key ID: 80D25DA3BCB24281
7 changed files with 35 additions and 4 deletions

View File

@ -161,7 +161,7 @@ router.patch(
const data = guild.toJSON(); const data = guild.toJSON();
// TODO: guild hashes // TODO: guild hashes
// TODO: fix vanity_url_code, template_id // TODO: fix vanity_url_code, template_id
delete data.vanity_url_code; // delete data.vanity_url_code;
delete data.template_id; delete data.template_id;
await Promise.all([ await Promise.all([

View File

@ -265,6 +265,8 @@ export async function onIdentify(this: WebSocket, data: Payload) {
return { return {
...member.guild.toJSON(), ...member.guild.toJSON(),
joined_at: member.joined_at, joined_at: member.joined_at,
threads: [],
}; };
}); });

View File

@ -49,12 +49,12 @@ export interface ReadyPrivateChannel {
export type GuildOrUnavailable = export type GuildOrUnavailable =
| { id: string; unavailable: boolean } | { id: string; unavailable: boolean }
| (Guild & { joined_at?: Date; unavailable: boolean }); | (Guild & { joined_at?: Date; unavailable: undefined });
const guildIsAvailable = ( const guildIsAvailable = (
guild: GuildOrUnavailable, guild: GuildOrUnavailable,
): guild is Guild & { joined_at: Date; unavailable: false } => { ): guild is Guild & { joined_at: Date; unavailable: false } => {
return guild.unavailable == false; return guild.unavailable != true;
}; };
export interface IReadyGuildDTO { export interface IReadyGuildDTO {

View File

@ -468,6 +468,18 @@ export class Channel extends BaseClass {
]; ];
return disallowedChannelTypes.indexOf(this.type) == -1; 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 { export interface ChannelPermissionOverwrite {

View File

@ -390,4 +390,11 @@ export class Guild extends BaseClass {
return guild; return guild;
} }
toJSON() {
return {
...this,
unavailable: this.unavailable == false ? undefined : true,
};
}
} }

View File

@ -175,7 +175,7 @@ export class User extends BaseClass {
email?: string; // email of the user email?: string; // email of the user
@Column() @Column()
flags: string = "0"; // UserFlags // TODO: generate flags: number = 0; // UserFlags // TODO: generate
@Column() @Column()
public_flags: number = 0; public_flags: number = 0;

View File

@ -27,6 +27,16 @@ const JSONReplacer = function (
return (this[key] as Date).toISOString().replace("Z", "+00:00"); 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; return value;
}; };