62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { ButtonInteraction, ModalSubmitInteraction, StringSelectMenuInteraction } from "discord.js";
|
|
|
|
// Union type for all component interactions
|
|
type ComponentInteraction = ButtonInteraction | StringSelectMenuInteraction | ModalSubmitInteraction;
|
|
|
|
// Type for the handler function that modules export
|
|
type InteractionHandler = (interaction: ComponentInteraction) => Promise<void>;
|
|
|
|
// Type for the dynamically imported module containing the handler
|
|
interface InteractionModule {
|
|
[key: string]: (...args: any[]) => Promise<void> | any;
|
|
}
|
|
|
|
// Route definition
|
|
interface InteractionRoute {
|
|
predicate: (interaction: ComponentInteraction) => boolean;
|
|
handler: () => Promise<InteractionModule>;
|
|
method: string;
|
|
}
|
|
|
|
export const interactionRoutes: InteractionRoute[] = [
|
|
// --- TRADE MODULE ---
|
|
{
|
|
predicate: (i) => i.customId.startsWith("trade_") || i.customId === "amount",
|
|
handler: () => import("@/modules/trade/trade.interaction"),
|
|
method: 'handleTradeInteraction'
|
|
},
|
|
|
|
// --- ECONOMY MODULE ---
|
|
{
|
|
predicate: (i) => i.isButton() && i.customId.startsWith("shop_buy_"),
|
|
handler: () => import("@/modules/economy/shop.interaction"),
|
|
method: 'handleShopInteraction'
|
|
},
|
|
{
|
|
predicate: (i) => i.isButton() && i.customId.startsWith("lootdrop_"),
|
|
handler: () => import("@/modules/economy/lootdrop.interaction"),
|
|
method: 'handleLootdropInteraction'
|
|
},
|
|
|
|
// --- ADMIN MODULE ---
|
|
{
|
|
predicate: (i) => i.customId.startsWith("createitem_"),
|
|
handler: () => import("@/modules/admin/item_wizard"),
|
|
method: 'handleItemWizardInteraction'
|
|
},
|
|
|
|
// --- USER MODULE ---
|
|
{
|
|
predicate: (i) => i.isButton() && i.customId === "enrollment",
|
|
handler: () => import("@/modules/user/enrollment.interaction"),
|
|
method: 'handleEnrollmentInteraction'
|
|
},
|
|
|
|
// --- FEEDBACK MODULE ---
|
|
{
|
|
predicate: (i) => i.customId.startsWith("feedback_"),
|
|
handler: () => import("@/modules/feedback/feedback.interaction"),
|
|
method: 'handleFeedbackInteraction'
|
|
}
|
|
];
|