import { getBlitzStarsLinkButton } from '../../core/blitzstars/getBlitzStarsLinkButton'; import addPeriodicFilterOptions from '../../core/discord/addPeriodicFilterOptions'; import addUsernameChoices from '../../core/discord/addUsernameChoices'; import autocompleteTanks from '../../core/discord/autocompleteTanks'; import autocompleteUsername from '../../core/discord/autocompleteUsername'; import { buttonRefresh } from '../../core/discord/buttonRefresh'; import commandToURL from '../../core/discord/commandToURL'; import { createLocalizedCommand } from '../../core/discord/createLocalizedCommand'; import { getCustomPeriodParams } from '../../core/discord/getCustomPeriodParams'; import { getFiltersFromButton } from '../../core/discord/getFiltersFromButton'; import { getFiltersFromCommand } from '../../core/discord/getFiltersFromCommand'; import resolvePeriodFromButton from '../../core/discord/resolvePeriodFromButton'; import resolvePeriodFromCommand from '../../core/discord/resolvePeriodFromCommand'; import resolvePlayerFromButton from '../../core/discord/resolvePlayerFromButton'; import resolvePlayerFromCommand from '../../core/discord/resolvePlayerFromCommand'; import { CommandRegistry } from '../../events/interactionCreate'; import { renderBreakdown } from './render'; export const breakdownCommand = new Promise( async (resolve) => { resolve({ inProduction: true, inPublic: true, command: await addPeriodicFilterOptions( createLocalizedCommand('breakdown'), (option) => option.addStringOption(addUsernameChoices), ), async handler(interaction) { const player = await resolvePlayerFromCommand(interaction); const period = resolvePeriodFromCommand(player.region, interaction); const filters = await getFiltersFromCommand(interaction); const path = commandToURL(interaction, { ...player, ...getCustomPeriodParams(interaction), ...filters, }); return [ ...(await renderBreakdown( player, period, filters, interaction.locale, )), buttonRefresh(interaction, path), await getBlitzStarsLinkButton(player.region, player.id), ]; }, autocomplete: (interaction) => { autocompleteUsername(interaction); autocompleteTanks(interaction); }, async button(interaction) { const player = await resolvePlayerFromButton(interaction); const period = resolvePeriodFromButton(player.region, interaction); const filters = getFiltersFromButton(interaction); return await renderBreakdown( player, period, filters, interaction.locale, ); }, }); }, );