aboutsummaryrefslogtreecommitdiff
path: root/src/cleaners/skyblock
diff options
context:
space:
mode:
Diffstat (limited to 'src/cleaners/skyblock')
-rw-r--r--src/cleaners/skyblock/bank.ts5
-rw-r--r--src/cleaners/skyblock/collections.ts11
-rw-r--r--src/cleaners/skyblock/election.ts10
-rw-r--r--src/cleaners/skyblock/fairysouls.ts3
-rw-r--r--src/cleaners/skyblock/inventory.ts9
-rw-r--r--src/cleaners/skyblock/member.ts6
-rw-r--r--src/cleaners/skyblock/minions.ts5
-rw-r--r--src/cleaners/skyblock/objectives.ts5
-rw-r--r--src/cleaners/skyblock/profile.ts21
-rw-r--r--src/cleaners/skyblock/profiles.ts5
-rw-r--r--src/cleaners/skyblock/skills.ts14
-rw-r--r--src/cleaners/skyblock/slayers.ts4
-rw-r--r--src/cleaners/skyblock/stats.ts9
-rw-r--r--src/cleaners/skyblock/zones.ts5
14 files changed, 68 insertions, 44 deletions
diff --git a/src/cleaners/skyblock/bank.ts b/src/cleaners/skyblock/bank.ts
index 4eace04..ac46867 100644
--- a/src/cleaners/skyblock/bank.ts
+++ b/src/cleaners/skyblock/bank.ts
@@ -1,3 +1,6 @@
+import typedHypixelApi from 'typed-hypixel-api'
+
+
export interface Bank {
balance?: number
history: BankHistoryItem[]
@@ -10,7 +13,7 @@ export interface BankHistoryItem {
name: string
}
-export function cleanBank(data: any): Bank {
+export function cleanBank(data: typedHypixelApi.SkyBlockProfile): Bank {
let history: BankHistoryItem[] = []
if (data?.banking?.transactions) {
diff --git a/src/cleaners/skyblock/collections.ts b/src/cleaners/skyblock/collections.ts
index 7be5a9d..119e292 100644
--- a/src/cleaners/skyblock/collections.ts
+++ b/src/cleaners/skyblock/collections.ts
@@ -1,4 +1,5 @@
import { cleanItemId, hypixelItemNames } from './itemId.js'
+import typedHypixelApi from 'typed-hypixel-api'
const COLLECTIONS = {
'farming': [
@@ -95,14 +96,14 @@ function getCategory(collectionName): CollectionCategory | undefined {
}
}
-export function cleanCollections(data: any): Collection[] {
+export function cleanCollections(data: typedHypixelApi.SkyBlockProfileMember): Collection[] {
// collection tiers show up like this: [ GRAVEL_3, GOLD_INGOT_2, MELON_-1, LOG_2:1_7, RAW_FISH:3_-1]
// these tiers are the same for all players in a coop
const playerCollectionTiersRaw: string[] = data?.unlocked_coll_tiers ?? []
- const playerCollectionTiers: { [ key: string ]: number } = {}
+ const playerCollectionTiers: { [key: string]: number } = {}
for (const collectionTierNameValueRaw of playerCollectionTiersRaw) {
- const [ collectionTierNameRaw, collectionTierValueRaw ] = collectionTierNameValueRaw.split(/_(?=-?\d+$)/)
+ const [collectionTierNameRaw, collectionTierValueRaw] = collectionTierNameValueRaw.split(/_(?=-?\d+$)/)
const collectionName = cleanItemId(collectionTierNameRaw)
// ensure it's at least 0
const collectionValue: number = Math.max(parseInt(collectionTierValueRaw), 0)
@@ -114,9 +115,9 @@ export function cleanCollections(data: any): Collection[] {
// collection names show up like this: { LOG: 49789, LOG:2: 26219, MUSHROOM_COLLECTION: 2923}
// these values are different for each player in a coop
- const playerCollectionXpsRaw: { [ key in hypixelItemNames ]: number } = data?.collection ?? {}
+ const playerCollectionXpsRaw: { [key in hypixelItemNames]?: number } = data?.collection ?? {}
const playerCollections: Collection[] = []
-
+
for (const collectionNameRaw in playerCollectionXpsRaw) {
const collectionXp: number = playerCollectionXpsRaw[collectionNameRaw]
const collectionName = cleanItemId(collectionNameRaw)
diff --git a/src/cleaners/skyblock/election.ts b/src/cleaners/skyblock/election.ts
index 9094e2d..1688c66 100644
--- a/src/cleaners/skyblock/election.ts
+++ b/src/cleaners/skyblock/election.ts
@@ -1,3 +1,6 @@
+import typedHypixelApi from 'typed-hypixel-api'
+
+
const candidateColors = [
'4', 'a', '3', 'e', '5',
]
@@ -27,7 +30,10 @@ export interface ElectionData {
} | null
}
-function cleanCandidate(data: any, index: number): Candidate {
+function cleanCandidate(
+ data: typedHypixelApi.Candidate & { votes: number },
+ index: number
+): Candidate {
return {
name: data.name,
perks: data.perks.map(perk => ({
@@ -39,7 +45,7 @@ function cleanCandidate(data: any, index: number): Candidate {
}
}
-export async function cleanElectionResponse(data: any): Promise<ElectionData> {
+export async function cleanElectionResponse(data: typedHypixelApi.SkyBlockElectionResponse): Promise<ElectionData> {
const previousCandidates = data.mayor.election.candidates.map(cleanCandidate)
return {
lastUpdated: data.lastUpdated,
diff --git a/src/cleaners/skyblock/fairysouls.ts b/src/cleaners/skyblock/fairysouls.ts
index 67de0dd..92b1eff 100644
--- a/src/cleaners/skyblock/fairysouls.ts
+++ b/src/cleaners/skyblock/fairysouls.ts
@@ -1,3 +1,4 @@
+import typedHypixelApi from 'typed-hypixel-api'
import * as constants from '../../constants.js'
export interface FairySouls {
@@ -9,7 +10,7 @@ export interface FairySouls {
max: number
}
-export async function cleanFairySouls(data: any): Promise<FairySouls> {
+export async function cleanFairySouls(data: typedHypixelApi.SkyBlockProfileMember): Promise<FairySouls> {
const { max_fairy_souls } = await constants.fetchConstantValues()
return {
total: data?.fairy_souls_collected ?? 0,
diff --git a/src/cleaners/skyblock/inventory.ts b/src/cleaners/skyblock/inventory.ts
index 0ebb581..9e5ee29 100644
--- a/src/cleaners/skyblock/inventory.ts
+++ b/src/cleaners/skyblock/inventory.ts
@@ -1,6 +1,7 @@
-// maybe todo?: create a fast replacement for prismarine-nbt
+import typedHypixelApi from 'typed-hypixel-api'
import * as nbt from 'prismarine-nbt'
+
function base64decode(base64: string): Buffer {
return Buffer.from(base64, 'base64')
}
@@ -19,7 +20,7 @@ interface Item {
reforge?: string
anvilUses?: number
timestamp?: string
- enchantments?: { [ name: string ]: number }
+ enchantments?: { [name: string]: number }
headTexture?: string
}
@@ -98,9 +99,9 @@ export const INVENTORIES = {
personal_vault: 'personal_vault_contents'
}
-export type Inventories = { [name in keyof typeof INVENTORIES ]: Item[] }
+export type Inventories = { [name in keyof typeof INVENTORIES]: Item[] }
-export async function cleanInventories(data: any): Promise<Inventories> {
+export async function cleanInventories(data: typedHypixelApi.SkyBlockProfileMember): Promise<Inventories> {
const cleanInventories: any = {}
for (const cleanInventoryName in INVENTORIES) {
const hypixelInventoryName = INVENTORIES[cleanInventoryName]
diff --git a/src/cleaners/skyblock/member.ts b/src/cleaners/skyblock/member.ts
index e187beb..aa102e1 100644
--- a/src/cleaners/skyblock/member.ts
+++ b/src/cleaners/skyblock/member.ts
@@ -1,4 +1,3 @@
-import { ProfileMember as HypixelApiProfileMember } from 'typed-hypixel-api/build/responses/skyblock/_profile_member'
import { cleanCollections, Collection } from './collections.js'
import { cleanInventories, Inventories } from './inventory.js'
import { cleanFairySouls, FairySouls } from './fairysouls.js'
@@ -11,6 +10,7 @@ import { AccountCustomization } from '../../database.js'
import { cleanVisitedZones, Zone } from './zones.js'
import { cleanSkills, Skill } from './skills.js'
import * as cached from '../../hypixelCached.js'
+import typedHypixelApi from 'typed-hypixel-api'
import * as constants from '../../constants.js'
import { Included } from '../../hypixel.js'
import { CleanPlayer } from '../player.js'
@@ -41,7 +41,7 @@ export interface CleanMember extends CleanBasicMember {
left: boolean
}
-export async function cleanSkyBlockProfileMemberResponseBasic(member: any): Promise<CleanBasicMember | null> {
+export async function cleanSkyBlockProfileMemberResponseBasic(member: typedHypixelApi.SkyBlockProfileMember & { uuid: string }): Promise<CleanBasicMember | null> {
const player = await cached.fetchPlayer(member.uuid)
if (!player) return null
return {
@@ -54,7 +54,7 @@ export async function cleanSkyBlockProfileMemberResponseBasic(member: any): Prom
}
/** Cleans up a member (from skyblock/profile) */
-export async function cleanSkyBlockProfileMemberResponse(member: HypixelApiProfileMember & { uuid: string }, profileId?: string, included: Included[] | undefined = undefined): Promise<CleanMember | null> {
+export async function cleanSkyBlockProfileMemberResponse(member: typedHypixelApi.SkyBlockProfileMember & { uuid: string }, profileId?: string, included: Included[] | undefined = undefined): Promise<CleanMember | null> {
// profiles.members[]
const inventoriesIncluded = included === undefined || included.includes('inventories')
const player = await cached.fetchPlayer(member.uuid)
diff --git a/src/cleaners/skyblock/minions.ts b/src/cleaners/skyblock/minions.ts
index 2e51896..c77b6c5 100644
--- a/src/cleaners/skyblock/minions.ts
+++ b/src/cleaners/skyblock/minions.ts
@@ -1,5 +1,6 @@
-import { maxMinion } from '../../hypixel.js'
+import typedHypixelApi from 'typed-hypixel-api'
import * as constants from '../../constants.js'
+import { maxMinion } from '../../hypixel.js'
export interface CleanMinion {
name: string,
@@ -11,7 +12,7 @@ export interface CleanMinion {
* Clean the minions provided by Hypixel
* @param minionsRaw The minion data provided by the Hypixel API
*/
-export async function cleanMinions(member: any): Promise<CleanMinion[]> {
+export async function cleanMinions(member: typedHypixelApi.SkyBlockProfileMember): Promise<CleanMinion[]> {
const minions: CleanMinion[] = []
const processedMinionNames: Set<string> = new Set()
diff --git a/src/cleaners/skyblock/objectives.ts b/src/cleaners/skyblock/objectives.ts
index 3427f1f..2443f77 100644
--- a/src/cleaners/skyblock/objectives.ts
+++ b/src/cleaners/skyblock/objectives.ts
@@ -1,9 +1,12 @@
+import typedHypixelApi from 'typed-hypixel-api'
+
+
export interface Objective {
name: string
completed: boolean
}
-export function cleanObjectives(data: any): Objective[] {
+export function cleanObjectives(data: typedHypixelApi.SkyBlockProfileMember): Objective[] {
const rawObjectives = data?.objectives || {}
const objectives: Objective[] = []
for (const rawObjectiveName in rawObjectives) {
diff --git a/src/cleaners/skyblock/profile.ts b/src/cleaners/skyblock/profile.ts
index 03ff2eb..fe9b558 100644
--- a/src/cleaners/skyblock/profile.ts
+++ b/src/cleaners/skyblock/profile.ts
@@ -1,6 +1,6 @@
import { CleanBasicMember, CleanMember, cleanSkyBlockProfileMemberResponse, cleanSkyBlockProfileMemberResponseBasic } from './member.js'
-import { SkyBlockProfilesResponse as HypixelApiSkyBlockProfilesResponse } from 'typed-hypixel-api/build/responses/skyblock/profiles'
import { CleanMinion, combineMinionArrays, countUniqueMinions } from './minions.js'
+import typedHypixelApi from 'typed-hypixel-api'
import * as constants from '../../constants.js'
import { ApiOptions } from '../../hypixel.js'
import { Bank, cleanBank } from './bank.js'
@@ -26,22 +26,22 @@ export interface CleanFullProfileBasicMembers extends CleanProfile {
}
/** 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> {
+export async function cleanSkyblockProfileResponseLighter(data: typedHypixelApi.SkyBlockProfile | typedHypixelApi.SkyBlockProfilesResponse['profiles'][number]): 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<CleanBasicMember | null>[] = []
for (const memberUUID in data.members) {
const memberRaw = data.members[memberUUID]
- memberRaw.uuid = memberUUID
+ const memberRawWithUuid = { ...memberRaw, uuid: memberUUID }
// we pass an empty array to make it not check stats
- promises.push(cleanSkyBlockProfileMemberResponseBasic(memberRaw))
+ promises.push(cleanSkyBlockProfileMemberResponseBasic(memberRawWithUuid))
}
const cleanedMembers: CleanBasicMember[] = (await Promise.all(promises)).filter(m => m) as CleanBasicMember[]
return {
uuid: data.profile_id,
- name: data.cute_name,
+ name: 'cute_name' in data ? data.cute_name : undefined,
members: cleanedMembers,
}
}
@@ -49,12 +49,15 @@ export async function cleanSkyblockProfileResponseLighter(data): Promise<CleanPr
/**
* 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<O extends ApiOptions>(data: HypixelApiSkyBlockProfilesResponse['profiles'][number], options?: O): Promise<(O['basic'] extends true ? CleanProfile : CleanFullProfile) | null> {
+export async function cleanSkyblockProfileResponse<O extends ApiOptions>(
+ data: typedHypixelApi.SkyBlockProfile | typedHypixelApi.SkyBlockProfilesResponse['profiles'][number],
+ options?: O
+): Promise<(O['basic'] extends true ? CleanProfile : CleanFullProfile) | null> {
// We use Promise.all so it can fetch all the users at once instead of waiting for the previous promise to complete
const promises: Promise<CleanMember | null>[] = []
if (!data) return null
- const profileId: string = data.profile_id
+ const profileId = data.profile_id
for (const memberUUID in data.members) {
const memberRaw = data.members[memberUUID]
@@ -75,7 +78,7 @@ export async function cleanSkyblockProfileResponse<O extends ApiOptions>(data: H
if (options?.basic) {
const cleanProfile: CleanProfile = {
uuid: profileId,
- name: data.cute_name,
+ name: 'cute_name' in data ? data.cute_name : undefined,
members: cleanedMembers,
}
// we have to do this because of the basic checking typing
@@ -98,7 +101,7 @@ export async function cleanSkyblockProfileResponse<O extends ApiOptions>(data: H
// return more detailed info
const cleanFullProfile: CleanFullProfile = {
uuid: data.profile_id,
- name: data.cute_name,
+ name: 'cute_name' in data ? data.cute_name : undefined,
members: cleanedMembers,
bank: cleanBank(data),
minions: minions,
diff --git a/src/cleaners/skyblock/profiles.ts b/src/cleaners/skyblock/profiles.ts
index ddab078..f046e22 100644
--- a/src/cleaners/skyblock/profiles.ts
+++ b/src/cleaners/skyblock/profiles.ts
@@ -2,10 +2,9 @@ import { HypixelPlayerStatsSkyBlockProfiles } from '../../hypixelApi.js'
import {
CleanBasicProfile,
CleanFullProfile,
- CleanProfile,
cleanSkyblockProfileResponse
} from './profile.js'
-import { SkyBlockProfilesResponse } from 'typed-hypixel-api/build/responses/skyblock/profiles'
+import typedHypixelApi from 'typed-hypixel-api'
export function cleanPlayerSkyblockProfiles(rawProfiles: HypixelPlayerStatsSkyBlockProfiles | undefined): CleanBasicProfile[] {
if (!rawProfiles) return []
@@ -21,7 +20,7 @@ export function cleanPlayerSkyblockProfiles(rawProfiles: HypixelPlayerStatsSkyBl
}
/** Convert an array of raw profiles into clean profiles */
-export async function cleanSkyblockProfilesResponse(data: SkyBlockProfilesResponse['profiles']): Promise<CleanFullProfile[]> {
+export async function cleanSkyblockProfilesResponse(data: typedHypixelApi.SkyBlockProfilesResponse['profiles']): Promise<CleanFullProfile[]> {
const promises: Promise<CleanFullProfile | null>[] = []
for (const profile of data) {
promises.push(cleanSkyblockProfileResponse(profile))
diff --git a/src/cleaners/skyblock/skills.ts b/src/cleaners/skyblock/skills.ts
index 886c59c..c69acd0 100644
--- a/src/cleaners/skyblock/skills.ts
+++ b/src/cleaners/skyblock/skills.ts
@@ -1,4 +1,4 @@
-import { fetchSkillXp, fetchSkillXpEasier } from '../../constants.js'
+import typedHypixelApi from 'typed-hypixel-api'
export interface Skill {
name: string
@@ -13,7 +13,7 @@ export interface Skill {
// the highest level you can have in each skill
// numbers taken from https://hypixel-skyblock.fandom.com/wiki/Skills
-const skillsMaxLevel: { [ key: string ]: number } = {
+const skillsMaxLevel: { [key: string]: number } = {
farming: 60,
mining: 60,
combat: 60,
@@ -89,8 +89,8 @@ const skillXpTable = [
97972425,
104672425,
111672425 // 60
- ]
-
+]
+
const skillXpTableEasier = [
50, // 1
@@ -135,14 +135,14 @@ export function levelForSkillXp(xp: number, maxLevel: number) {
return skillLevel === -1 ? 0 : xpTable.length - skillLevel
}
-export async function cleanSkills(data: any): Promise<Skill[]> {
+export async function cleanSkills(data: typedHypixelApi.SkyBlockProfileMember): Promise<Skill[]> {
const skills: Skill[] = []
for (const item in data) {
if (item.startsWith('experience_skill_')) {
- const skillName = item.substr('experience_skill_'.length)
+ const skillName = item.slice('experience_skill_'.length)
// the amount of total xp you have in this skill
- const skillXp = data[item]
+ const skillXp: number = data[item]
const skillMaxLevel = skillsMaxLevel[skillName] ?? skillsDefaultMaxLevel
diff --git a/src/cleaners/skyblock/slayers.ts b/src/cleaners/skyblock/slayers.ts
index f4d203e..782ec95 100644
--- a/src/cleaners/skyblock/slayers.ts
+++ b/src/cleaners/skyblock/slayers.ts
@@ -1,3 +1,5 @@
+import typedHypixelApi from 'typed-hypixel-api'
+
export const slayerLevels = 5
const SLAYER_NAMES = {
@@ -29,7 +31,7 @@ export interface SlayerData {
bosses: Slayer[]
}
-export function cleanSlayers(data: any): SlayerData {
+export function cleanSlayers(data: typedHypixelApi.SkyBlockProfileMember): SlayerData {
const slayers: Slayer[] = []
const slayersDataRaw = data?.slayer_bosses
diff --git a/src/cleaners/skyblock/stats.ts b/src/cleaners/skyblock/stats.ts
index cce1561..645f879 100644
--- a/src/cleaners/skyblock/stats.ts
+++ b/src/cleaners/skyblock/stats.ts
@@ -1,4 +1,7 @@
-const statCategories: { [ key: string ]: string[] | null } = { // sorted in order of importance
+import typedHypixelApi from 'typed-hypixel-api'
+
+
+const statCategories: { [key: string]: string[] | null } = { // sorted in order of importance
'deaths': ['deaths_', 'deaths'],
'kills': ['kills_', 'kills'],
'fishing': ['items_fished_', 'items_fished', 'shredder_'],
@@ -76,7 +79,7 @@ export interface StatItem {
}
export function getStatUnit(name: string): string | null {
- for (const [ unitName, statMatchers ] of Object.entries(statUnits)) {
+ for (const [unitName, statMatchers] of Object.entries(statUnits)) {
for (const statMatch of statMatchers) {
let trailingEnd = statMatch[0] === '_'
let trailingStart = statMatch.substr(-1) === '_'
@@ -92,7 +95,7 @@ export function getStatUnit(name: string): string | null {
}
-export function cleanProfileStats(data: any): StatItem[] {
+export function cleanProfileStats(data: typedHypixelApi.SkyBlockProfileMember): StatItem[] {
// TODO: add type for statsRaw (probably in hypixelApi.ts since its coming from there)
const stats: StatItem[] = []
diff --git a/src/cleaners/skyblock/zones.ts b/src/cleaners/skyblock/zones.ts
index b07c542..556a2e7 100644
--- a/src/cleaners/skyblock/zones.ts
+++ b/src/cleaners/skyblock/zones.ts
@@ -1,3 +1,4 @@
+import typedHypixelApi from 'typed-hypixel-api'
import * as constants from '../../constants.js'
export interface Zone {
@@ -6,7 +7,7 @@ export interface Zone {
}
-export async function cleanVisitedZones(data: any): Promise<Zone[]> {
+export async function cleanVisitedZones(data: typedHypixelApi.SkyBlockProfileMember): Promise<Zone[]> {
const rawZones = data?.visited_zones || []
// TODO: store all the zones that exist in SkyBlock, add add those to the array with visited being false
const zones: Zone[] = []
@@ -19,7 +20,7 @@ export async function cleanVisitedZones(data: any): Promise<Zone[]> {
visited: rawZones.includes(rawZoneName)
})
}
-
+
// if this user somehow has a zone that we don't know about, just add it to zones
for (const rawZoneName of rawZones) {
if (!knownZones.includes(rawZoneName)) {