Benutzerdefinierte Moderationsdurchsetzung
Verité setzt Stummschaltungen, Slowmode und Chat-Freezes normalerweise automatisch durch. Einige Chat-Plugins fangen jedoch das normale Chat-Ereignis von Minecraft ab und übernehmen die Nachrichtenzustellung selbst.
Wenn dein Plugin dies tut, sieht Verité die Nachricht möglicherweise nie, sodass seine eigenen Stummschaltungs- und Slowmode-Prüfungen nie ausgeführt werden. In diesem Fall solltest du Verité vor dem Senden der Nachricht nach dem Absender fragen und die Nachricht selbst stoppen, wenn Verité es anweist.
Du benötigst diese Anleitung nur, wenn dein Plugin den normalen Minecraft-Chat verarbeitet oder ersetzt. Server, die den Standard-Chat verwenden, benötigen keine zusätzliche Einrichtung.
Dies ist das Moderationsgegenstück zur Anleitung Integration benutzerdefinierter Chat-Systeme. Die Filteranleitung prüft den Nachrichteninhalt; diese Anleitung setzt Stummschaltungen, Slowmode und Chat-Freezes durch.
Java-Integration
Die Moderationsoberfläche befindet sich in teacommontea.api.VeriteModeration. Jede Methode gibt einen sicheren Wert zurück, wenn das Moderationsmodul deaktiviert ist, sodass ein Aufrufer diesen Fall nie gesondert behandeln muss.
1. Verité als optionale Abhängigkeit hinzufügen
Füge Verité zu deiner plugin.yml hinzu:
softdepend:
- VeriteEine optionale Abhängigkeit stellt sicher, dass Verité vor deiner Integration geladen wird, sofern es installiert ist, ohne Verité zu einer zwingenden Voraussetzung für den Start deines Plugins zu machen.
2. Prüfen, ob die API verfügbar ist
Wenn Verité optional ist, prüfe vor der Verwendung, ob die API verfügbar ist:
private static final boolean VERITE_AVAILABLE;
static {
boolean available;
try {
Class.forName("teacommontea.api.VeriteModeration");
available = true;
} catch (ClassNotFoundException ignored) {
available = false;
}
VERITE_AVAILABLE = available;
}Deine Integration kann dann einfach nichts tun, wenn Verité nicht installiert ist.
3. Stummschaltungen durchsetzen
Bevor dein benutzerdefiniertes Chat-System eine Nachricht sendet, frage Verité, ob der Absender stummgeschaltet ist:
if (VERITE_AVAILABLE) {
if (VeriteModeration.muteGate(player)) {
return;
}
}muteGate gibt true zurück, wenn der Spieler stummgeschaltet ist, und sendet ihm dabei den Stummschaltungshinweis für dich. Wenn es true zurückgibt, stoppe die Nachricht.
Wenn du den Hinweis lieber selbst erstellst, lies stattdessen die aktive Stummschaltung:
if (VeriteModeration.isMuted(player.getUniqueId())) {
Punishment mute = VeriteModeration.activeMute(player.getUniqueId());
String line = mute.permanent()
? "You are muted."
: "You are muted for " + mute.remaining(System.currentTimeMillis()) + " more milliseconds.";
player.sendMessage(line);
return;
}isMuted ist eine reine Prüfung und sendet nichts. activeMute gibt die Stummschaltung als Punishment zurück, aus der du reason(), permanent() und remaining(now) lesen kannst.
4. Slowmode und Chat-Freeze durchsetzen
Verité hat zwei serverweite Chat-Bremsen: einen globalen Chat-Freeze, der von Mitarbeitern gesetzt wird, und einen spielerbezogenen Slowmode. Gate beide auf dieselbe Weise wie Stummschaltungen:
if (VeriteModeration.chatMuteGate(player)) {
return;
}
if (VeriteModeration.slowmodeGate(player)) {
return;
}Jedes gibt true zurück, wenn der Spieler gestoppt werden sollte, und sendet ihm dabei den Grund (den Chat-Freeze-Hinweis oder die verbleibende Slowmode-Wartezeit). Prüfe beide vor dem Senden.
Alles zusammensetzen
Ein vollständiger Chat-Handler, der Verités Durchsetzung nachbildet, sieht so aus:
if (VERITE_AVAILABLE) {
if (VeriteModeration.muteGate(player)) {
return;
}
if (VeriteModeration.chatMuteGate(player)) {
return;
}
if (VeriteModeration.slowmodeGate(player)) {
return;
}
}
sendMessage(player, message);Auf Strafen reagieren
Wenn dein Plugin wissen muss, wann eine Strafe verhängt oder aufgehoben wird (zum Loggen, für Benachrichtigungen oder zum Synchronisieren eines anderen Systems), registriere einen Listener:
VeriteModeration.registerListener(new ModerationListener() {
@Override
public void entryAdded(Punishment punishment) {
}
@Override
public void entryRemoved(Punishment punishment) {
}
});entryAdded wird ausgelöst, wenn eine Strafe verhängt wird, entryRemoved, wenn eine aufgehoben wird. Jede Punishment trägt das Ziel, den Typ, den Grund, die Dauer, den Ausführenden und ob sie still war. Rufe unregisterListener mit demselben Listener auf, um den Empfang von Ereignissen zu beenden.
Server-Lockdown
Verité kann den Server hinter einem Lockdown abriegeln. Dein Plugin kann den Lockdown-Zustand lesen oder ihn über teacommontea.api.VeriteLockdown steuern:
if (VeriteLockdown.active()) {
String reason = VeriteLockdown.reason();
}
VeriteLockdown.begin("Maintenance");
VeriteLockdown.end();active() meldet, ob ein Lockdown in Kraft ist, reason() gibt den aktuellen Grund zurück, begin(reason) startet einen und end() hebt ihn auf. Verwende active(), um dein eigenes Verhalten während eines Lockdowns zu gaten, oder begin und end, um den Lockdown über deine eigenen Befehle zu steuern.
Verité mit Skript verwenden
Wenn dein benutzerdefiniertes Chat-System in Skript geschrieben ist, musst du nicht mit der Java-API interagieren.
Wenn Verité und Skript installiert sind, steht die Moderationssyntax von Verité automatisch zur Verfügung.
Stummschaltungen, Slowmode und Freeze durchsetzen
Wenn dein Skript das Senden von Chatnachrichten bereits selbst übernimmt, prüfe den Absender vor dem Senden. Verwende diese innerhalb deines Chat-Ereignisses:
if chat is frozen for player:
stop
if player is on slowmode:
stopchat is frozen meldet den globalen Chat-Freeze, und player is on slowmode meldet die spielerbezogene Slowmode-Abklingzeit. Beide senden dem Spieler den Grund als Nebeneffekt, verwende sie also dort, wo du durchsetzen willst, nicht nur, um den Zustand zu lesen.
Um die persönliche Stummschaltung eines Spielers zu prüfen:
if player is muted:
stopplayer is muted liest den Zustand der aktiven Stummschaltung, ohne etwas zu senden, kombiniere es also mit deinem eigenen Hinweis.
Lockdown steuern
Du kannst einen Server-Lockdown aus einem Skript starten oder aufheben:
begin message lockdown with reason "Maintenance"
end message lockdownDer Grund ist optional; wenn er weggelassen wird, wird ein generisches Label verwendet.
Skript-Syntaxreferenz
player is muted
player is not muted
chat is frozen [for %-player%]
player is rate limited
player is on slowmode
begin message lockdown [(with reason|for) %-string%]
end message lockdownchat is frozen, is rate limited und is on slowmode senden dem Spieler bei einem Treffer einen Hinweis, verwende sie also in einem Chat-Handler, in dem du die Nachricht stoppen willst.
API-Referenz
Die öffentliche API befindet sich unter:
teacommontea.apiDie primären Klassen für die Moderationsdurchsetzung sind:
VeriteModeration
VeriteLockdownZu den nützlichen Methoden gehören:
VeriteModeration.muteGate(Player player)
VeriteModeration.chatMuteGate(Player player)
VeriteModeration.slowmodeGate(Player player)
VeriteModeration.isMuted(UUID player)
VeriteModeration.activeMute(UUID player)
VeriteModeration.registerListener(ModerationListener listener)
VeriteModeration.unregisterListener(ModerationListener listener)
VeriteLockdown.active()
VeriteLockdown.reason()
VeriteLockdown.begin(String reason)
VeriteLockdown.end()Die Gate-Methoden (muteGate, chatMuteGate, slowmodeGate) entscheiden sowohl, ob der Spieler gestoppt werden soll, als auch senden ihm den Grund. Die Abfragemethoden (isMuted, activeMute) lesen nur den Zustand und senden nichts.
Für die meisten benutzerdefinierten Chat-Integrationen ist das Durchsetzen der drei Gates der Reihe nach alles, was du brauchst:
if (VeriteModeration.muteGate(player)
|| VeriteModeration.chatMuteGate(player)
|| VeriteModeration.slowmodeGate(player)) {
return;
}Verité übernimmt den Rest.