diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts index 54a6539e0..1973b8e48 100644 --- a/src/api/routes/users/@me/settings.ts +++ b/src/api/routes/users/@me/settings.ts @@ -89,7 +89,7 @@ router.patch( user: user, activities: session.activities, client_status: session?.client_status, - status: body.status === "invisible" ? "offline" : body.status, + status: session.getPublicStatus(), }, } as PresenceUpdateEvent), session.save(), diff --git a/src/gateway/events/Close.ts b/src/gateway/events/Close.ts index 909ede968..0f27f0ec7 100644 --- a/src/gateway/events/Close.ts +++ b/src/gateway/events/Close.ts @@ -91,7 +91,7 @@ export async function Close(this: WebSocket, code: number, reason: Buffer) { user: userOrId, activities: session.activities, client_status: session?.client_status, - status: session.status, + status: session.getPublicStatus(), }, } as PresenceUpdateEvent); } diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index b1ab76fa9..97d33f553 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -503,7 +503,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { user: user.toPublicUser(), activities: session.activities, client_status: session.client_status, - status: session.status, + status: session.getPublicStatus(), }, } as PresenceUpdateEvent), ), diff --git a/src/gateway/opcodes/LazyRequest.ts b/src/gateway/opcodes/LazyRequest.ts index c3c74990e..6751a699e 100644 --- a/src/gateway/opcodes/LazyRequest.ts +++ b/src/gateway/opcodes/LazyRequest.ts @@ -202,7 +202,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { user: user, activities: session?.activities || [], client_status: session?.client_status, - status: session?.status || "offline", + status: session?.getPublicStatus() || "offline", } as Presence, }); }), diff --git a/src/gateway/opcodes/PresenceUpdate.ts b/src/gateway/opcodes/PresenceUpdate.ts index 13fa3ac49..92bd3e200 100644 --- a/src/gateway/opcodes/PresenceUpdate.ts +++ b/src/gateway/opcodes/PresenceUpdate.ts @@ -17,24 +17,16 @@ */ import { WebSocket, Payload } from "@spacebar/gateway"; -import { - emitEvent, - PresenceUpdateEvent, - Session, - User, -} from "@spacebar/util"; +import { emitEvent, PresenceUpdateEvent, Session, User } from "@spacebar/util"; import { check } from "./instanceOf"; -import { ActivitySchema } from "@spacebar/schemas" +import { ActivitySchema } from "@spacebar/schemas"; export async function onPresenceUpdate(this: WebSocket, { d }: Payload) { const startTime = Date.now(); check.call(this, ActivitySchema, d); const presence = d as ActivitySchema; - await Session.update( - { session_id: this.session_id }, - { status: presence.status, activities: presence.activities }, - ); + await Session.update({ session_id: this.session_id }, { status: presence.status, activities: presence.activities }); const session = await Session.findOneOrFail({ select: ["client_status"], @@ -46,13 +38,11 @@ export async function onPresenceUpdate(this: WebSocket, { d }: Payload) { user_id: this.user_id, data: { user: await User.getPublicUser(this.user_id), - status: presence.status, + status: session.getPublicStatus(), activities: presence.activities, client_status: session.client_status, }, } as PresenceUpdateEvent); - console.log( - `Presence update for user ${this.user_id} processed in ${Date.now() - startTime}ms`, - ); + console.log(`Presence update for user ${this.user_id} processed in ${Date.now() - startTime}ms`); } diff --git a/src/util/entities/Session.ts b/src/util/entities/Session.ts index 9cf08e124..8ebe759d9 100644 --- a/src/util/entities/Session.ts +++ b/src/util/entities/Session.ts @@ -57,6 +57,9 @@ export class Session extends BaseClass { @Column({ nullable: false, type: "varchar" }) status: Status; //TODO enum + getPublicStatus() { + return this.status === "invisible" ? "offline" : this.status; + } } export const PrivateSessionProjection: (keyof Session)[] = ["user_id", "session_id", "activities", "client_info", "status"];