Skip to main content

Configuration

๐Ÿ› ๏ธ Configuration Referenceโ€‹

Startup Log Visibilityโ€‹

"showLog": true // Show INFO log messages on startup (commands, events, components)
// Set to false for a cleaner output in production

Panel Interaction Typeโ€‹

"panel": {
"interactionType": "BUTTON" // "BUTTON" (default) or "SELECT_MENU"
}
ModeBehaviour
"BUTTON"A green button is shown. Clicking it opens an ephemeral select menu โ€” always fresh, no Discord caching issue.
"SELECT_MENU"The select menu is shown directly in the panel. After every use it automatically resets, so users never need to restart Discord to open a second ticket of the same type.

Panel Logo & Bannerโ€‹

"panel": {
"logo": { "enabled": true, "file": "logo.png" },
"banner": { "enabled": true, "file": "banner.png" }
}

Supported formats: PNG, JPG, GIF, WEBP. Run /setup again after adding or changing images.

Channel State Overviewโ€‹

StateChannel NameChannel TopicOpening Embed
Ticket openedticket-username๐ŸŸก MediumPriority: ๐ŸŸก Medium
/priority urgentticket-username๐Ÿ”ด UrgentPriority: ๐Ÿ”ด Urgent
/claimticket-username๐ŸŸก Medium | ๐Ÿ™‹ Claimed by @Staff+ Claimed by field
/unclaimticket-username๐ŸŸก Mediumfield removed
/lock lockticket-usernameunchangedlock notice posted
Ticket closedclosed-ticket-usernameunchangedall buttons removed

Note on rate-limits: Discord limits channel topic changes to 2 per 10 minutes. A warning is shown in the ticket and the update appears automatically once the limit resets.

Ticket Typesโ€‹

{
"codeName": "support",
"name": "Support",
"description": "...",
"emoji": "๐Ÿ’ก",
"color": "#ff0000", // Hex color or "" to use mainColor
"categoryId": "123456789",
"ticketNameOption": "", // USERNAME, USERID, TICKETCOUNT or ""
"customDescription": "...", // Variables: REASON1, REASON2, USERNAME, USERID
"cantAccess": ["roleId"],
"staffRoles": [], // Type-specific staff roles
"askQuestions": true,
"questions": [
{ "label": "Question", "placeholder": "...", "style": "SHORT", "maxLength": 500 }
]
}

Bot Statusโ€‹

"status": {
"enabled": true,
"dynamic": false, // true = live ticket count in status
"dynamicText": "๐ŸŽซ {open} open tickets", // placeholders: {open}, {total}, {closed}
"dynamicInterval": 5, // update interval in minutes
"text": "Support Tickets", // used when dynamic: false
"type": "WATCHING", // PLAYING, WATCHING, LISTENING, STREAMING, COMPETING
"status": "online"
}

User Notificationsโ€‹

"userNotifications": {
"enabled": true // Show a ๐Ÿ”• "Notify me" button in new tickets.
// User opts in โ†’ receives a DM when staff first replies.
// Rate-limited to 1 DM per 30 minutes per ticket.
}

Canned Responses (Snippets)โ€‹

Snippets are defined in a separate file โ€” not in config.jsonc:

cp config/snippets.example.jsonc config/snippets.jsonc
{
"snippets": [
{
"name": "welcome",
"description": "Welcome message at the start of a ticket",
"content": "Hey {user}! ๐Ÿ‘‹ Thanks for opening a ticket. We'll be with you shortly.",
"embed": {
"title": "๐Ÿ‘‹ Welcome",
"color": "#5865F2"
}
},
{
"name": "docs",
"description": "Link to the MSK-Scripts documentation",
"content": "Hey {user}, check out our docs: https://docu.msk-scripts.de",
"embed": null
}
]
}

Available placeholders: {user} ยท {staff} ยท {type} ยท {priority}

Commands: /snippet send <name> ยท /snippet list

Snippets support autocomplete โ€” start typing the name or description to filter.

Staff Reminderโ€‹

"staffReminder": {
"enabled": true,
"afterHours": 4,
"pingRoles": true
}

The bot checks all open tickets every 15 minutes. Each ticket is only reminded once.

Rating Systemโ€‹

"ratingSystem": {
"enabled": true,
"dmUser": true,
"ratingsChannelId": "CHANNEL_ID_HERE"
}

Auto-Closeโ€‹

"autoClose": {
"enabled": true,
"inactiveHours": 48,
"warnBeforeHours": 6,
"excludeClaimed": true
}

Statisticsโ€‹

/stats shows server-wide numbers. /stats @user shows a detailed profile split into ๐Ÿ‘ค As a User and ๐Ÿ›ก๏ธ As Staff.