summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-03-08 18:07:16 +0100
committerRory& <root@rory.gay>2026-03-20 18:17:47 +0100
commitbd42196733fa879772f96eb292c93043ff61e350 (patch)
tree13c838777b2b12f72d852d02e0840d677a29d1f0
parentMigrate UserUpdateEvent to satisfies, part of #1577 (diff)
downloadserver-ts-bd42196733fa879772f96eb292c93043ff61e350.tar.xz
Migrate PresenceUpdateEvent to satisfies, part of #1577
-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`); }