From 9bdb14e13ae1f683ab4a48bf80883d024942e414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 14 Oct 2023 11:15:42 -0500 Subject: [PATCH] feat: core chunk 4 --- src/LEGACY_core/blitz/resolveTankId.ts | 9 ++++++--- src/LEGACY_core/discord/addTierChoices.ts | 2 +- src/LEGACY_core/discord/autocompleteClan.ts | 4 ++-- src/LEGACY_core/discord/autocompleteUsername.ts | 4 ++-- src/LEGACY_core/discord/getFiltersFromCommand.ts | 7 +++++-- src/LEGACY_core/discord/resolveClanFromCommand.ts | 4 ++-- src/LEGACY_core/discord/resolvePlayerFromCommand.ts | 4 ++-- src/app/embeds/session/page.tsx | 2 +- src/app/tools/session/page.tsx | 8 ++++---- src/commands/fullStats.tsx | 2 +- src/commands/ratings.tsx | 2 +- src/commands/searchPlayers.ts | 5 ++++- src/commands/stats.tsx | 2 +- .../AllStatsOverview/components/WN8Display/index.tsx | 2 +- src/components/GenericAllStats/index.tsx | 2 +- src/core/blitz/getRatingsInfo.ts | 2 +- .../blitz/regionToRegionSubdomain.ts | 0 .../blitz/searchClansAcrossRegions.ts} | 7 +++++-- .../blitz/searchPlayersAcrossRegions.ts} | 7 +++++-- .../blitz => core/math}/numberToRomanNumeral.ts | 0 .../blitz => core/statistics}/getWN8Percentile.ts | 0 src/renderers/today.tsx | 2 +- 22 files changed, 46 insertions(+), 31 deletions(-) rename src/{LEGACY_core => core}/blitz/regionToRegionSubdomain.ts (100%) rename src/{LEGACY_core/blitz/listClans.ts => core/blitz/searchClansAcrossRegions.ts} (91%) rename src/{LEGACY_core/blitz/listPlayers.ts => core/blitz/searchPlayersAcrossRegions.ts} (93%) rename src/{LEGACY_core/blitz => core/math}/numberToRomanNumeral.ts (100%) rename src/{LEGACY_core/blitz => core/statistics}/getWN8Percentile.ts (100%) diff --git a/src/LEGACY_core/blitz/resolveTankId.ts b/src/LEGACY_core/blitz/resolveTankId.ts index a7bb5d8a2..876c4aa0f 100644 --- a/src/LEGACY_core/blitz/resolveTankId.ts +++ b/src/LEGACY_core/blitz/resolveTankId.ts @@ -2,11 +2,14 @@ import { go } from 'fuzzysort'; import throwError from '../node/throwError'; import { TANKS, tankopedia } from './tankopedia'; -export default async function resolveTankId(tank: string) { - const number = parseInt(tank); +export default async function resolveTankId(tank: string | number) { + const number = typeof tank === 'string' ? parseInt(tank) : tank; if (Number.isNaN(number)) { - const searchResult = go(tank, await TANKS, { keys: ['name'], limit: 1 }); + const searchResult = go(`${tank}`, await TANKS, { + keys: ['name'], + limit: 1, + }); if (searchResult.length === 0) { throw throwError( diff --git a/src/LEGACY_core/discord/addTierChoices.ts b/src/LEGACY_core/discord/addTierChoices.ts index 04958d3c6..f6913427e 100644 --- a/src/LEGACY_core/discord/addTierChoices.ts +++ b/src/LEGACY_core/discord/addTierChoices.ts @@ -1,6 +1,6 @@ import { SlashCommandStringOption } from 'discord.js'; import { range } from 'lodash'; -import numberToRomanNumeral from '../blitz/numberToRomanNumeral'; +import numberToRomanNumeral from '../../core/math/numberToRomanNumeral'; export default function addTierChoices(option: SlashCommandStringOption) { return option diff --git a/src/LEGACY_core/discord/autocompleteClan.ts b/src/LEGACY_core/discord/autocompleteClan.ts index 1b9cef647..3de7c8598 100644 --- a/src/LEGACY_core/discord/autocompleteClan.ts +++ b/src/LEGACY_core/discord/autocompleteClan.ts @@ -4,7 +4,7 @@ import { CacheType, } from 'discord.js'; import { REGION_NAMES } from '../../constants/regions'; -import listClans from '../blitz/listClans'; +import searchClansAcrossRegions from '../../core/blitz/searchClansAcrossRegions'; export default async function autocompleteClan( interaction: AutocompleteInteraction, @@ -12,7 +12,7 @@ export default async function autocompleteClan( const focusedOption = interaction.options.getFocused(true); if (focusedOption.name !== 'clan') return; if (focusedOption.value.length < 2) return interaction.respond([]); - const players = await listClans(focusedOption.value); + const players = await searchClansAcrossRegions(focusedOption.value); await interaction.respond( players diff --git a/src/LEGACY_core/discord/autocompleteUsername.ts b/src/LEGACY_core/discord/autocompleteUsername.ts index 753cfe516..b29c860f9 100644 --- a/src/LEGACY_core/discord/autocompleteUsername.ts +++ b/src/LEGACY_core/discord/autocompleteUsername.ts @@ -4,14 +4,14 @@ import { CacheType, } from 'discord.js'; import { REGION_NAMES } from '../../constants/regions'; -import listPlayers from '../blitz/listPlayers'; +import searchPlayersAcrossRegions from '../../core/blitz/searchPlayersAcrossRegions'; export default async function autocompleteUsername( interaction: AutocompleteInteraction, ) { const focusedOption = interaction.options.getFocused(true); if (focusedOption.name !== 'username') return; - const players = await listPlayers(focusedOption.value); + const players = await searchPlayersAcrossRegions(focusedOption.value); try { await interaction.respond( diff --git a/src/LEGACY_core/discord/getFiltersFromCommand.ts b/src/LEGACY_core/discord/getFiltersFromCommand.ts index 5a01d9084..fab2cc795 100644 --- a/src/LEGACY_core/discord/getFiltersFromCommand.ts +++ b/src/LEGACY_core/discord/getFiltersFromCommand.ts @@ -1,10 +1,13 @@ import { ChatInputCommandInteraction } from 'discord.js'; import { TreeTypeString } from '../../components/Tanks'; import { StatFilters } from '../../core/statistics/filterStats'; +import resolveTankId from '../blitz/resolveTankId'; -export function getFiltersFromCommand( +export async function getFiltersFromCommand( interaction: ChatInputCommandInteraction, ) { + const tankRaw = interaction.options.getString('tank'); + return { nation: interaction.options.getString('nation') ?? undefined, tier: parseInt(interaction.options.getString('tier') ?? '0') || undefined, @@ -13,6 +16,6 @@ export function getFiltersFromCommand( (interaction.options.getString('tree-type') as | TreeTypeString | undefined) ?? undefined, - tank: parseInt(interaction.options.getString('tank') ?? '0') || undefined, + tank: tankRaw === null ? undefined : await resolveTankId(tankRaw), } satisfies StatFilters; } diff --git a/src/LEGACY_core/discord/resolveClanFromCommand.ts b/src/LEGACY_core/discord/resolveClanFromCommand.ts index 0e47d700b..479e7b96f 100644 --- a/src/LEGACY_core/discord/resolveClanFromCommand.ts +++ b/src/LEGACY_core/discord/resolveClanFromCommand.ts @@ -1,6 +1,6 @@ import { ChatInputCommandInteraction } from 'discord.js'; import { Region } from '../../constants/regions'; -import listClans from '../blitz/listClans'; +import searchClansAcrossRegions from '../../core/blitz/searchClansAcrossRegions'; import throwError from '../node/throwError'; import { serverAndIdPattern } from './resolvePlayerFromCommand'; @@ -13,7 +13,7 @@ export default async function resolveClanFromCommand( const [server, accountId] = clan.split('/'); return { region: server as Region, id: Number(accountId) }; } else { - const accounts = await listClans(clan); + const accounts = await searchClansAcrossRegions(clan); if (accounts[0]) { return { region: accounts[0].region, id: accounts[0].clan_id }; diff --git a/src/LEGACY_core/discord/resolvePlayerFromCommand.ts b/src/LEGACY_core/discord/resolvePlayerFromCommand.ts index 0b34a317f..f00cde535 100644 --- a/src/LEGACY_core/discord/resolvePlayerFromCommand.ts +++ b/src/LEGACY_core/discord/resolvePlayerFromCommand.ts @@ -1,7 +1,7 @@ import { CacheType, ChatInputCommandInteraction } from 'discord.js'; import markdownEscape from 'markdown-escape'; import { Region } from '../../constants/regions'; -import listPlayers from '../blitz/listPlayers'; +import searchPlayersAcrossRegions from '../../core/blitz/searchPlayersAcrossRegions'; import { getBlitzFromDiscord } from '../cockroackdb/discordBlitz'; import throwError from '../node/throwError'; @@ -26,7 +26,7 @@ export default async function resolvePlayerFromCommand( id: Number(accountId), } satisfies ResolvedPlayer; } else { - const accounts = await listPlayers(commandUsername); + const accounts = await searchPlayersAcrossRegions(commandUsername); if (accounts[0]) { return { diff --git a/src/app/embeds/session/page.tsx b/src/app/embeds/session/page.tsx index 850e818ef..d585880bd 100644 --- a/src/app/embeds/session/page.tsx +++ b/src/app/embeds/session/page.tsx @@ -2,7 +2,6 @@ import { ContextMenu } from '@radix-ui/themes'; import { useEffect, useState } from 'react'; -import getWN8Percentile from '../../../LEGACY_core/blitz/getWN8Percentile'; import { TankopediaEntry, tankopedia, @@ -14,6 +13,7 @@ import { WARGAMING_APPLICATION_ID } from '../../../constants/wargamingApplicatio import fetchBlitz from '../../../core/blitz/fetchWargaming'; import calculateWN8 from '../../../core/statistics/calculateWN8'; import { deltaTankStats } from '../../../core/statistics/deltaTankStats'; +import getWN8Percentile from '../../../core/statistics/getWN8Percentile'; import { useSession } from '../../../stores/session'; import { IndividualTankStats, TanksStats } from '../../../types/tanksStats'; import { CustomColumnDisplay } from '../../tools/session/components/CustomColumn'; diff --git a/src/app/tools/session/page.tsx b/src/app/tools/session/page.tsx index 500424052..c738f836f 100644 --- a/src/app/tools/session/page.tsx +++ b/src/app/tools/session/page.tsx @@ -18,13 +18,13 @@ import { } from '@radix-ui/themes'; import { debounce } from 'lodash'; import { ChangeEvent, useRef, useState } from 'react'; -import listPlayers, { - AccountListWithServer, -} from '../../../LEGACY_core/blitz/listPlayers'; import PageWrapper from '../../../components/PageWrapper'; import { REGION_NAMES, Region } from '../../../constants/regions'; import { WARGAMING_APPLICATION_ID } from '../../../constants/wargamingApplicationID'; import fetchBlitz from '../../../core/blitz/fetchWargaming'; +import searchPlayersAcrossRegions, { + AccountListWithServer, +} from '../../../core/blitz/searchPlayersAcrossRegions'; import { useSession } from '../../../stores/session'; import { NormalizedTankStats, TanksStats } from '../../../types/tanksStats'; import SessionPage from '../../embeds/session/page'; @@ -40,7 +40,7 @@ export default function Page() { const handleChange = debounce( async (event: ChangeEvent) => { if (event.target.value) { - setSearchResults(await listPlayers(event.target.value)); + setSearchResults(await searchPlayersAcrossRegions(event.target.value)); } else { setSearchResults(undefined); setShowSearchResults(false); diff --git a/src/commands/fullStats.tsx b/src/commands/fullStats.tsx index 1e46f16ea..ef6b0bbe0 100644 --- a/src/commands/fullStats.tsx +++ b/src/commands/fullStats.tsx @@ -82,7 +82,7 @@ export const fullStatsCommand = new Promise( async handler(interaction) { const player = await resolvePlayerFromCommand(interaction); const period = resolvePeriodFromCommand(player.region, interaction); - const filters = getFiltersFromCommand(interaction); + const filters = await getFiltersFromCommand(interaction); const path = interactionToURL(interaction, { ...player, ...getCustomPeriodParams(interaction), diff --git a/src/commands/ratings.tsx b/src/commands/ratings.tsx index a5354cd99..693105e45 100644 --- a/src/commands/ratings.tsx +++ b/src/commands/ratings.tsx @@ -5,7 +5,6 @@ import { SlashCommandSubcommandGroupBuilder, } from 'discord.js'; import { BlitzkriegRatingsLeaderboard } from '../../scripts/buildRatingsLeaderboard'; -import regionToRegionSubdomain from '../LEGACY_core/blitz/regionToRegionSubdomain'; import getMidnightLeaderboard, { DATABASE_REPO, } from '../LEGACY_core/database/getMidnightLeaderboard'; @@ -23,6 +22,7 @@ import { REGION_NAMES_SHORT, Region } from '../constants/regions'; import { getAccountInfo } from '../core/blitz/getAccountInfo'; import { getClanAccountInfo } from '../core/blitz/getClanAccountInfo'; import getRatingsInfo from '../core/blitz/getRatingsInfo'; +import regionToRegionSubdomain from '../core/blitz/regionToRegionSubdomain'; import getArchivedRatingsInfo from '../core/blitzkrieg/getArchivedRatingsInfo'; import { CommandRegistryRaw } from '../events/interactionCreate'; diff --git a/src/commands/searchPlayers.ts b/src/commands/searchPlayers.ts index 7673482ef..584334fcd 100644 --- a/src/commands/searchPlayers.ts +++ b/src/commands/searchPlayers.ts @@ -1,12 +1,15 @@ import { SlashCommandBuilder } from 'discord.js'; import markdownEscape from 'markdown-escape'; -import { AccountList, usernamePattern } from '../LEGACY_core/blitz/listPlayers'; import addRegionChoices from '../LEGACY_core/discord/addRegionChoices'; import addUsernameChoices from '../LEGACY_core/discord/addUsernameChoices'; import embedInfo from '../LEGACY_core/discord/embedInfo'; import { REGION_NAMES, Region } from '../constants/regions'; import { WARGAMING_APPLICATION_ID } from '../constants/wargamingApplicationID'; import fetchBlitz from '../core/blitz/fetchWargaming'; +import { + AccountList, + usernamePattern, +} from '../core/blitz/searchPlayersAcrossRegions'; import { CommandRegistry } from '../events/interactionCreate'; export const searchPlayersCommand: CommandRegistry = { diff --git a/src/commands/stats.tsx b/src/commands/stats.tsx index 42d721ddd..316060ab1 100644 --- a/src/commands/stats.tsx +++ b/src/commands/stats.tsx @@ -74,7 +74,7 @@ export const statsCommand = new Promise(async (resolve) => { async handler(interaction) { const player = await resolvePlayerFromCommand(interaction); const period = resolvePeriodFromCommand(player.region, interaction); - const filters = getFiltersFromCommand(interaction); + const filters = await getFiltersFromCommand(interaction); const path = interactionToURL(interaction, { ...player, ...getCustomPeriodParams(interaction), diff --git a/src/components/AllStatsOverview/components/WN8Display/index.tsx b/src/components/AllStatsOverview/components/WN8Display/index.tsx index 5af4f40b1..6e8fe8aba 100644 --- a/src/components/AllStatsOverview/components/WN8Display/index.tsx +++ b/src/components/AllStatsOverview/components/WN8Display/index.tsx @@ -1,5 +1,5 @@ import { Percentile } from '../../../../constants/percentiles'; -import getWN8Percentile from '../../../../LEGACY_core/blitz/getWN8Percentile'; +import getWN8Percentile from '../../../../core/statistics/getWN8Percentile'; import { theme } from '../../../../stitches.config'; import { PERCENTILE_COLORS } from '../../../PercentileIndicator'; import { Glow } from './components/Glow'; diff --git a/src/components/GenericAllStats/index.tsx b/src/components/GenericAllStats/index.tsx index e664c8282..aa8493d16 100644 --- a/src/components/GenericAllStats/index.tsx +++ b/src/components/GenericAllStats/index.tsx @@ -1,5 +1,5 @@ import { AllStats, SupplementaryStats } from '../../core/blitz/getAccountInfo'; -import getWN8Percentile from '../../LEGACY_core/blitz/getWN8Percentile'; +import getWN8Percentile from '../../core/statistics/getWN8Percentile'; import isNumber from '../../LEGACY_core/node/isNumber'; import { Card } from './components/Card'; import { Root } from './components/Root'; diff --git a/src/core/blitz/getRatingsInfo.ts b/src/core/blitz/getRatingsInfo.ts index ddb3c641a..56588cdac 100644 --- a/src/core/blitz/getRatingsInfo.ts +++ b/src/core/blitz/getRatingsInfo.ts @@ -1,6 +1,6 @@ import { RatingsInfo } from '../../commands/ratings'; import { Region } from '../../constants/regions'; -import regionToRegionSubdomain from '../../LEGACY_core/blitz/regionToRegionSubdomain'; +import regionToRegionSubdomain from './regionToRegionSubdomain'; export default async function getRatingsInfo(region: Region) { const response = await fetch( diff --git a/src/LEGACY_core/blitz/regionToRegionSubdomain.ts b/src/core/blitz/regionToRegionSubdomain.ts similarity index 100% rename from src/LEGACY_core/blitz/regionToRegionSubdomain.ts rename to src/core/blitz/regionToRegionSubdomain.ts diff --git a/src/LEGACY_core/blitz/listClans.ts b/src/core/blitz/searchClansAcrossRegions.ts similarity index 91% rename from src/LEGACY_core/blitz/listClans.ts rename to src/core/blitz/searchClansAcrossRegions.ts index 3625c12a4..1e62aa981 100644 --- a/src/LEGACY_core/blitz/listClans.ts +++ b/src/core/blitz/searchClansAcrossRegions.ts @@ -1,13 +1,16 @@ import { Region } from '../../constants/regions'; import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID'; -import fetchBlitz from '../../core/blitz/fetchWargaming'; import { Clan, ClanList } from '../../types/clanList'; +import fetchBlitz from './fetchWargaming'; export type ClanListWithRegion = (Clan & { region: 'com' | 'eu' | 'asia'; })[]; -export default async function listClans(search: string, limit = 9) { +export default async function searchClansAcrossRegions( + search: string, + limit = 9, +) { const trimmed = search.trim(); if (trimmed.length < 3 && trimmed.length > 100) return []; const normalizedLimit = Math.round(limit / 3); diff --git a/src/LEGACY_core/blitz/listPlayers.ts b/src/core/blitz/searchPlayersAcrossRegions.ts similarity index 93% rename from src/LEGACY_core/blitz/listPlayers.ts rename to src/core/blitz/searchPlayersAcrossRegions.ts index c0ca7b393..b24315ee1 100644 --- a/src/LEGACY_core/blitz/listPlayers.ts +++ b/src/core/blitz/searchPlayersAcrossRegions.ts @@ -1,6 +1,6 @@ import { Region } from '../../constants/regions'; import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID'; -import fetchBlitz from '../../core/blitz/fetchWargaming'; +import fetchBlitz from './fetchWargaming'; interface Account { nickname: string; @@ -14,7 +14,10 @@ export type AccountListWithServer = (Account & { export const usernamePattern = /^[a-zA-Z0-9_]{3,24}$/; export const usernamePatternWithoutPosition = /[a-zA-Z0-9_]{3,24}/; -export default async function listPlayers(search: string, limit = 9) { +export default async function searchPlayersAcrossRegions( + search: string, + limit = 9, +) { const trimmedSearch = search.trim(); const normalizedLimit = Math.round(limit / 3); const encodedSearch = encodeURIComponent(trimmedSearch); diff --git a/src/LEGACY_core/blitz/numberToRomanNumeral.ts b/src/core/math/numberToRomanNumeral.ts similarity index 100% rename from src/LEGACY_core/blitz/numberToRomanNumeral.ts rename to src/core/math/numberToRomanNumeral.ts diff --git a/src/LEGACY_core/blitz/getWN8Percentile.ts b/src/core/statistics/getWN8Percentile.ts similarity index 100% rename from src/LEGACY_core/blitz/getWN8Percentile.ts rename to src/core/statistics/getWN8Percentile.ts diff --git a/src/renderers/today.tsx b/src/renderers/today.tsx index a337945e6..cfc6f38cc 100644 --- a/src/renderers/today.tsx +++ b/src/renderers/today.tsx @@ -1,4 +1,3 @@ -import getWN8Percentile from '../LEGACY_core/blitz/getWN8Percentile'; import resolveTankName from '../LEGACY_core/blitz/resolveTankName'; import sumStats from '../LEGACY_core/blitz/sumStats'; import { tankopedia } from '../LEGACY_core/blitz/tankopedia'; @@ -16,6 +15,7 @@ import { getClanAccountInfo } from '../core/blitz/getClanAccountInfo'; import getTankStats from '../core/blitz/getTankStats'; import getTreeType from '../core/blitz/getTreeType'; import calculateWN8 from '../core/statistics/calculateWN8'; +import getWN8Percentile from '../core/statistics/getWN8Percentile'; import { PossiblyPromise } from '../types/possiblyPromise'; export default async function today(