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"
}
| Mode | Behaviour |
|---|---|
"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โ
| State | Channel Name | Channel Topic | Opening Embed |
|---|---|---|---|
| Ticket opened | ticket-username | ๐ก Medium | Priority: ๐ก Medium |
/priority urgent | ticket-username | ๐ด Urgent | Priority: ๐ด Urgent |
/claim | ticket-username | ๐ก Medium | ๐ Claimed by @Staff | + Claimed by field |
/unclaim | ticket-username | ๐ก Medium | field removed |
/lock lock | ticket-username | unchanged | lock notice posted |
| Ticket closed | closed-ticket-username | unchanged | all 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.