import config from '../../../config.ts'; import { ApplicationCommandFlags, Bot, ButtonStyles, Interaction, InteractionResponseTypes, MessageComponentTypes } from '../../../deps.ts'; import { failColor, infoColor1, safelyDismissMsg, somethingWentWrong } from '../../commandUtils.ts'; import { addTokenToMap, pathIdxEnder, pathIdxSeparator, selfDestructMessage } from './utils.ts'; import { idSeparator } from '../eventUtils.ts'; import { activityMaxPlayersId, activitySubtitleId, activityTitleId } from './step1a-openCustomModal.ts'; import { customId as gameSelectionId } from './step1-gameSelection.ts'; import { customId as openCustomModalId } from './step1a-openCustomModal.ts'; import utils from '../../utils.ts'; export const customId = 'verifyCustomActivity'; const execute = async (bot: Bot, interaction: Interaction) => { if (interaction?.data?.components?.length && interaction.guildId && interaction.channelId && interaction.member) { // Parse out our data const tempDataMap: Map = new Map(); for (const row of interaction.data.components) { if (row.components?.[0]) { const textField = row.components[0]; tempDataMap.set(textField.customId || 'missingCustomId', textField.value || 'missingValue'); } } // Remove any pipe characters to avoid issues down the process const activityTitle = (tempDataMap.get(activityTitleId) || '').replace(/\|/g, ''); const activitySubtitle = (tempDataMap.get(activitySubtitleId) || '').replace(/\|/g, ''); const activityMaxPlayers = parseInt(tempDataMap.get(activityMaxPlayersId) || '0'); if (isNaN(activityMaxPlayers) || activityMaxPlayers < 1 || activityMaxPlayers > 99) { bot.helpers.sendInteractionResponse(interaction.id, interaction.token, { type: InteractionResponseTypes.ChannelMessageWithSource, data: { flags: ApplicationCommandFlags.Ephemeral, embeds: [{ color: failColor, title: 'Invalid Max Member count!', description: `${config.name} parsed the max members as \`${ isNaN(activityMaxPlayers) ? 'Not a Number' : activityMaxPlayers }\`, which is outside of the allowed range. Please recreate this activity, but make sure the maximum player count is between 1 and 99.\n\n${safelyDismissMsg}`, }], }, }).catch((e: Error) => utils.commonLoggers.interactionSendError('step1b-verifyCustomActivity.ts:invalidPlayer', interaction, e)); return; } if (!activityMaxPlayers || !activitySubtitle || !activityTitle) { // Verify fields exist somethingWentWrong(bot, interaction, `missingFieldFromCustomActivity@${activityTitle}|${activitySubtitle}|${activityMaxPlayers}$`); return; } addTokenToMap(bot, interaction, interaction.guildId, interaction.channelId, interaction.member.id); const idxPath = `${idSeparator}${activityTitle}${pathIdxSeparator}${activitySubtitle}${pathIdxSeparator}${activityMaxPlayers}`; bot.helpers.sendInteractionResponse(interaction.id, interaction.token, { type: InteractionResponseTypes.ChannelMessageWithSource, data: { flags: ApplicationCommandFlags.Ephemeral, embeds: [{ color: infoColor1, title: 'Please verify the following Custom Event details:', description: `Please note, pipe characters (\`|\`) are not allowed and will be automatically removed.\n\n${selfDestructMessage(new Date().getTime())}`, fields: [{ name: 'Activity Title:', value: activityTitle, }, { name: 'Activity Subtitle:', value: activitySubtitle, }, { name: 'Maximum Players:', value: `${activityMaxPlayers}`, }], }], components: [{ type: MessageComponentTypes.ActionRow, components: [{ type: MessageComponentTypes.Button, style: ButtonStyles.Success, label: 'Yup, looks great!', customId: `${gameSelectionId}${idxPath}${pathIdxEnder}`, }, { type: MessageComponentTypes.Button, style: ButtonStyles.Danger, label: 'Nope, let me change something.', customId: `${openCustomModalId}${idxPath}`, }], }], }, }).catch((e: Error) => utils.commonLoggers.interactionSendError('step1b-verifyCustomActivity.ts:message', interaction, e)); } else { somethingWentWrong(bot, interaction, 'noDataFromCustomActivityModal'); } }; export const verifyCustomEventButton = { customId, execute, };