Files
hypixel-stats/src/lib/schema/player.ts
2025-08-21 22:53:08 +02:00

78 lines
3.1 KiB
TypeScript

import z from "zod"
export const playerSchema = z.looseObject({
player: z.looseObject({
displayname: z.string(),
uuid: z.string(),
newPackageRank: z.string().optional(),
monthlyPackageRank: z.string().optional(),
rankPlusColor: z.string().optional(),
monthlyRankColor: z.string().optional(),
networkExp: z.number().default(0),
karma: z.number().default(0),
achievementPoints: z.number().default(0),
stats: z.looseObject({
Bedwars: z.looseObject({
Experience: z.number().default(0),
coins: z.number().default(0),
winstreak: z.number().optional(),
kills_bedwars: z.number().default(0),
deaths_bedwars: z.number().default(0),
final_kills_bedwars: z.number().default(0),
final_deaths_bedwars: z.number().default(0),
wins_bedwars: z.number().default(0),
losses_bedwars: z.number().default(0),
beds_broken_bedwars: z.number().default(0),
beds_lost_bedwars: z.number().default(0),
total_challenges_completed: z.number().default(0),
iron_resources_collected_bedwars: z.number().default(0),
gold_resources_collected_bedwars: z.number().default(0),
diamond_resources_collected_bedwars: z.number().default(0),
emerald_resources_collected_bedwars: z.number().default(0),
_items_purchased_bedwars: z.number().default(0),
slumber: z.looseObject({
tickets: z.number().default(0),
bag_type: z.string(),
total_tickets_earned: z.number(),
doublers: z.number(),
room: z.record(z.string(), z.boolean())
}).optional()
}).optional()
}),
quests: z.record(
z.string(),
z.looseObject({
completions: z.array(
z.looseObject({
time: z.number()
})
).optional()
})
).optional(),
challenges: z.looseObject({
all_time: z.record(z.string(), z.number())
}).optional(),
lastClaimedReward: z.number().optional(),
rewardHighScore: z.number().optional(),
rewardStreak: z.number().optional(),
totalRewards: z.number().optional(),
giftingMeta: z.looseObject({
giftsGiven: z.number().optional(),
ranksGiven: z.number().optional()
}).optional(),
firstLogin: z.number().optional(),
lastLogin: z.number().optional(),
socialMedia: z.looseObject({
links: z.looseObject({
DISCORD: z.string().optional(),
TWITCH: z.string().optional(),
HYPIXEL: z.string().optional(),
TWITTER: z.string().optional(),
YOUTUBE: z.string().optional()
}).optional()
}).optional()
})
})
export type Player = z.infer<typeof playerSchema>