Finished sidebar

This commit is contained in:
2025-08-16 23:39:11 +02:00
parent 1921efc76a
commit c79d06f272
35 changed files with 1307 additions and 9 deletions

26
src/lib/schema/guild.ts Normal file
View File

@@ -0,0 +1,26 @@
import z from "zod"
export const guildSchema = z.object({
guild: z.object({
_id: z.string().min(1),
name: z.string().min(1),
tag: z.string().optional(),
tagColor: z.string().optional(),
members: z.array(z.object({
uuid: z.string(),
rank: z.string(),
joined: z.number(),
questParticipation: z.number().optional(),
expHistory: z.record(z.string(), z.number())
})),
ranks: z.array(z.object({
name: z.string(),
default: z.boolean(),
tag: z.string().nullish().optional(),
created: z.number(),
priority: z.number()
}))
})
})
export type Guild = z.infer<typeof guildSchema>

56
src/lib/schema/player.ts Normal file
View File

@@ -0,0 +1,56 @@
import z from "zod"
export const playerSchema = z.object({
player: z.object({
displayname: z.string(),
uuid: z.string(),
newPackageRank: z.literal("VIP").or(z.literal("VIP_PLUS").or(z.literal("MVP")).or(z.literal("MVP_PLUS"))).optional(),
monthlyPackageRank: z.string().optional(),
rankPlusColor: z.string().optional(),
monthlyRankColor: z.literal("GOLD").or(z.literal("AQUA")).optional(),
networkExp: z.number(),
karma: z.number(),
achievementPoints: z.number().optional(),
stats: z.record(
z.string(),
z.object({
coins: z.number().optional()
})
),
quests: z.record(
z.string(),
z.object({
completions: z.array(
z.object({
time: z.number()
}).optional()
).optional()
})
),
challenges: z.object({
all_time: z.record(z.string(), z.number())
}),
lastClaimedReward: z.number().optional(),
rewardHighScore: z.number().optional(),
rewardStreak: z.number().optional(),
totalRewards: z.number().optional(),
giftingMeta: z.object({
giftsGiven: z.number().optional(),
ranksGiven: z.number().optional()
}).optional(),
firstLogin: z.number().optional(),
lastLogin: z.number().optional(),
socialMedia: z.object({
links: z.object({
DISCORD: z.string().optional(),
TWITCH: z.string().optional(),
HYPIXEL: z.string().optional(),
TWITTER: z.string().optional(),
YOUTUBE: z.string().optional()
})
})
})
})
export type Player = z.infer<typeof playerSchema>