58 lines
2.0 KiB
TypeScript
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"]>
|