Update from Git Manager GUI
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package de.ticketsystem.manager;
|
||||
|
||||
import de.ticketsystem.TicketPlugin;
|
||||
import de.ticketsystem.model.ConfigCategory;
|
||||
import de.ticketsystem.model.Ticket;
|
||||
import de.ticketsystem.model.TicketStatus;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -40,9 +41,7 @@ public class TicketManager {
|
||||
return Math.max(0, (cooldownMillis - elapsed) / 1000);
|
||||
}
|
||||
|
||||
public void setCooldown(UUID uuid) {
|
||||
cooldowns.put(uuid, System.currentTimeMillis());
|
||||
}
|
||||
public void setCooldown(UUID uuid) { cooldowns.put(uuid, System.currentTimeMillis()); }
|
||||
|
||||
// ─────────────────────────── Benachrichtigungen ────────────────────────
|
||||
|
||||
@@ -51,14 +50,25 @@ public class TicketManager {
|
||||
* und sendet optional eine Discord-Webhook-Nachricht.
|
||||
*/
|
||||
public void notifyTeam(Ticket ticket) {
|
||||
// Sicherheitschecks für null-Werte
|
||||
String creatorName = ticket.getCreatorName() != null ? ticket.getCreatorName() : "Unbekannt";
|
||||
String message = ticket.getMessage() != null ? ticket.getMessage() : "";
|
||||
String message = ticket.getMessage() != null ? ticket.getMessage() : "";
|
||||
|
||||
// Kategorie & Priorität optional anzeigen
|
||||
String categoryInfo = "";
|
||||
String priorityInfo = "";
|
||||
if (plugin.getConfig().getBoolean("categories-enabled", true)) {
|
||||
de.ticketsystem.model.ConfigCategory cat = plugin.getCategoryManager().fromKey(ticket.getCategoryKey());
|
||||
categoryInfo = " §7[§r" + cat.getColored() + "§7]";
|
||||
}
|
||||
if (plugin.getConfig().getBoolean("priorities-enabled", true)) {
|
||||
priorityInfo = " §7Priorität: §r" + ticket.getPriority().getColored();
|
||||
}
|
||||
|
||||
String msg = plugin.formatMessage("messages.new-ticket-notify")
|
||||
.replace("{player}", creatorName)
|
||||
.replace("{player}", creatorName)
|
||||
.replace("{message}", message)
|
||||
.replace("{id}", String.valueOf(ticket.getId()));
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
+ categoryInfo + priorityInfo;
|
||||
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.hasPermission("ticket.support") || p.hasPermission("ticket.admin")) {
|
||||
@@ -67,34 +77,67 @@ public class TicketManager {
|
||||
}
|
||||
}
|
||||
|
||||
// Discord-Webhook (asynchron)
|
||||
plugin.getDiscordWebhook().sendNewTicket(ticket);
|
||||
}
|
||||
|
||||
/**
|
||||
* Benachrichtigt den Ersteller, wenn sein Ticket angenommen wurde.
|
||||
* --- FIX PROBLEMK 1: NIE "UNBEKANNT" ---
|
||||
* Setzt claimer_notified = true und persistiert es.
|
||||
*/
|
||||
public void notifyCreatorClaimed(Ticket ticket) {
|
||||
Player creator = Bukkit.getPlayer(ticket.getCreatorUUID());
|
||||
if (creator != null && creator.isOnline()) {
|
||||
|
||||
// 1. Versuch: Name aus dem Ticket-Objekt
|
||||
String claimerName = ticket.getClaimerName();
|
||||
|
||||
// 2. Versuch: Wenn Name fehlt, aber UUID vorhanden -> Namen über Bukkit holen
|
||||
if (claimerName == null && ticket.getClaimerUUID() != null) {
|
||||
if (claimerName == null && ticket.getClaimerUUID() != null)
|
||||
claimerName = Bukkit.getOfflinePlayer(ticket.getClaimerUUID()).getName();
|
||||
}
|
||||
|
||||
// 3. Fallback: Falls immer noch kein Name da ist, nimm "Support" (nie "Unbekannt")
|
||||
if (claimerName == null) claimerName = "Support";
|
||||
|
||||
String msg = plugin.formatMessage("messages.ticket-claimed-notify")
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{claimer}", claimerName);
|
||||
creator.sendMessage(msg);
|
||||
}
|
||||
// Persistiert setzen, damit Join-Listener weiß, dass Spieler bereits informiert ist
|
||||
plugin.getDatabaseManager().markClaimerNotified(ticket.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Wird beim Server-Join aufgerufen – informiert den Spieler über Tickets,
|
||||
* die geclaimt oder weitergeleitet wurden während er offline war.
|
||||
*/
|
||||
public void notifyClaimedWhileOffline(Player player) {
|
||||
// Suche alle Tickets dieses Spielers, die CLAIMED/FORWARDED sind,
|
||||
// aber noch nicht notified wurden
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||
var tickets = plugin.getDatabaseManager().getTicketsByStatus(
|
||||
TicketStatus.CLAIMED, TicketStatus.FORWARDED);
|
||||
|
||||
for (Ticket t : tickets) {
|
||||
if (!t.getCreatorUUID().equals(player.getUniqueId())) continue;
|
||||
if (t.isClaimerNotified()) continue; // wurde schon informiert
|
||||
|
||||
String claimerName = t.getClaimerName() != null ? t.getClaimerName() : "Support";
|
||||
final String name = claimerName;
|
||||
|
||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||
if (!player.isOnline()) return;
|
||||
if (t.getStatus() == TicketStatus.CLAIMED) {
|
||||
String msg = plugin.formatMessage("messages.ticket-claimed-notify")
|
||||
.replace("{id}", String.valueOf(t.getId()))
|
||||
.replace("{claimer}", name);
|
||||
player.sendMessage(msg);
|
||||
} else {
|
||||
String forwardedTo = t.getForwardedToName() != null ? t.getForwardedToName() : "einen Supporter";
|
||||
String msg = plugin.formatMessage("messages.ticket-forwarded-creator-notify")
|
||||
.replace("{id}", String.valueOf(t.getId()))
|
||||
.replace("{supporter}", forwardedTo);
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
});
|
||||
|
||||
plugin.getDatabaseManager().markClaimerNotified(t.getId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,68 +148,69 @@ public class TicketManager {
|
||||
if (creator != null && creator.isOnline()) {
|
||||
String forwardedTo = ticket.getForwardedToName() != null ? ticket.getForwardedToName() : "einen Supporter";
|
||||
String msg = plugin.formatMessage("messages.ticket-forwarded-creator-notify")
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{supporter}", forwardedTo);
|
||||
creator.sendMessage(msg);
|
||||
}
|
||||
// Auch hier notified setzen
|
||||
plugin.getDatabaseManager().markClaimerNotified(ticket.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sendet dem weitergeleiteten Supporter eine Benachrichtigung
|
||||
* und informiert optional Discord.
|
||||
* Sendet dem weitergeleiteten Supporter eine Benachrichtigung.
|
||||
*/
|
||||
public void notifyForwardedTo(Ticket ticket, String fromName) {
|
||||
Player target = Bukkit.getPlayer(ticket.getForwardedToUUID());
|
||||
if (target != null && target.isOnline()) {
|
||||
String creatorName = ticket.getCreatorName() != null ? ticket.getCreatorName() : "Unbekannt";
|
||||
|
||||
String msg = plugin.formatMessage("messages.ticket-forwarded-notify")
|
||||
.replace("{player}", creatorName)
|
||||
.replace("{id}", String.valueOf(ticket.getId()));
|
||||
.replace("{id}", String.valueOf(ticket.getId()));
|
||||
target.sendMessage(msg);
|
||||
}
|
||||
|
||||
// Discord
|
||||
plugin.getDiscordWebhook().sendTicketForwarded(ticket, fromName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Benachrichtigt den Ersteller, wenn sein Ticket geschlossen wurde,
|
||||
* und informiert optional Discord.
|
||||
*/
|
||||
public void notifyCreatorClosed(Ticket ticket) {
|
||||
notifyCreatorClosed(ticket, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Benachrichtigt den Ersteller, wenn sein Ticket geschlossen wurde.
|
||||
*/
|
||||
public void notifyCreatorClosed(Ticket ticket) { notifyCreatorClosed(ticket, null); }
|
||||
|
||||
public void notifyCreatorClosed(Ticket ticket, String closerName) {
|
||||
notifiedClosedTickets.add(ticket.getId());
|
||||
|
||||
Player creator = Bukkit.getPlayer(ticket.getCreatorUUID());
|
||||
if (creator != null && creator.isOnline()) {
|
||||
String comment = (ticket.getCloseComment() != null && !ticket.getCloseComment().isEmpty())
|
||||
? ticket.getCloseComment() : "";
|
||||
String comment = (ticket.getCloseComment() != null && !ticket.getCloseComment().isEmpty())
|
||||
? ticket.getCloseComment() : "";
|
||||
|
||||
if (creator != null && creator.isOnline()) {
|
||||
String msg = plugin.formatMessage("messages.ticket-closed-notify")
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{id}", String.valueOf(ticket.getId()))
|
||||
.replace("{comment}", comment);
|
||||
creator.sendMessage(msg);
|
||||
|
||||
if (!comment.isEmpty()) {
|
||||
if (!comment.isEmpty())
|
||||
creator.sendMessage(plugin.color("&7Kommentar des Supports: &f" + comment));
|
||||
if (plugin.getConfig().getBoolean("rating-enabled", true)) {
|
||||
creator.sendMessage(plugin.color("&8&m "));
|
||||
creator.sendMessage(plugin.color("&6Wie zufrieden bist du mit dem Support?"));
|
||||
creator.sendMessage(plugin.color("&a/ticket rate " + ticket.getId() + " good &7– 👍 Gut"));
|
||||
creator.sendMessage(plugin.color("&c/ticket rate " + ticket.getId() + " bad &7– 👎 Schlecht"));
|
||||
creator.sendMessage(plugin.color("&8&m "));
|
||||
}
|
||||
} else {
|
||||
// Offline → ausstehende Benachrichtigung speichern
|
||||
String pendingMsg = "&e[Ticket #" + ticket.getId() + "] &7Dein Ticket wurde geschlossen."
|
||||
+ (comment.isEmpty() ? "" : " &7Kommentar: &f" + comment)
|
||||
+ (plugin.getConfig().getBoolean("rating-enabled", true)
|
||||
? " &7Bewertung: &e/ticket rate " + ticket.getId() + " good/bad" : "");
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () ->
|
||||
plugin.getDatabaseManager().addPendingNotification(ticket.getCreatorUUID(), pendingMsg));
|
||||
}
|
||||
|
||||
// Discord
|
||||
String closer = closerName != null ? closerName : "Unbekannt";
|
||||
plugin.getDiscordWebhook().sendTicketClosed(ticket, closer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft ob der Ersteller für dieses Ticket bereits über die Schließung informiert wurde.
|
||||
*/
|
||||
public boolean wasClosedNotificationSent(int ticketId) {
|
||||
return notifiedClosedTickets.contains(ticketId);
|
||||
}
|
||||
@@ -183,15 +227,22 @@ public class TicketManager {
|
||||
player.sendMessage(plugin.color("&8&m "));
|
||||
player.sendMessage(plugin.color("&6TicketSystem &7– Befehle"));
|
||||
player.sendMessage(plugin.color("&8&m "));
|
||||
player.sendMessage(plugin.color("&e/ticket create <Text> &7– Neues Ticket erstellen"));
|
||||
player.sendMessage(plugin.color("&e/ticket create [Kategorie] <Text> &7– Neues Ticket erstellen"));
|
||||
player.sendMessage(plugin.color("&e/ticket list &7– Deine Tickets ansehen (GUI)"));
|
||||
player.sendMessage(plugin.color("&e/ticket comment <ID> <Text> &7– Nachricht zu einem Ticket"));
|
||||
|
||||
if (plugin.getConfig().getBoolean("rating-enabled", true))
|
||||
player.sendMessage(plugin.color("&e/ticket rate <ID> <good|bad> &7– Support bewerten"));
|
||||
|
||||
if (player.hasPermission("ticket.support") || player.hasPermission("ticket.admin")) {
|
||||
player.sendMessage(plugin.color("&e/ticket claim <ID> &7– Ticket annehmen"));
|
||||
player.sendMessage(plugin.color("&e/ticket close <ID> [Kommentar] &7– Ticket schließen"));
|
||||
}
|
||||
if (player.hasPermission("ticket.admin")) {
|
||||
player.sendMessage(plugin.color("&e/ticket forward <ID> <Spieler> &7– Ticket weiterleiten"));
|
||||
player.sendMessage(plugin.color("&e/ticket blacklist <add|remove|list> [Spieler] [Grund] &7– Blacklist verwalten"));
|
||||
player.sendMessage(plugin.color("&e/ticket reload &7– Konfiguration neu laden"));
|
||||
player.sendMessage(plugin.color("&e/ticket stats &7– Statistiken anzeigen"));
|
||||
}
|
||||
player.sendMessage(plugin.color("&8&m "));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user