diff options
Diffstat (limited to 'src/cleaners/skyblock/farmingContents.ts')
-rw-r--r-- | src/cleaners/skyblock/farmingContents.ts | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/cleaners/skyblock/farmingContents.ts b/src/cleaners/skyblock/farmingContents.ts new file mode 100644 index 0000000..c10408d --- /dev/null +++ b/src/cleaners/skyblock/farmingContents.ts @@ -0,0 +1,65 @@ +import typedHypixelApi from 'typed-hypixel-api' + +export interface PlayerFarmingContestStats { + year: number + month: number + day: number + crops: { + item: string + amount: number + /** The position (1-indexed) that the user got on the contest. */ + position: number | null + /** Whether the player has claimed their rewards. */ + claimed: boolean | null + /** + * The number of people who participated in this contest. + */ + participants: number | null + }[] +} + +export interface FarmingContests { + talkedToJacob: boolean + list: PlayerFarmingContestStats[] +} + +export function cleanFarmingContest(data: typedHypixelApi.SkyBlockProfileMember): FarmingContests { + if (!data.jacob2) return { + talkedToJacob: false, + list: [] + } + + const contestsByDate: Record<string, PlayerFarmingContestStats['crops']> = {} + for (const [contestName, contestData] of Object.entries(data.jacob2?.contests ?? {})) { + const [year, monthDay, item] = contestName.split(':') + const [month, day] = monthDay.split('_') + const contestByDateKey = `${year}:${month}:${day}` + const cropData: PlayerFarmingContestStats['crops'][number] = { + item, + amount: contestData.collected, + // the api returns the position 0-indexed, so we add 1 + position: contestData.claimed_position ? contestData.claimed_position + 1 : null, + claimed: contestData.claimed_rewards ?? null, + participants: contestData.claimed_participants ?? null + } + if (!(contestByDateKey in contestsByDate)) + contestsByDate[contestByDateKey] = [cropData] + else + contestsByDate[contestByDateKey].push(cropData) + } + + const contests: PlayerFarmingContestStats[] = Object.entries(contestsByDate).map(([contestDateKey, crops]) => { + const [year, month, day] = contestDateKey.split(':') + return { + year: parseInt(year), + month: parseInt(month), + day: parseInt(day), + crops + } + }) + + return { + talkedToJacob: data.jacob2?.talked ?? false, + list: contests + } +}
\ No newline at end of file |