const modulename = 'DiscordBot:interactionHandler'; import { Interaction, InteractionType } from 'discord.js'; import infoCommandHandler from './commands/info'; import statusCommandHandler from './commands/status'; import whitelistCommandHandler from './commands/whitelist'; import { embedder } from './discordHelpers'; import { cloneDeep } from 'lodash-es'; //DEBUG import consoleFactory from '@lib/console'; const console = consoleFactory(modulename); //All commands const handlers = { status: statusCommandHandler, whitelist: whitelistCommandHandler, info: infoCommandHandler, } const noHandlerResponse = async (interaction: Interaction) => { if (interaction.isRepliable()) { //@ts-ignore const identifier = interaction?.commandName ?? interaction?.customId ?? 'unknown'; await interaction.reply({ content: `No handler available for this interaction (${InteractionType[interaction.type]} > ${identifier})`, ephemeral: true, }); } } export default async (interaction: Interaction) => { //DEBUG // const copy = Object.assign(cloneDeep(interaction), { user: false, member: false }); // console.dir(copy); // return; //Handler filter if (interaction.user.bot) return; //Process buttons if (interaction.isButton()) { // //Get interaction // const [iid, ...args] = interaction.customId.split(':'); // const handler = txChungus.interactionsManager.cache.get(`button:${iid}`); // if (!handler) { // console.error(`No handler available for button interaction ${interaction.customId}`); // return; // } // txCore.metrics.txRuntime.botCommands.count(???); // //Executes interaction // try { // return await handler.execute(interaction, args, txChungus); // } catch (error) { // return await console.error(`Error executing ${interaction.customId}: ${error.message}`); // } } //Process Slash commands if (interaction.isChatInputCommand()) { //Get interaction const handler = handlers[interaction.commandName as keyof typeof handlers]; if (!handler) { noHandlerResponse(interaction).catch((e) => {}); return; } txCore.metrics.txRuntime.botCommands.count(interaction.commandName); //Executes interaction try { await handler(interaction); return; } catch (error) { const msg = `Error executing ${interaction.commandName}: ${(error as Error).message}`; console.error(msg); await interaction.reply(embedder.danger(msg, true)); return ; } } //Unknown type noHandlerResponse(interaction).catch((e) => {}); };