mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
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, {
|
|
search: 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, {
|
|
search: number,
|
|
})
|
|
);
|
|
}
|
|
}
|
|
}
|