package interactions import ( "net/http" "git.sapphic.engineer/roleypoly/v4/types" "github.com/gofiber/fiber/v3" ) type InteractionHandler func(interaction Interaction) (InteractionResponse, error) type InteractionRouter struct { Routes map[string]InteractionHandler } func NewInteractionRouter() *InteractionRouter { return &InteractionRouter{ Routes: map[string]InteractionHandler{}, } } func (r *InteractionRouter) Add(name string, h InteractionHandler) { r.Routes[name] = h } func (r *InteractionRouter) Handle(c fiber.Ctx, interaction Interaction) error { route, ok := r.Routes[interaction.Data.Name] if !ok { return types.NewAPIError(http.StatusNotFound, "command not found").Send(c) } resp, err := route(interaction) if err != nil { return err } return c.JSON(resp) }