Skip to content
Sayrix edited this page Apr 25, 2026 · 2 revisions

Panels are public messages users click to open tickets. They are configured under panels in config/config.ts.

On startup, the bot syncs every configured panel. It reuses the previously tracked panel message when possible, so restarting the bot does not keep posting duplicate panels.

Common Panel Fields

panels: {
  supportSelect: {
    channelId: "141414141414141414",
    message: "tickets/open-panel",
    content: "Choose the ticket type that fits your issue best.",
    opener: { ... }
  }
}
Field Purpose
channelId Channel where the panel message should be posted.
message Template under messages/.
content Optional text added to the panel template.
opener Select menu or button configuration.

The bot validates that each panel channel exists and is text-based.

Inline Select Panel

An inline select menu appears directly on the panel message.

opener: {
  type: "inline-select",
  ticketTypes: ["general", "billing", "report"],
  placeholder: "Open a ticket"
}

This is the best default for servers with several ticket types.

Button Select Panel

A button opens an ephemeral select menu.

opener: {
  type: "button-select",
  ticketTypes: ["general", "billing"],
  label: "Open Support Ticket",
  emoji: "<:ticket:171717171717171717>",
  style: "primary",
  placeholder: "Choose a ticket type",
  disabled: false
}

Use this when you want a cleaner public panel with only one button.

Buttons Panel

Each button opens a specific ticket type.

opener: {
  type: "buttons",
  buttons: [
    {
      ticketType: "general",
      label: "General Help",
      emoji: "<:ticket:171717171717171717>",
      style: "primary"
    },
    {
      ticketType: "billing",
      label: "Billing Help",
      style: "secondary"
    }
  ]
}

Buttons are grouped in rows of 5. Discord allows up to 25 buttons per message.

Limits

  • Select panels can contain up to 25 ticket types.
  • Button panels can contain up to 25 buttons.
  • Button rows contain up to 5 buttons.
  • Users with blocked roles do not see inaccessible ticket types in button-select menus.

Panel Message Templates

Panel templates live under messages/, for example:

message: "tickets/open-panel"

The bot resolves that to messages/tickets/open-panel.ts or .js.

Templates can include a panel opener slot:

createPanelOpenerSlot()

If the slot exists, Ticket-Bot inserts the select menu or buttons there. If no slot exists, it appends the opener to the first Components V2 container or to the end of the message.

See Custom Messages.

Clone this wiki locally