diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts
index beef662b..b265bc5f 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 });
},
|