From 4fd4e4fdbd444466fd22827327eb36da1219eb9f Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 19 Mar 2022 19:56:16 -0500 Subject: Squashed commit of the following: commit 8de482698ce3b144a5208084299733a3951d691a Author: mat Date: Sat Mar 19 19:39:21 2022 -0500 fix some issues with the typings commit e4d72e4b66c1f013dab495786041e7ce0316b0af Author: mat Date: Sat Mar 19 18:04:10 2022 -0500 Fix error when there is no slayer data commit 706d044f6791272f3f4488d03884c33fc545a806 Author: mat Date: Sat Mar 19 18:02:04 2022 -0500 Fix wrong interface commit d1cc698f4add94171004ca7039a452d38fa063b8 Merge: b490254 8843ccf Author: mat Date: Sat Mar 19 17:54:00 2022 -0500 Merge branch 'main' into breaking commit b490254510b43ca9ef9822c661f3bfeb2e9ec7ef Author: mat Date: Sat Mar 5 13:09:26 2022 -0600 change some seconds to milliseconds commit 09fc38f77faa88f7234f2496c7fd797b884cbf24 Author: mat Date: Sat Mar 5 13:04:46 2022 -0600 Update README.md commit a470363ea7e7885c5c946aca9b40f73426a0e94c Author: mat Date: Sat Mar 5 13:01:42 2022 -0600 Move `/leaderboard/` to `/leaderboards/` commit 012525036db62fbb97a56576f80c231b4127736d Author: mat Date: Sat Mar 5 13:00:06 2022 -0600 Rename collection `xp` to `amount` commit dc8ea0588ad5357257767b37737da185e4dbffd0 Author: mat Date: Sat Mar 5 12:59:20 2022 -0600 Rename visited_zones to just zones commit 6008feb15d36afd914efe98e90409327d3fc1322 Author: mat Date: Sat Mar 5 12:54:15 2022 -0600 Replace all snake_case keys with camelCase --- src/cleaners/player.ts | 2 -- src/cleaners/skyblock/collections.ts | 4 +-- src/cleaners/skyblock/election.ts | 4 +-- src/cleaners/skyblock/inventory.ts | 8 +++--- src/cleaners/skyblock/member.ts | 47 ++++++++++++++++++------------------ src/cleaners/skyblock/profile.ts | 6 ++--- src/cleaners/skyblock/slayers.ts | 4 +-- src/database.ts | 30 +++++++++++------------ src/discord.ts | 4 +++ src/hypixel.ts | 22 ++++++++++------- src/hypixelCached.ts | 8 +++--- src/index.ts | 2 +- 12 files changed, 73 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/cleaners/player.ts b/src/cleaners/player.ts index 802cdd5..1fd6f85 100644 --- a/src/cleaners/player.ts +++ b/src/cleaners/player.ts @@ -14,7 +14,6 @@ export interface CleanPlayer extends CleanBasicPlayer { rank: CleanRank socials: CleanSocialMedia profiles?: CleanBasicProfile[] - // first_join?: number } export async function cleanPlayerResponse(data: HypixelPlayer): Promise { @@ -26,7 +25,6 @@ export async function cleanPlayerResponse(data: HypixelPlayer): Promise const leaderboardInfos: { [ leaderboardName: string ]: string } = { - highest_crit_damage: 'This leaderboard is capped at the integer limit because Hypixel, look at the highest critical damage leaderboard instead.', + highest_crit_damage: 'This leaderboard is capped at the integer limit. Look at the highest critical damage leaderboard instead.', highest_critical_damage: 'uhhhhh yeah idk either', - leaderboards_count: 'This leaderboard counts how many leaderboards players are in the top 100 for.', - top_1_leaderboards_count: 'This leaderboard counts how many leaderboards players are #1 for.', + leaderboards_count: 'This leaderboard counts how many leaderboards a player is in the top 100 spot for.', + top_1_leaderboards_count: 'This leaderboard counts how many leaderboards a player is in the #1 spot for.', skill_social: 'This leaderboard is inaccurate because Hypixel only shows social skill data on some API profiles.' } @@ -141,7 +141,7 @@ function getMemberCollectionAttributes(member: CleanMember): StringNumber { const collectionAttributes = {} for (const collection of member.collections) { const collectionLeaderboardName = `collection_${collection.name}` - collectionAttributes[collectionLeaderboardName] = collection.xp + collectionAttributes[collectionLeaderboardName] = collection.amount } return collectionAttributes } @@ -162,10 +162,10 @@ function getMemberSlayerAttributes(member: CleanMember): StringNumber { } for (const slayer of member.slayers.bosses) { - slayerAttributes[`slayer_${slayer.raw_name}_total_xp`] = slayer.xp - slayerAttributes[`slayer_${slayer.raw_name}_total_kills`] = slayer.kills + slayerAttributes[`slayer_${slayer.rawName}_total_xp`] = slayer.xp + slayerAttributes[`slayer_${slayer.rawName}_total_kills`] = slayer.kills for (const tier of slayer.tiers) { - slayerAttributes[`slayer_${slayer.raw_name}_${tier.tier}_kills`] = tier.kills + slayerAttributes[`slayer_${slayer.rawName}_${tier.tier}_kills`] = tier.kills } } @@ -187,17 +187,17 @@ function getMemberLeaderboardAttributes(member: CleanMember): StringNumber { // slayer leaderboards ...getMemberSlayerAttributes(member), - fairy_souls: member.fairy_souls.total, - first_join: member.first_join, + fairy_souls: member.fairySouls.total, + first_join: member.firstJoin, purse: member.purse, - visited_zones: member.visited_zones.length, + visited_zones: member.zones.filter(z => z.visited).length, } } function getProfileLeaderboardAttributes(profile: CleanFullProfile): StringNumber { // if you want to add a new leaderboard for member attributes, add it here (and getAllLeaderboardAttributes) return { - unique_minions: profile.minion_count + unique_minions: profile.minionCount } } @@ -618,8 +618,8 @@ export async function updateDatabaseMember(member: CleanMember, profile: CleanFu await constants.addStats(Object.keys(member.rawHypixelStats)) await constants.addCollections(member.collections.map(coll => coll.name)) await constants.addSkills(member.skills.map(skill => skill.name)) - await constants.addZones(member.visited_zones.map(zone => zone.name)) - await constants.addSlayers(member.slayers.bosses.map(s => s.raw_name)) + await constants.addZones(member.zones.map(zone => zone.name)) + await constants.addSlayers(member.slayers.bosses.map(s => s.rawName)) if (debug) console.debug('done constants..') diff --git a/src/discord.ts b/src/discord.ts index 16ca45f..7871fa3 100644 --- a/src/discord.ts +++ b/src/discord.ts @@ -15,6 +15,10 @@ export interface TokenResponse { token_type: string } +/** + * The information about the Discord user that's directly returned by the + * Discord API + */ export interface DiscordUser { id: string username: string diff --git a/src/hypixel.ts b/src/hypixel.ts index a9a0233..285ac4e 100644 --- a/src/hypixel.ts +++ b/src/hypixel.ts @@ -129,8 +129,8 @@ export async function fetchUser({ user, uuid, username }: UserAny, included: Inc if (includeProfiles) { for (const profile of profilesData!) { const member = profile.members?.find(member => member.uuid === uuid) - if (member && member.last_save > lastOnline) { - lastOnline = member.last_save + if (member && member.lastSave > lastOnline) { + lastOnline = member.lastSave activeProfile = profile } } @@ -167,11 +167,12 @@ export async function fetchMemberProfile(user: string, profile: string, customiz if (!profileUuid) return null if (!playerUuid) return null - const player = await cached.fetchPlayer(playerUuid) + const player: CleanPlayer | null = await cached.fetchPlayer(playerUuid) if (!player) return null // this should never happen, but if it does just return null - const cleanProfile = await cached.fetchProfile(playerUuid, profileUuid) as CleanFullProfileBasicMembers + const cleanProfile = await cached.fetchProfile(playerUuid, profileUuid) + if (!cleanProfile) return null const member = cleanProfile.members.find(m => m.uuid === playerUuid) if (!member) return null // this should never happen, but if it does just return null @@ -181,13 +182,16 @@ export async function fetchMemberProfile(user: string, profile: string, customiz return { uuid: m.uuid, username: m.username, - first_join: m.first_join, - last_save: m.last_save, + firstJoin: m.firstJoin, + lastSave: m.lastSave, rank: m.rank } }) - cleanProfile.members = simpleMembers + const cleanProfileBasicMembers: CleanFullProfileBasicMembers = { + ...cleanProfile, + members: simpleMembers + } let websiteAccount: WithId | null = null @@ -203,7 +207,7 @@ export async function fetchMemberProfile(user: string, profile: string, customiz // add all other data relating to the hypixel player, such as username, rank, etc ...player }, - profile: cleanProfile, + profile: cleanProfileBasicMembers, customization: websiteAccount?.customization } } @@ -301,7 +305,7 @@ export async function fetchElection(): Promise { cachedElectionData = election // updates every 10 minutes - nextElectionUpdate = new Date((election.last_updated + 10 * 60) * 1000) + nextElectionUpdate = new Date((election.lastUpdated + 10 * 60) * 1000) return election } diff --git a/src/hypixelCached.ts b/src/hypixelCached.ts index 3130f41..3d8f04c 100644 --- a/src/hypixelCached.ts +++ b/src/hypixelCached.ts @@ -233,8 +233,8 @@ export async function fetchSkyblockProfiles(playerUuid: string): Promise ({ uuid: m.uuid, username: m.username, - last_save: m.last_save, - first_join: m.first_join, + lastSave: m.lastSave, + firstJoin: m.firstJoin, rank: m.rank, })), name: profile.name diff --git a/src/index.ts b/src/index.ts index 6608188..fe35009 100644 --- a/src/index.ts +++ b/src/index.ts @@ -109,7 +109,7 @@ app.get('/player/:user/:profile/leaderboards', async (req, res) => { } }) -app.get('/leaderboard/:name', async (req, res) => { +app.get('/leaderboards/:name', async (req, res) => { try { res.json( await fetchLeaderboard(req.params.name) -- cgit