From 45ceb0ce4044dfb37c1a476ab6c322ca27cd636a Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Fri, 28 Nov 2025 16:20:26 -0600 Subject: [PATCH] status stuff --- src/api/routes/users/@me/settings.ts | 37 +++++++++++++++++++++------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts index beef662bb..b265bc5f6 100644 --- a/src/api/routes/users/@me/settings.ts +++ b/src/api/routes/users/@me/settings.ts @@ -17,9 +17,9 @@ */ import { route } from "@spacebar/api"; -import { User, UserSettings } from "@spacebar/util"; +import { User, UserSettings, emitEvent, Session, PrivateSessionProjection, PresenceUpdateEvent } from "@spacebar/util"; import { Request, Response, Router } from "express"; -import { UserSettingsUpdateSchema, UserSettingsSchema } from "@spacebar/schemas" +import { UserSettingsUpdateSchema } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); @@ -36,7 +36,7 @@ router.get( }, }), async (req: Request, res: Response) => { - const settings = await UserSettings.getOrDefault(req.user_id) + const settings = await UserSettings.getOrDefault(req.user_id); return res.json(settings); }, ); @@ -67,16 +67,35 @@ router.patch( relations: ["settings"], }); - if (!user.settings) - user.settings = UserSettings.create(body as UserSettingsUpdateSchema); - else - user.settings.assign(body); + if (!user.settings) user.settings = UserSettings.create(body as UserSettingsUpdateSchema); + else user.settings.assign(body); - if (body.guild_folders) - user.settings.guild_folders = body.guild_folders; + if (body.guild_folders) user.settings.guild_folders = body.guild_folders; await user.settings.save(); await user.save(); + if (body.status) { + const [session] = (await Session.find({ + where: { user_id: user.id }, + })) as [Session | undefined]; + if (session) { + session.status = body.status; + + await Promise.all([ + emitEvent({ + event: "PRESENCE_UPDATE", + user_id: user.id, + data: { + user: user, + activities: session.activities, + client_status: session?.client_status, + status: body.status === "invisible" ? "offline" : body.status, + }, + } as PresenceUpdateEvent), + session.save(), + ]); + } + } res.json({ ...user.settings, index: undefined }); },