From 6b94d0110a52a355758432ff6cd14c80553471ea Mon Sep 17 00:00:00 2001 From: mat Date: Fri, 25 Mar 2022 21:13:13 -0500 Subject: Add typed-hypixel-api as a dep and change some code --- src/cleaners/player.ts | 4 ++-- src/cleaners/rank.ts | 10 +++++----- src/cleaners/skyblock/election.ts | 2 +- src/cleaners/skyblock/member.ts | 5 +++-- src/cleaners/skyblock/profile.ts | 15 ++++++++++----- src/cleaners/skyblock/profiles.ts | 13 ++++++++----- 6 files changed, 29 insertions(+), 20 deletions(-) (limited to 'src/cleaners') diff --git a/src/cleaners/player.ts b/src/cleaners/player.ts index 1fd6f85..6467e59 100644 --- a/src/cleaners/player.ts +++ b/src/cleaners/player.ts @@ -1,8 +1,8 @@ +import { PlayerDataResponse as HypixelApiPlayerDataResponse } from 'typed-hypixel-api/build/responses/player' import { cleanPlayerSkyblockProfiles } from './skyblock/profiles.js' import { cleanSocialMedia, CleanSocialMedia } from './socialmedia.js' import { CleanBasicProfile } from './skyblock/profile.js' import { cleanRank, CleanRank } from './rank.js' -import { HypixelPlayer } from '../hypixelApi.js' import { undashUuid } from '../util.js' export interface CleanBasicPlayer { @@ -16,7 +16,7 @@ export interface CleanPlayer extends CleanBasicPlayer { profiles?: CleanBasicProfile[] } -export async function cleanPlayerResponse(data: HypixelPlayer): Promise { +export async function cleanPlayerResponse(data: HypixelApiPlayerDataResponse['player']): Promise { // Cleans up a 'player' api response if (!data) return null // bruh diff --git a/src/cleaners/rank.ts b/src/cleaners/rank.ts index 417c8f1..ea7579e 100644 --- a/src/cleaners/rank.ts +++ b/src/cleaners/rank.ts @@ -1,7 +1,7 @@ +import { PlayerDataResponse as HypixelApiPlayerDataResponse } from 'typed-hypixel-api/build/responses/player' import { colorCodeFromName, minecraftColorCodes } from '../util.js' -import { HypixelPlayer } from '../hypixelApi.js' -const rankColors: { [ name: string ]: string } = { +const rankColors: { [name: string]: string } = { 'NONE': '7', 'VIP': 'a', 'VIP+': 'a', @@ -29,7 +29,7 @@ export function cleanRank({ rankPlusColor, rank, prefix -}: HypixelPlayer): CleanRank { +}: HypixelApiPlayerDataResponse['player']): CleanRank { let name: string | undefined let color: string let colored: string @@ -48,7 +48,7 @@ export function cleanRank({ ?? packageRank?.replace('_PLUS', '+') switch (name) { - // MVP++ is called Superstar for some reason + // MVP++ is called Superstar for some reason case 'SUPERSTAR': name = 'MVP++' break @@ -87,7 +87,7 @@ export function cleanRank({ if (bracketColor) colored = `§${bracketColor}[${rankColorPrefix}${name}§${bracketColor}]` else - colored = `${rankColorPrefix}[${name}]` + colored = `${rankColorPrefix}[${name}]` else // nons don't have a prefix colored = `${rankColorPrefix}` diff --git a/src/cleaners/skyblock/election.ts b/src/cleaners/skyblock/election.ts index a773f4a..9094e2d 100644 --- a/src/cleaners/skyblock/election.ts +++ b/src/cleaners/skyblock/election.ts @@ -39,7 +39,7 @@ function cleanCandidate(data: any, index: number): Candidate { } } -export function cleanElectionResponse(data: any): ElectionData { +export async function cleanElectionResponse(data: any): Promise { const previousCandidates = data.mayor.election.candidates.map(cleanCandidate) return { lastUpdated: data.lastUpdated, diff --git a/src/cleaners/skyblock/member.ts b/src/cleaners/skyblock/member.ts index 3430eac..e187beb 100644 --- a/src/cleaners/skyblock/member.ts +++ b/src/cleaners/skyblock/member.ts @@ -1,8 +1,9 @@ +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' import { cleanObjectives, Objective } from './objectives.js' -import { CleanBasicProfile, CleanFullProfileBasicMembers } from './profile.js' +import { CleanFullProfileBasicMembers } from './profile.js' import { cleanProfileStats, StatItem } from './stats.js' import { CleanMinion, cleanMinions } from './minions.js' import { cleanSlayers, SlayerData } from './slayers.js' @@ -53,7 +54,7 @@ export async function cleanSkyBlockProfileMemberResponseBasic(member: any): Prom } /** Cleans up a member (from skyblock/profile) */ -export async function cleanSkyBlockProfileMemberResponse(member, profileId?: string, included: Included[] | undefined = undefined): Promise { +export async function cleanSkyBlockProfileMemberResponse(member: HypixelApiProfileMember & { uuid: string }, profileId?: string, included: Included[] | undefined = undefined): Promise { // profiles.members[] const inventoriesIncluded = included === undefined || included.includes('inventories') const player = await cached.fetchPlayer(member.uuid) diff --git a/src/cleaners/skyblock/profile.ts b/src/cleaners/skyblock/profile.ts index ed85861..03ff2eb 100644 --- a/src/cleaners/skyblock/profile.ts +++ b/src/cleaners/skyblock/profile.ts @@ -1,4 +1,5 @@ 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 * as constants from '../../constants.js' import { ApiOptions } from '../../hypixel.js' @@ -48,7 +49,7 @@ export async function cleanSkyblockProfileResponseLighter(data): Promise { +export async function cleanSkyblockProfileResponse(data: HypixelApiSkyBlockProfilesResponse['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[] = [] if (!data) return null @@ -57,9 +58,9 @@ export async function cleanSkyblockProfileResponse(data: any, options?: ApiOptio for (const memberUUID in data.members) { const memberRaw = data.members[memberUUID] - memberRaw.uuid = memberUUID + const memberRawWithUuid = { ...memberRaw, uuid: memberUUID } promises.push(cleanSkyBlockProfileMemberResponse( - memberRaw, + memberRawWithUuid, profileId, [ !options?.basic ? 'stats' : undefined, @@ -72,11 +73,13 @@ export async function cleanSkyblockProfileResponse(data: any, options?: ApiOptio const cleanedMembers: CleanMember[] = (await Promise.all(promises)).filter(m => m) as CleanMember[] if (options?.basic) { - return { + const cleanProfile: CleanProfile = { uuid: profileId, name: data.cute_name, members: cleanedMembers, } + // we have to do this because of the basic checking typing + return cleanProfile as any } const memberMinions: CleanMinion[][] = [] @@ -93,7 +96,7 @@ export async function cleanSkyblockProfileResponse(data: any, options?: ApiOptio await constants.setConstantValues({ max_minions: uniqueMinions }) // return more detailed info - return { + const cleanFullProfile: CleanFullProfile = { uuid: data.profile_id, name: data.cute_name, members: cleanedMembers, @@ -102,6 +105,8 @@ export async function cleanSkyblockProfileResponse(data: any, options?: ApiOptio minionCount: uniqueMinions, maxUniqueMinions: maxUniqueMinions ?? 0, } + // we have to do this because of the basic checking typing + return cleanFullProfile as any } /** A basic profile that only includes the profile uuid and name */ diff --git a/src/cleaners/skyblock/profiles.ts b/src/cleaners/skyblock/profiles.ts index 20c2104..ddab078 100644 --- a/src/cleaners/skyblock/profiles.ts +++ b/src/cleaners/skyblock/profiles.ts @@ -5,8 +5,11 @@ import { CleanProfile, cleanSkyblockProfileResponse } from './profile.js' +import { SkyBlockProfilesResponse } from 'typed-hypixel-api/build/responses/skyblock/profiles' + +export function cleanPlayerSkyblockProfiles(rawProfiles: HypixelPlayerStatsSkyBlockProfiles | undefined): CleanBasicProfile[] { + if (!rawProfiles) return [] -export function cleanPlayerSkyblockProfiles(rawProfiles: HypixelPlayerStatsSkyBlockProfiles): CleanBasicProfile[] { let profiles: CleanBasicProfile[] = [] for (const profile of Object.values(rawProfiles ?? {})) { profiles.push({ @@ -18,11 +21,11 @@ export function cleanPlayerSkyblockProfiles(rawProfiles: HypixelPlayerStatsSkyBl } /** Convert an array of raw profiles into clean profiles */ -export async function cleanSkyblockProfilesResponse(data: any[]): Promise { - const promises: Promise[] = [] - for (const profile of data ?? []) { +export async function cleanSkyblockProfilesResponse(data: SkyBlockProfilesResponse['profiles']): Promise { + const promises: Promise[] = [] + for (const profile of data) { promises.push(cleanSkyblockProfileResponse(profile)) } - const cleanedProfiles: CleanProfile[] = (await Promise.all(promises)).filter(p => p) as CleanProfile[] + const cleanedProfiles: CleanFullProfile[] = (await Promise.all(promises)).filter((p): p is CleanFullProfile => p !== null) return cleanedProfiles } -- cgit