summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/users/@me/settings.ts2
-rw-r--r--src/gateway/events/Close.ts30
-rw-r--r--src/gateway/opcodes/Identify.ts2
-rw-r--r--src/gateway/opcodes/PresenceUpdate.ts4
4 files changed, 17 insertions, 21 deletions
diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts

index 2013611b..5136c4ab 100644 --- a/src/api/routes/users/@me/settings.ts +++ b/src/api/routes/users/@me/settings.ts
@@ -91,7 +91,7 @@ router.patch( client_status: session?.client_status, status: session.getPublicStatus(), }, - } as PresenceUpdateEvent), + } satisfies PresenceUpdateEvent), session.save(), ]); } diff --git a/src/gateway/events/Close.ts b/src/gateway/events/Close.ts
index adbf9be7..322a9c4e 100644 --- a/src/gateway/events/Close.ts +++ b/src/gateway/events/Close.ts
@@ -77,23 +77,19 @@ export async function Close(this: WebSocket, code: number, reason: Buffer) { status: "offline", }; - // TODO - // If a user was deleted, they may still be connected to gateway, - // which will cause this to throw when they disconnect. - // just send the ID of the user instead of the full correct payload for now - const userOrId = await User.getPublicUser(this.user_id).catch(() => ({ - id: this.user_id, - })); + const user = await User.getPublicUser(this.user_id).catch(() => undefined); - await emitEvent({ - event: "PRESENCE_UPDATE", - user_id: this.user_id, - data: { - user: userOrId, - activities: session.activities, - client_status: session?.client_status, - status: session.getPublicStatus?.() ?? session.status, - }, - } as PresenceUpdateEvent); + // Special case: dont emit a presence update for deleted users + if (user !== undefined) + await emitEvent({ + event: "PRESENCE_UPDATE", + user_id: this.user_id, + data: { + user: user, + activities: session.activities, + client_status: session?.client_status, + status: session.getPublicStatus?.() ?? session.status, + }, + } satisfies PresenceUpdateEvent); } } diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts
index ce0bd8ef..fd0b91fe 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts
@@ -585,7 +585,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { client_status: this.session!.client_status, status: this.session!.getPublicStatus(), }, - } as PresenceUpdateEvent), + } satisfies PresenceUpdateEvent), ), ]); diff --git a/src/gateway/opcodes/PresenceUpdate.ts b/src/gateway/opcodes/PresenceUpdate.ts
index 54ce3a89..ca52af2a 100644 --- a/src/gateway/opcodes/PresenceUpdate.ts +++ b/src/gateway/opcodes/PresenceUpdate.ts
@@ -39,10 +39,10 @@ export async function onPresenceUpdate(this: WebSocket, { d }: Payload) { data: { user: await User.getPublicUser(this.user_id), status: session.getPublicStatus(), - activities: presence.activities, + activities: presence.activities ?? [], client_status: session.client_status, }, - } as PresenceUpdateEvent); + } satisfies PresenceUpdateEvent); console.log(`Presence update for user ${this.user_id} processed in ${Date.now() - startTime}ms`); }