diff --git a/assets/openapi.json b/assets/openapi.json index ef7607f36..d361c5d1d 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index 5c51dbcaa..b905dc180 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/src/api/routes/users/@me/index.ts b/src/api/routes/users/@me/index.ts index 187862f10..469dddef7 100644 --- a/src/api/routes/users/@me/index.ts +++ b/src/api/routes/users/@me/index.ts @@ -20,7 +20,7 @@ import { route } from "@spacebar/api"; import { Config, emitEvent, FieldErrors, generateToken, handleFile, User, UserUpdateEvent } from "@spacebar/util"; import bcrypt from "bcrypt"; import { Request, Response, Router } from "express"; -import { PrivateUserProjection, UserModifySchema } from "@spacebar/schemas"; +import { DisplayNameStyle, PrivateUserProjection, UserModifySchema } from "@spacebar/schemas"; const router: Router = Router({ mergeParams: true }); @@ -191,6 +191,30 @@ router.patch( } } + if ("display_name_font_id" in body) { + if (!body.display_name_font_id) user.display_name_styles = undefined; + else { + user.display_name_styles ??= {} as unknown as DisplayNameStyle; + user.display_name_styles!.font_id = body.display_name_font_id; + } + } + + if ("display_name_effect_id" in body) { + if (!body.display_name_effect_id) user.display_name_styles = undefined; + else { + user.display_name_styles ??= {} as unknown as DisplayNameStyle; + user.display_name_styles!.effect_id = body.display_name_effect_id; + } + } + + if ("display_name_colors" in body) { + if (!body.display_name_colors) user.display_name_styles = undefined; + else { + user.display_name_styles ??= {} as unknown as DisplayNameStyle; + user.display_name_styles!.colors = body.display_name_colors; + } + } + user.assign(body); user.validate(); await user.save(); diff --git a/src/schemas/api/users/User.ts b/src/schemas/api/users/User.ts index 41d606730..29b211d46 100644 --- a/src/schemas/api/users/User.ts +++ b/src/schemas/api/users/User.ts @@ -57,6 +57,10 @@ interface UserEntityPleaseRewriteThankYou { fingerprints: string[]; settings?: UserSettingsSchema; badge_ids?: string[]; + avatar_decoration_data?: AvatarDecorationData; + display_name_styles?: DisplayNameStyle; + collectibles?: Collectibles; + primary_guild?: PrimaryGuild; } export interface PartialUser { @@ -97,7 +101,7 @@ export interface NameplateData { export interface DisplayNameStyle { font_id: number; effect_id: number; - colors: number; + colors: number[]; } export interface PrimaryGuild { @@ -122,6 +126,10 @@ export enum PublicUserEnum { theme_colors, pronouns, badge_ids, + avatar_decoration_data, + display_name_styles, + collectibles, + primary_guild, } export type PublicUserKeys = keyof typeof PublicUserEnum; diff --git a/src/schemas/uncategorised/UserModifySchema.ts b/src/schemas/uncategorised/UserModifySchema.ts index c7228e7b9..45c1ae909 100644 --- a/src/schemas/uncategorised/UserModifySchema.ts +++ b/src/schemas/uncategorised/UserModifySchema.ts @@ -16,6 +16,8 @@ along with this program. If not, see . */ +import { User_DisplayNameEffect, User_DisplayNameFont } from "discord-protos"; + export interface UserModifySchema { /** * @minLength 2 @@ -49,4 +51,8 @@ export interface UserModifySchema { * @maxLength 4 */ discriminator?: string; + + display_name_colors?: number[]; + display_name_effect_id?: User_DisplayNameEffect; + display_name_font_id?: User_DisplayNameFont; }