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

46 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-05-16 02:02:50 +00:00
import {
ApplicationCommandOptionChoiceData,
AutocompleteInteraction,
CacheType,
} from 'discord.js';
2023-10-14 11:32:02 -05:00
import searchClansAcrossRegions from '../blitz/searchClansAcrossRegions';
2024-03-07 18:27:05 -06:00
import { translator } from '../localization/translator';
2023-05-16 02:02:50 +00:00
2023-11-01 11:45:19 -05:00
export const DISCORD_CHOICES_MAX_NAME_SIZE = 25;
export const OVERFLOW_SUFFIX = '…';
2023-06-27 02:22:28 +00:00
export default async function autocompleteClan(
2023-05-16 02:02:50 +00:00
interaction: AutocompleteInteraction<CacheType>,
) {
2024-03-07 18:27:05 -06:00
const { translate } = translator(interaction.locale);
2023-05-16 02:02:50 +00:00
const focusedOption = interaction.options.getFocused(true);
if (focusedOption.name !== 'clan') return;
if (focusedOption.value.length < 2) return interaction.respond([]);
2023-11-01 11:45:19 -05:00
const clans = await searchClansAcrossRegions(focusedOption.value);
2023-05-16 02:02:50 +00:00
await interaction.respond(
2023-11-01 11:45:19 -05:00
clans
? clans.map((clan) => {
2024-03-07 18:27:05 -06:00
let name = `${clan.name} (${translate(
`common.regions.short.${clan.region}`,
)})`;
2023-11-01 11:45:19 -05:00
if (name.length > DISCORD_CHOICES_MAX_NAME_SIZE) {
const overSize = name.length - DISCORD_CHOICES_MAX_NAME_SIZE;
name = `${clan.name.slice(
0,
clan.name.length - overSize - OVERFLOW_SUFFIX.length,
2024-03-07 18:27:05 -06:00
)}${OVERFLOW_SUFFIX} (${translate(
`common.regions.short.${clan.region}`,
)})`;
2023-11-01 11:45:19 -05:00
}
return {
name,
value: `${clan.region}/${clan.clan_id}`,
} satisfies ApplicationCommandOptionChoiceData<string>;
})
2023-05-16 02:02:50 +00:00
: [],
);
}