This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Tickets
Multi-Panel-Ticketsystem mit Modal-Forms, Kategorien, Claim-Flow, HTML-/Text-Transcripts, Auto-Close, Rating, History, Transfer und Reopen.
Ablauf
- User klickt im Panel-Channel 🎫 Ticket erstellen (oder wählt eine Kategorie aus dem Select-Menu)
- Hat die Kategorie ein Form: ein Discord-Modal mit bis zu 5 Eingaben öffnet sich
- Bot erstellt einen privaten Channel unter der konfigurierten Discord-Kategorie (
parentChannelId) - Permissions: deny @everyone, allow Owner + Staff-Rollen
- Welcome-Embed mit Form-Antworten + Claim / Close-Buttons
- Roles aus
pingRoleIdswerden gepingt - Open-Event geht in
logChannelId
Mehrere Panels
Es können beliebig viele Panels in unterschiedlichen Channels eingerichtet werden, jeweils mit eigenen Kategorien:
# configs/modules/tickets.yml
panels:
support:
channelId: "0" # "0" → fällt auf channels.support aus config.yml zurück
layout: "select" # select | buttons
embed:
title: "Support"
description: "Wähle eine Kategorie"
color: "#5865F2"
categories:
help:
label: "Allgemeine Hilfe"
emoji: "🔧"
parentChannelId: "CATEGORY_ID"
staffRoleIds: ["ROLE_ID"]
pingRoleIds: ["ROLE_ID"]
claimable: true
autoCloseAfterHours: 48
form:
enabled: true
fields:
- label: "Worum geht es?"
style: "short"
required: true
- label: "Beschreibung"
style: "paragraph"
required: true
bewerbung:
channelId: "OTHER_CHANNEL_ID"
...
Auto-Deployment der Panels
Beim Bot-Start werden alle aktivierten Panels automatisch in ihre Channels gepostet (DB-tracked via TicketPanelMessage). Wird ein Panel manuell gelöscht, postet der Bot beim nächsten Start neu. Manuelles Re-Deploy: /tickets setup-panel <panel-id>.
Hat ein Panel
channelId: "0", wird aufchannels.supportaus derconfig.ymlzurückgegriffen — praktisch für „nur ein Panel ohne extra Config".
Forms (Modals)
Pro Kategorie kann ein Modal mit bis zu 5 Feldern konfiguriert werden (short oder paragraph). Die Antworten erscheinen als Form-Block im Welcome-Embed des Tickets.
Max Tickets pro User
Standardmäßig kann ein User nur ein offenes Ticket gleichzeitig haben. Konfigurierbar via:
maxOpenTicketsPerUser: 1
In-Ticket Buttons
| Button | Wer | Funktion |
|---|---|---|
| Claim / Unclaim | Category-Staff (wenn claimable: true) |
Ticket übernehmen / freigeben |
| Close | Owner oder Category-Staff | Modal mit optionalem Grund → schließt das Ticket |
Der Close-Button prüft die Berechtigung — nur Owner und Category-Staff (laut staffRoleIds) können schließen.
Auto-Close
autoClose:
enabled: true
checkIntervalMinutes: 30
- Pro Kategorie:
autoCloseAfterHours: 48(Stunden seit letzter Nachricht).0= deaktiviert. - Activity-Tracking: jede Nachricht im Ticket-Channel updatet
lastActivityAt(in-memory Cache spart DB-Hits auf Nicht-Ticket-Channels). - Runner läuft alle
checkIntervalMinutesMinuten — und einmal beim Bot-Start (catch-up nach Restarts). - Auto-Close benutzt denselben Close-Flow wie ein manueller Close: Transcript, Log-Embed, Channel-Delete, Rating-Prompt.
Transfer
/ticket transfer <category-id>
Verschiebt das aktuelle Ticket in eine andere Kategorie desselben Panels. Channel wird re-parented unter den parentChannelId der neuen Kategorie. lastActivityAt wird dabei aktualisiert.
Berechtigung: Category-Staff
Reopen
/tickets reopen <id>
Recreated einen Channel für ein bereits geschlossenes Ticket. Owner, Kategorie, Permissions und Form-Antworten werden übernommen — das Ticket gilt wieder als offen, ein Notice geht in den Log-Channel.
Berechtigung: Manager (oder Category-Staff)
Force-Close
/tickets force-close <id> [reason]
Schließt ein Ticket von außerhalb (man muss nicht im Ticket-Channel sein). Funktioniert auch wenn der Channel zwischenzeitlich gelöscht wurde — der DB-Eintrag wird sauber finalisiert.
Transcript & Rating
Beim Schließen:
- HTML- und Text-Transcript wird in
transcriptChannelId(Fallback:logChannelId) hochgeladen - Owner bekommt eine Zusammenfassung (DM oder im Channel, konfigurierbar)
- 5-Sterne-Rating-Prompt: 1️⃣–5️⃣ Buttons, ein Rating pro Ticket
rating:
enabled: true
dmOwner: true
promptTitle: "Wie zufrieden warst du?"
thanksMessage: "Danke für dein Feedback!"
Das Rating wird im Log-Channel als ⭐ Ticket rated-Embed gepostet und in den HTML-Transcript-Header übernommen (sofern vor Channel-Delete abgegeben — sonst sichtbar in /tickets history).
History
/tickets history <user>
Zeigt alle Tickets eines Users (neueste zuerst, 🟢 offen / ⚫ geschlossen) mit Kategorie, Datum und Rating.
GrumpyCore Wiki
⚙️ Setup
🔧 Core-Module
🆕 Neue Module
💬 Commands
👥 Staff
GrumpyCore Wiki (English)
⚙️ Setup
🔧 Core Modules
🆕 New Modules
💬 Commands
👥 Staff