Files
hypixel-stats/src/lib/schema/player.ts

58 lines
2.0 KiB
TypeScript

import z from "zod"
import { bedwarsStatsSchema, skywarsStatsSchema } from "./stats"
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: bedwarsStatsSchema.optional(),
SkyWars: skywarsStatsSchema.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(),
rank: z.string().optional(),
eulaCoins: z.boolean().optional()
})
})
export type Player = z.infer<typeof playerSchema>
export type NonNullStats = NonNullable<Player["player"]["stats"]>