import { SEARCH_KEYS } from '@blitzkit/core'; import { literals } from '@blitzkit/i18n'; import { Locale } from 'discord.js'; import { go } from 'fuzzysort'; import markdownEscape from 'markdown-escape'; import { tankDefinitions, tankNames } from '../blitzkit/nonBlockingPromises'; import { UserError } from '../blitzkit/userError'; import { tankNamesTechTreeOnly } from '../discord/autocompleteTanks'; import { translator } from '../localization/translator'; export async function resolveTankId( tank: string | number, locale: Locale, techTreeOnly = false, ) { const { strings } = translator(locale); const number = typeof tank === 'string' ? Number(tank) : tank; if (Number.isNaN(number)) { const searchResult = go( `${tank}`, await (techTreeOnly ? tankNamesTechTreeOnly : tankNames), { keys: SEARCH_KEYS, limit: 1 }, ); if (searchResult.length === 0) { throw new UserError( literals(strings.bot.common.errors.tank_name_not_found, [ markdownEscape(`${tank}`), ]), ); } else { return searchResult[0].obj.id; } } else { const awaitedTankDefinitions = await tankDefinitions; if (awaitedTankDefinitions.tanks[number]) { return number; } else { throw new UserError( literals(strings.bot.common.errors.tank_id_not_found, [`${number}`]), ); } } }