diff --git a/src/commands/eligible.ts b/src/commands/eligible.ts index d4dd2a2c2..5438362e2 100644 --- a/src/commands/eligible.ts +++ b/src/commands/eligible.ts @@ -1,5 +1,5 @@ import { SlashCommandBuilder } from 'discord.js'; -import getWN8 from '../core/blitz/getWN8.js'; +import calculateWN8 from '../core/blitz/calculateWN8.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import sumStats from '../core/blitz/sumStats.js'; import { tankopedia } from '../core/blitz/tankopedia.js'; @@ -79,7 +79,7 @@ export default { // edge case where new tanks don't have averages if (tankAverages[tankId]) { - const tankWN8 = getWN8(tankAverages[tankId].all, stats); + const tankWN8 = calculateWN8(tankAverages[tankId].all, stats); if (isNaN(tankWN8)) return accumulator; return accumulator + tankWN8 * stats.battles; diff --git a/src/commands/inactive.tsx b/src/commands/inactive.tsx index 6e9dd397b..dc52d8163 100644 --- a/src/commands/inactive.tsx +++ b/src/commands/inactive.tsx @@ -36,7 +36,7 @@ export default { async handler(interaction) { const clanName = interaction.options.getString('clan')!; - const { server, id } = await getBlitzClan(interaction, clanName); + const { server, id } = await getBlitzClan(clanName); const threshold = interaction.options.getNumber('threshold')! ?? DEFAULT_THRESHOLD; const time = new Date().getTime() / 1000; diff --git a/src/commands/searchplayers.ts b/src/commands/searchplayers.ts index afb67450f..f0d6a13ce 100644 --- a/src/commands/searchplayers.ts +++ b/src/commands/searchplayers.ts @@ -2,7 +2,7 @@ import { SlashCommandBuilder } from 'discord.js'; import markdownEscape from 'markdown-escape'; import { BLITZ_SERVERS, BlitzServer } from '../constants/servers.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; -import { usernamePattern } from '../core/blitz/listAccountsPanServer.js'; +import { usernamePattern } from '../core/blitz/listPlayers.js'; import addServerChoices from '../core/discord/addServerChoices.js'; import addUsernameOption from '../core/discord/addUsernameOption.js'; import infoEmbed from '../core/discord/infoEmbed.js'; diff --git a/src/core/blitz/getWN8.ts b/src/core/blitz/calculateWN8.ts similarity index 94% rename from src/core/blitz/getWN8.ts rename to src/core/blitz/calculateWN8.ts index 86da436f9..850c2f6ea 100644 --- a/src/core/blitz/getWN8.ts +++ b/src/core/blitz/calculateWN8.ts @@ -3,7 +3,7 @@ import { AllStats } from '../../types/accountInfo.js'; /** * Formula from https://web.archive.org/web/20190105064817/http://wiki.wnefficiency.net/pages/WN8 */ -export default function getWN8(expected: AllStats, average: AllStats) { +export default function calculateWN8(expected: AllStats, average: AllStats) { const avgDmg = average.damage_dealt / average.battles; const avgSpot = average.spotted / average.battles; const avgFrag = average.frags / average.battles; diff --git a/src/core/blitz/getBlitzClan.ts b/src/core/blitz/getBlitzClan.ts index 908950824..3e1cf5b62 100644 --- a/src/core/blitz/getBlitzClan.ts +++ b/src/core/blitz/getBlitzClan.ts @@ -1,18 +1,14 @@ -import { CacheType, ChatInputCommandInteraction } from 'discord.js'; import { BlitzServer } from '../../constants/servers.js'; import { serverAndIdPattern } from '../discord/resolvePlayerFromCommand.js'; import errorWithCause from '../node/errorWithCause.js'; -import listClansPanServer from './listClansPanServer.js'; +import listClans from './listClans.js'; -export default async function getBlitzClan( - interaction: ChatInputCommandInteraction, - clan: string, -) { +export default async function getBlitzClan(clan: string) { if (serverAndIdPattern.test(clan)) { const [server, accountId] = clan.split('/'); return { server: server as BlitzServer, id: Number(accountId) }; } else { - const accounts = await listClansPanServer(clan); + const accounts = await listClans(clan); if (accounts[0]) { return { server: accounts[0].server, id: accounts[0].clan_id }; diff --git a/src/core/blitz/getWargamingResponse.ts b/src/core/blitz/getWargamingResponse.ts index 3d13701ab..76b012190 100644 --- a/src/core/blitz/getWargamingResponse.ts +++ b/src/core/blitz/getWargamingResponse.ts @@ -1,6 +1,15 @@ -import { WargamingResponse } from '../../types/wargamingResponse.js'; import errorWithCause from '../node/errorWithCause.js'; +export type WargamingResponse = + | { + status: 'error'; + error: { field: string; message: string; code: 402; value: null }; + } + | { + status: 'ok'; + data: Data; + }; + export default async function getWargamingResponse( url: string, ) { diff --git a/src/core/blitz/listClansPanServer.ts b/src/core/blitz/listClans.ts similarity index 95% rename from src/core/blitz/listClansPanServer.ts rename to src/core/blitz/listClans.ts index eb435d1b4..f4b8a3364 100644 --- a/src/core/blitz/listClansPanServer.ts +++ b/src/core/blitz/listClans.ts @@ -7,7 +7,7 @@ export type ClanListWithServer = (Clan & { server: 'com' | 'eu' | 'asia'; })[]; -export default async function listClansPanServer(search: string, limit = 9) { +export default async function listClans(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/core/blitz/listAccountsPanServer.ts b/src/core/blitz/listPlayers.ts similarity index 95% rename from src/core/blitz/listAccountsPanServer.ts rename to src/core/blitz/listPlayers.ts index e608ed77a..64e4faf28 100644 --- a/src/core/blitz/listAccountsPanServer.ts +++ b/src/core/blitz/listPlayers.ts @@ -10,7 +10,7 @@ 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 listAccountsPanServer(search: string, limit = 9) { +export default async function listPlayers(search: string, limit = 9) { const trimmedSearch = search.trim(); const normalizedLimit = Math.round(limit / 3); const encodedSearch = encodeURIComponent(trimmedSearch); diff --git a/src/core/blitz/wargamingError.ts b/src/core/blitz/wargamingError.ts deleted file mode 100644 index f27b0092e..000000000 --- a/src/core/blitz/wargamingError.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { - CacheType, - ChatInputCommandInteraction, - EmbedBuilder, -} from 'discord.js'; -import { client } from '../../bot.js'; -import { NEGATIVE_COLOR } from '../../constants/colors.js'; -import { handleError } from '../../events/error.js'; - -export default async function wargamingError( - interaction: ChatInputCommandInteraction, - error: Error, - command: string, -) { - await interaction.editReply({ - embeds: [ - new EmbedBuilder() - .setColor(NEGATIVE_COLOR) - .setTitle(`${client.user?.username} ran into an issue`) - .setDescription('Wargaming returned an error. Please try again later.'), - ], - }); - - console.log(`Wargaming returned an error`); - handleError(error, command); -} diff --git a/src/core/discord/clanAutocomplete.ts b/src/core/discord/clanAutocomplete.ts index 307665bf3..4f375e749 100644 --- a/src/core/discord/clanAutocomplete.ts +++ b/src/core/discord/clanAutocomplete.ts @@ -4,14 +4,14 @@ import { CacheType, } from 'discord.js'; import { BLITZ_SERVERS } from '../../constants/servers.js'; -import listClansPanServer from '../blitz/listClansPanServer.js'; +import listClans from '../blitz/listClans.js'; export default async function clanAutocomplete( interaction: AutocompleteInteraction, ) { const focusedOption = interaction.options.getFocused(true); if (focusedOption.name !== 'clan') return; - const players = await listClansPanServer(focusedOption.value); + const players = await listClans(focusedOption.value); await interaction.respond( players diff --git a/src/core/discord/resolvePlayerFromCommand.ts b/src/core/discord/resolvePlayerFromCommand.ts index 1707ad7c3..3ed7cb396 100644 --- a/src/core/discord/resolvePlayerFromCommand.ts +++ b/src/core/discord/resolvePlayerFromCommand.ts @@ -1,8 +1,8 @@ import { CacheType, ChatInputCommandInteraction } from 'discord.js'; import { BlitzServer } from '../../constants/servers.js'; -import listAccountsPanServer, { +import listPlayers, { usernamePatternWithoutPosition, -} from '../blitz/listAccountsPanServer.js'; +} from '../blitz/listPlayers.js'; import errorWithCause from '../node/errorWithCause.js'; export const serverAndIdPattern = /(com|eu|asia)\/[0-9]+/; @@ -35,7 +35,7 @@ export default async function resolvePlayerFromCommand( id: Number(accountId), } satisfies ResolvedPlayer; } else { - const accounts = await listAccountsPanServer(username); + const accounts = await listPlayers(username); if (accounts[0]) { return { diff --git a/src/core/discord/usernameAutocomplete.ts b/src/core/discord/usernameAutocomplete.ts index e303e1a56..6b3e8d283 100644 --- a/src/core/discord/usernameAutocomplete.ts +++ b/src/core/discord/usernameAutocomplete.ts @@ -4,14 +4,14 @@ import { CacheType, } from 'discord.js'; import { BLITZ_SERVERS } from '../../constants/servers.js'; -import listAccountsPanServer from '../blitz/listAccountsPanServer.js'; +import listPlayers from '../blitz/listPlayers.js'; export default async function usernameAutocomplete( interaction: AutocompleteInteraction, ) { const focusedOption = interaction.options.getFocused(true); if (focusedOption.name !== 'username') return; - const players = await listAccountsPanServer(focusedOption.value); + const players = await listPlayers(focusedOption.value); try { await interaction.respond( diff --git a/src/renderers/stats.tsx b/src/renderers/stats.tsx index c999673b1..04ad0f87c 100644 --- a/src/renderers/stats.tsx +++ b/src/renderers/stats.tsx @@ -5,7 +5,7 @@ import TierWeights, { TierWeightsRecord } from '../components/TierWeights.js'; import TitleBar from '../components/TitleBar.js'; import Wrapper from '../components/Wrapper.js'; import { BLITZ_SERVERS } from '../constants/servers.js'; -import getWN8 from '../core/blitz/getWN8.js'; +import calculateWN8 from '../core/blitz/calculateWN8.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import resolveTankName from '../core/blitz/resolveTankName.js'; import sumStats from '../core/blitz/sumStats.js'; @@ -83,7 +83,7 @@ export default async function stats( const tankAverage = tankAverages[tankId]; return tankAverage - ? accumulator + getWN8(tankAverage.all, stats) * stats.battles + ? accumulator + calculateWN8(tankAverage.all, stats) * stats.battles : accumulator; }, 0) / battlesOfTanksWithAverages, tier: @@ -115,7 +115,7 @@ export default async function stats( stats = tankStats[tankId]; supplementaryStats = { - WN8: getWN8(tankAverages[tankId].all, tankStats[tankId]), + WN8: calculateWN8(tankAverages[tankId].all, tankStats[tankId]), tier: tankopedia[tankId].tier, }; } diff --git a/src/renderers/today.tsx b/src/renderers/today.tsx index f84c76bdc..ff2736f75 100644 --- a/src/renderers/today.tsx +++ b/src/renderers/today.tsx @@ -4,8 +4,8 @@ import PoweredByBlitzStars from '../components/PoweredByBlitzStars.js'; import TitleBar from '../components/TitleBar.js'; import Wrapper from '../components/Wrapper.js'; import { BLITZ_SERVERS } from '../constants/servers.js'; +import calculateWN8 from '../core/blitz/calculateWN8.js'; import getTankStats from '../core/blitz/getTankStats.js'; -import getWN8 from '../core/blitz/getWN8.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import resolveTankName from '../core/blitz/resolveTankName.js'; import sumStats from '../core/blitz/sumStats.js'; @@ -60,7 +60,7 @@ export default async function today({ server, id }: ResolvedPlayer) { ? accumulator : { ...accumulator, - [tankId]: getWN8(tankAverages[tankId].all, tankStats), + [tankId]: calculateWN8(tankAverages[tankId].all, tankStats), }; }, {}, @@ -71,7 +71,10 @@ export default async function today({ server, id }: ResolvedPlayer) { ? accumulator : { ...accumulator, - [tank_id]: getWN8(tankAverages[tank_id].all, careerStats[tank_id]), + [tank_id]: calculateWN8( + tankAverages[tank_id].all, + careerStats[tank_id], + ), }; }, {}, diff --git a/src/types/wargamingResponse.ts b/src/types/wargamingResponse.ts deleted file mode 100644 index 99dbf8a27..000000000 --- a/src/types/wargamingResponse.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type WargamingResponse = - | { - status: 'error'; - error: { - field: string; - message: string; - code: 402; - value: null; - }; - } - | { - status: 'ok'; - data: Data; - };