Files
TicketSystem/README.md
2026-02-24 20:44:25 +00:00

322 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
# TicketSystem
![Version](https://img.shields.io/badge/Minecraft-1.18.x--1.21.x-green?style=for-the-badge) ![Java](https://img.shields.io/badge/Java-17+-orange?style=for-the-badge) ![Type](https://img.shields.io/badge/Type-Support-blue?style=for-the-badge)
**TicketSystem** ist das flexible, moderne Support- und Feedback-Plugin für Minecraft-Server (Spigot/Paper 1.18.x1.21.x, Java 17+). Es bietet flexible Speicherung, automatische Backups & Migration, Export/Import, Statistiken, dynamische GUI, Kategorie- und Prioritäten-System, Bewertungs- und Kommentar-System, **FAQ-System**, Discord-Webhook und volle BungeeCord-Unterstützung.
---
## Features
- MySQL oder Datei-Speicherung (YAML/JSON oder MySQL/MariaDB, jederzeit umschaltbar)
- Automatische Backups & Migration
- Export/Import von Tickets
- Statistiken & Archivierung
- Rollenbasierter Archiv-Zugriff
- Konfigurierbare Speicherpfade
- Vollständige Validierung & Fehlerausgaben
- Debug-Modus & Versionsprüfung
- Anpassbare Nachrichten, Farben, Limits, Speicherpfade, Archiv-Intervall, Cooldowns, Rechte
## Sprachdateien (lang_de.yml / lang_en.yml)
Alle Plugin-Texte und Nachrichten werden in den Sprachdateien verwaltet. Du kannst sie komplett anpassen und eigene Farben, Prefixe und Texte nutzen.
**Farbcodes:**
- `&` (z.B. &a = Grün, &c = Rot, &e = Gelb, &7 = Grau)
- HEX: `&#RRGGBB` (z.B. &#FFD700 = Gold)
**Platzhalter:**
- `{id}`: Ticket-ID
- `{player}`: Spielername
- `{claimer}`: Name des Supporters
- `{category}`: Ticket-Kategorie
- `{priority}`: Ticket-Priorität
- `{server}`: Servername (BungeeCord)
- `{message}`: Ticket-Beschreibung
- `{comment}`: Kommentar des Supports
- `{count}`: Anzahl (Tickets, FAQs, etc.)
- `{reason}`: Grund (Blacklist)
- `{author}`: Name des Kommentarautors
- `{time}`: Zeitstempel
- `{page}`: Seitenzahl (GUI)
- `{total}`: Gesamtanzahl (Tickets/FAQs)
- `{value}`: Wert für Lore-Labels (z.B. Ersteller, Kategorie)
**Befehls-Platzhalter:**
- `{cmd_create}`: Ticket erstellen
- `{cmd_list}`: Ticket-Liste anzeigen
- `{cmd_comment}`: Kommentar hinzufügen
- `{cmd_rate}`: Ticket bewerten
- `{cmd_claim}`: Ticket annehmen
- `{cmd_close}`: Ticket schließen
- `{cmd_forward}`: Ticket weiterleiten
- `{cmd_reload}`: Konfiguration neu laden
- `{cmd_stats}`: Statistiken anzeigen
- `{cmd_archive}`: Tickets archivieren
- `{cmd_migrate}`: Speicherart wechseln
- `{cmd_export}`: Tickets exportieren
- `{cmd_import}`: Tickets importieren
- `{cmd_blacklist}`: Blacklist verwalten
- `{cmd_setpriority}`: Priorität ändern
- `{cmd_faq}`: FAQ-System
- `{cmd_top}`: Top-Ersteller
**Wofür stehen die Variablen?**
- Sie werden automatisch durch die passenden Werte ersetzt, z.B. `{id}` durch die Ticketnummer, `{player}` durch den Spielernamen.
- Die `{cmd_X}`-Platzhalter werden je nach Spracheinstellung (de/en/both) durch den richtigen Befehl ersetzt.
- Alle Variablen findest du in der lang_de.yml und lang_en.yml, jeweils im Kontext der Nachricht.
**Beispiel:**
```
- Kategorie- und Prioritäten-System
- Bewertungs- und Kommentar-System
```
→ Zeigt nach dem Erstellen: „Ticket #123 wurde erfolgreich erstellt!“
**Tipp:**
- Du kannst eigene Nachrichten und Farben setzen.
- Die Sprachdatei ist sehr ausführlich kommentiert und enthält alle verfügbaren Variablen.
- Offline-Benachrichtigungen
- Discord-Webhook mit Embeds & Rollen-Ping
- Blacklist für Spieler
- **FAQ-System** mit eigenem GUI, eigener Datei (`faqs.yml`) und vollständiger In-Game-Verwaltung durch Admins
- **Performance-Caching** TTL-basierter In-Memory-Cache reduziert Datenbankabfragen spürbar
- **Saubere Konsole** minimale Start-Logs, kein unnötiger Spam
- Erweiterbarkeit: viele Hooks
- **BungeeCord-Unterstützung**: serverübergreifende Tickets, Teleports, Weiterleitungen, Benachrichtigungen
---
## Installation & Setup
1. TicketSystem.jar in den plugins-Ordner legen und Server starten
2. `config.yml` anpassen (Speicherorte, Nachrichten, Limits, Farben, MySQL-Daten etc.)
3. `/ticket`-Befehle nutzen
---
## Befehle & Rechte
### Übersicht der Befehle
| Befehl | Beschreibung | Nutzergruppe |
|-----------------------------------------------------------|--------------------------------------------------------|------------------|
| `/ticket` | Hilfe & Übersicht | Spieler, Support |
| `/ticket create [Kategorie] [Priorität] <Text>` | Ticket erstellen | Spieler |
| `/ticket list` | Eigene Tickets in der GUI anzeigen | Spieler |
| `/ticket comment <ID> <Nachricht>` | Kommentar hinzufügen | Spieler, Support |
| `/ticket rate <ID> <good\|bad>` | Support bewerten | Spieler |
| `/ticket faq` | FAQ-GUI öffnen (häufige Fragen) | Spieler |
| `/ticket faq list` | FAQs im Chat auflisten | Spieler |
| `/ticket faq add <Frage> \| <Antwort>` | Neues FAQ hinzufügen | Admin |
| `/ticket faq edit <ID> <Frage> \| <Antwort>` | Bestehendes FAQ bearbeiten | Admin |
| `/ticket faq delete <ID>` | FAQ löschen | Admin |
| `/ticket faq reload` | FAQs aus faqs.yml neu laden | Admin |
| `/ticket claim <ID>` | Ticket annehmen | Support/Admin |
| `/ticket close <ID> [Kommentar]` | Ticket schließen | Support/Admin |
| `/ticket forward <ID> <Spieler>` | Ticket weiterleiten | Support/Admin |
| `/ticket setpriority <ID> <low\|normal\|high\|urgent>` | Priorität ändern | Support/Admin |
| `/ticket reload` | Konfiguration neu laden | Admin |
| `/ticket stats` | Statistiken anzeigen | Admin |
| `/ticket archive` | Tickets archivieren | Admin |
| `/ticket blacklist <add\|remove\|list> [Spieler] [Grund]` | Blacklist verwalten | Admin |
| `/ticket migrate <tomysql\|tofile>` | Speicherart wechseln | Admin |
| `/ticket export <Dateiname>` | Tickets exportieren | Admin |
| `/ticket import <Dateiname>` | Tickets importieren | Admin |
| `/ticket teleport <ID>` | Teleport zu Ticket (BungeeCord) | Support/Admin |
### Rechte
| Permission | Beschreibung | Standard |
|-----------------|-----------------------------------------------------------------|------------------|
| `ticket.create` | Ticket erstellen | alle Spieler |
| `ticket.support`| Tickets einsehen, claimen, schließen, Priorität ändern | manuell vergeben |
| `ticket.archive`| Archiv öffnen, Tickets permanent löschen | manuell vergeben |
| `ticket.admin` | Voller Zugriff inkl. Weiterleitung, Reload, Blacklist, FAQ-Verwaltung | OP |
> `ticket.archive` ist nicht in `ticket.admin` enthalten und muss explizit vergeben werden.
---
## FAQ-System
Das FAQ-System ermöglicht es Admins, häufige Fragen und Antworten direkt im Spiel zu verwalten. Spieler können die FAQs per GUI oder Befehl einsehen.
### Für Spieler
```
/ticket faq öffnet die FAQ-GUI mit Custom-Skull-Items
/ticket faq list listet alle FAQs im Chat auf
```
In der GUI wird für jeden FAQ-Eintrag ein **Custom-Skull-Item** mit individueller Textur angezeigt. Ein Klick auf einen Eintrag zeigt die vollständige Antwort im Chat.
### Für Admins
```
/ticket faq add Wie melde ich einen Bug? | Nutze /ticket create bug <Beschreibung>.
/ticket faq edit 1 Neue Frage? | Neue Antwort.
/ticket faq delete 1
/ticket faq reload
```
Alternativ können FAQs auch direkt über die **Admin-FAQ-GUI** verwaltet werden (öffnet sich automatisch wenn `ticket.admin`-Berechtigung vorhanden). Ein Klick auf einen Eintrag öffnet eine Aktions-GUI mit den Optionen **Bearbeiten** und **Löschen**. Neue FAQs lassen sich ebenfalls per Schaltfläche in der GUI hinzufügen das Plugin führt den Admin Schritt für Schritt durch eine Chat-Eingabe.
### faqs.yml
Alle FAQs werden in einer eigenen Datei `plugins/TicketSystem/faqs.yml` gespeichert:
```yaml
faqs:
1:
question: "Wie erstelle ich ein Ticket?"
answer: "Nutze den Befehl /ticket create [Kategorie] [Beschreibung]."
2:
question: "Wie lange dauert die Bearbeitung?"
answer: "Unser Support-Team bearbeitet Tickets so schnell wie möglich."
```
Beim ersten Start werden automatisch vier Beispiel-FAQs erstellt.
---
## Performance-Caching
Ab dieser Version hält TicketSystem häufig abgerufene Tickets in einem **TTL-basierten In-Memory-Cache** vor. Das reduziert die Datenbankbelastung bei wiederholten Zugriffen (GUI, Kommentare, Bewertungen) deutlich.
- Standard-Lebenszeit: **60 Sekunden** (konfigurierbar: `cache-ttl-seconds` in `config.yml`)
- Der Cache wird bei Ticket-Änderungen (Claim, Close, Priorität usw.) automatisch invalidiert
- Regelmäßige Bereinigung abgelaufener Einträge alle 5 Minuten
- Der aktuelle Cache-Status ist in `/ticket stats` einsehbar
---
## Kategorie & Priorität
Beim Erstellen eines Tickets können Kategorie und Priorität optional angegeben werden:
| Befehl | Kategorie | Priorität |
|-----------------------------------------|-----------|-----------|
| `/ticket create <Text>` | Standard | NORMAL |
| `/ticket create bug <Text>` | Bug | NORMAL |
| `/ticket create high <Text>` | Standard | HIGH |
| `/ticket create bug high <Text>` | Bug | HIGH |
| `/ticket create question urgent <Text>` | Frage | URGENT |
**Verfügbare Prioritäten:** `low`, `normal`, `high`, `urgent` (auch deutsch: `niedrig`, `hoch`, `dringend`)
Kategorien und Aliases sind frei in der `config.yml` konfigurierbar.
---
## Discord-Webhook
- Embeds mit Kategorie & Priorität
- Rollen-Ping pro Nachrichtentyp
- Drei Ereignisse: neues Ticket, Ticket geschlossen, Ticket weitergeleitet
Konfiguration in `config.yml`:
```yaml
discord:
enabled: true
webhook-url: "https://discord.com/api/webhooks/..."
role-ping-id: "123456789012345678"
messages:
new-ticket:
role-ping: true
show-category: true
show-priority: true
ticket-closed:
enabled: true
role-ping: false
```
---
## BungeeCord-Unterstützung
TicketSystem bietet volle Unterstützung für BungeeCord-Netzwerke:
- Tickets von jedem Server im Netzwerk
- Teleport zu Tickets auf anderen Servern (`/ticket teleport <ID>`)
- Tickets im Archiv und GUI serverübergreifend
- Benachrichtigungen an alle Server
- Discord-Webhooks zeigen Server-Namen
- Tickets an Supporter auf anderen Servern weiterleiten
**Voraussetzungen:**
- `spigot.yml`: `bungeecord: true`
- `config.yml`: `bungeecord: true`, `server-name` pro Server
- TicketSystem.jar auf allen Spigot-Servern
- Alle Server nutzen dieselbe MySQL-Datenbank
---
## Vergleich mit anderen Plugins
| Feature | TicketSystem | SimpleTickets | AdvancedTickets |
|-----------------------------|:------------:|:-------------:|:---------------:|
| Speicher-Migration | ✔️ | ⚠️ | ✖️ |
| Automatische Backups | ✔️ | ⚠️ | ✖️ |
| GUI mit Kategorien | ✔️ | ⚠️ | ✖️ |
| Archivierung | ✔️ | ⚠️ | ✖️ |
| Rollenbasierter Archiv-Zugriff| ✔️ | ✖️ | ✖️ |
| Kategorie-System | ✔️ | ✖️ | ✖️ |
| Prioritäten-System | ✔️ | ✖️ | ✖️ |
| FAQ-System | ✔️ | ✖️ | ✖️ |
| Performance-Caching | ✔️ | ✖️ | ✖️ |
| Offline-Benachrichtigungen | ✔️ | ✖️ | ✖️ |
| Discord-Webhook | ✔️ | ✖️ | ✖️ |
| Bewertungs-System | ✔️ | ✖️ | ✖️ |
| Update-Checker | ✔️ | ✖️ | ✖️ |
| BungeeCord-Unterstützung | ✔️ | ✖️ | ✖️ |
| 2-Sprachigkeit (de/en) | ✔️ | ✖️ | ✖️ |
Legende: ✔️ Vollständige Unterstützung · ⚠️ Eingeschränkt · ✖️ Nicht vorhanden
---
## FAQ
**Kann ich zwischen MySQL und Datei-Speicherung wechseln?**
> Ja! Mit `/ticket migrate tomysql` oder `/ticket migrate tofile` werden alle Daten automatisch migriert.
**Wie konfiguriere ich eigene Kategorien?**
> In der `config.yml` unter `categories:` Name, Farbe, Material und Aliases frei wählbar. Änderungen mit `/ticket reload` übernehmen.
**Wie verwalte ich FAQs?**
> Mit `/ticket faq` öffnest du die GUI. Als Admin kannst du über die GUI oder per `/ticket faq add|edit|delete` FAQs verwalten. Alle Daten liegen in `faqs.yml`.
**Was passiert mit Benachrichtigungen wenn ein Spieler offline ist?**
> Alle Benachrichtigungen werden gespeichert und beim nächsten Login angezeigt.
**Wie ändere ich die Priorität eines Tickets?**
> Als Support/Admin per `/ticket setpriority <ID> <Priorität>` oder direkt in der GUI.
**Wie aktiviere ich den Debug-Modus?**
> `debug: true` in der `config.yml` setzen.
**Wer darf das Ticket-Archiv sehen?**
> Nur Spieler mit `ticket.archive`. Muss explizit vergeben werden.
**Wie funktioniert Teleport bei BungeeCord?**
> Mit `/ticket teleport <ID>` wirst du automatisch auf den richtigen Server und zur Ticket-Position teleportiert.
**Wie lange werden Tickets gecacht?**
> Standardmäßig 60 Sekunden. Über `cache-ttl-seconds` in der `config.yml` anpassbar. Der Cache wird bei Änderungen sofort invalidiert.
---
## Support, Community & Motivation
Du hast Fragen, brauchst Hilfe oder möchtest Feedback geben?
- [Discord Support](https://discord.com/invite/FdRs4BRd8D)
- [Git Issues](https://git.viper.ipv64.net/M_Viper/TicketSystem/issues)
Wir antworten in der Regel innerhalb von 24 Stunden!
**Dein Feedback zählt:**
Wenn TicketSystem deinen Server bereichert hat, freuen wir uns über eine 5-Sterne Bewertung auf SpigotMC!
Jede Rückmeldung hilft, das Plugin weiter zu verbessern und die Community zu stärken.