aboutsummaryrefslogtreecommitdiff
path: root/src/cleaners/skyblock/profile.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/cleaners/skyblock/profile.ts')
-rw-r--r--src/cleaners/skyblock/profile.ts79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/cleaners/skyblock/profile.ts b/src/cleaners/skyblock/profile.ts
new file mode 100644
index 0000000..8b59a9d
--- /dev/null
+++ b/src/cleaners/skyblock/profile.ts
@@ -0,0 +1,79 @@
+import { CleanBasicMember, CleanMember, cleanSkyBlockProfileMemberResponse } from './member'
+import { CleanMinion, combineMinionArrays } from './minions'
+
+
+export interface CleanProfile extends CleanBasicProfile {
+ members?: CleanBasicMember[]
+}
+
+export interface CleanFullProfile extends CleanProfile {
+ members: CleanMember[]
+ bank?: {
+ balance: number
+ history: any[]
+ }
+ minions: CleanMinion[]
+}
+
+/** Return a `CleanProfile` instead of a `CleanFullProfile`, useful when we need to get members but don't want to waste much ram */
+export async function cleanSkyblockProfileResponseLighter(data): Promise<CleanProfile> {
+ // We use Promise.all so it can fetch all the usernames at once instead of waiting for the previous promise to complete
+ const promises: Promise<CleanMember>[] = []
+
+ for (const memberUUID in data.members) {
+ const memberRaw = data.members[memberUUID]
+ memberRaw.uuid = memberUUID
+ // we pass an empty array to make it not check stats
+ promises.push(cleanSkyBlockProfileMemberResponse(memberRaw, []))
+ }
+
+ const cleanedMembers: CleanMember[] = await Promise.all(promises)
+
+ return {
+ uuid: data.profile_id,
+ name: data.cute_name,
+ members: cleanedMembers,
+ }
+}
+
+/** This function is somewhat costly and shouldn't be called often. Use cleanSkyblockProfileResponseLighter if you don't need all the data */
+export async function cleanSkyblockProfileResponse(data: any): Promise<CleanFullProfile> {
+ const cleanedMembers: CleanMember[] = []
+
+ for (const memberUUID in data.members) {
+ const memberRaw = data.members[memberUUID]
+ memberRaw.uuid = memberUUID
+ const member: CleanMember = await cleanSkyBlockProfileMemberResponse(memberRaw, ['stats'])
+ cleanedMembers.push(member)
+ }
+
+ const memberMinions: CleanMinion[][] = []
+
+ for (const member of cleanedMembers) {
+ memberMinions.push(member.minions)
+ }
+ const minions: CleanMinion[] = combineMinionArrays(memberMinions)
+
+ // return more detailed info
+ return {
+ uuid: data.profile_id,
+ name: data.cute_name,
+ members: cleanedMembers,
+ bank: {
+ balance: data?.banking?.balance ?? 0,
+
+ // TODO: make transactions good
+ history: data?.banking?.transactions ?? []
+ },
+ minions
+ }
+}
+
+/** A basic profile that only includes the profile uuid and name */
+export interface CleanBasicProfile {
+ uuid: string
+
+ // the name depends on the user, so its sometimes not included
+ name?: string
+}
+