aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cleaners/skyblock/farmingContents.ts65
-rw-r--r--src/cleaners/skyblock/member.ts4
2 files changed, 69 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
diff --git a/src/cleaners/skyblock/member.ts b/src/cleaners/skyblock/member.ts
index c7c9a2e..a2010da 100644
--- a/src/cleaners/skyblock/member.ts
+++ b/src/cleaners/skyblock/member.ts
@@ -8,6 +8,7 @@ import { cleanProfileStats, StatItem } from './stats.js'
import { CleanMinion, cleanMinions } from './minions.js'
import { cleanSlayers, SlayerData } from './slayers.js'
import { AccountCustomization } from '../../database.js'
+import { cleanFarmingContest, FarmingContests } from './farmingContents.js'
import { cleanVisitedZones, Zone } from './zones.js'
import { cleanSkills, Skill } from './skills.js'
import * as cached from '../../hypixelCached.js'
@@ -43,6 +44,7 @@ export interface CleanMember extends CleanBasicMember {
pets: PetsData
harp: HarpData
coopInvitation: CoopInvitation | null
+ farmingContest: FarmingContests
/** Whether the user left the coop */
left: boolean
}
@@ -96,6 +98,7 @@ export async function cleanSkyBlockProfileMemberResponse(member: typedHypixelApi
pets: await cleanPets(member),
harp: await cleanHarp(member),
coopInvitation: cleanCoopInvitation(member),
+ farmingContest: cleanFarmingContest(member),
left: (player.profiles?.find(profile => profile.uuid === profileId) === undefined) ?? false
}
@@ -121,6 +124,7 @@ export interface CleanMemberProfilePlayer extends CleanPlayer {
pets: PetsData
harp: HarpData
coopInvitation: CoopInvitation | null
+ farmingContest: FarmingContests
}
export interface CleanMemberProfile {