diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts
index 54a6539e..1973b8e4 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 909ede96..0f27f0ec 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 b1ab76fa..97d33f55 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 c3c74990..6751a699 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 13fa3ac4..92bd3e20 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 9cf08e12..8ebe759d 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"];
|