Files
blitzkit/src/core/discord/autocompleteTanks.ts
T

45 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-05-13 21:42:40 +00:00
import {
ApplicationCommandOptionChoiceData,
AutocompleteInteraction,
CacheType,
} from 'discord.js';
import { go } from 'fuzzysort';
2023-10-14 11:32:02 -05:00
import { TANK_NAMES_DIACRITICS } from '../blitzstars/tankopedia';
2023-11-01 11:45:19 -05:00
import {
DISCORD_CHOICES_MAX_NAME_SIZE,
OVERFLOW_SUFFIX,
} from './autocompleteClan';
2023-05-13 21:42:40 +00:00
2023-06-27 02:22:28 +00:00
export default async function autocompleteTanks(
2023-05-13 21:42:40 +00:00
interaction: AutocompleteInteraction<CacheType>,
) {
2023-05-14 17:13:42 +00:00
const focusedOption = interaction.options.getFocused(true);
if (focusedOption.name !== 'tank') return;
2023-05-13 21:42:40 +00:00
await interaction.respond(
2023-05-14 17:13:42 +00:00
focusedOption.value
? await Promise.all(
2023-08-10 01:46:39 +00:00
go(focusedOption.value, await TANK_NAMES_DIACRITICS, {
keys: ['combined'],
2023-07-11 19:54:57 +00:00
limit: 10,
2023-11-01 11:45:19 -05:00
}).map(async (item) => {
let name = item.obj.original;
if (name.length > DISCORD_CHOICES_MAX_NAME_SIZE) {
const overSize = name.length - DISCORD_CHOICES_MAX_NAME_SIZE;
name = `${item.obj.original.slice(
0,
item.obj.original.length - overSize - OVERFLOW_SUFFIX.length,
)}${OVERFLOW_SUFFIX}`;
}
return {
name,
value: `${item.obj.id}`,
} satisfies ApplicationCommandOptionChoiceData<string>;
}),
2023-05-13 21:42:40 +00:00
)
: [],
);
}