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:
  - Verite

Eine 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:
    stop

chat 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:
    stop

player 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 lockdown

Der 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 lockdown

chat 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.api

Die primären Klassen für die Moderationsdurchsetzung sind:

VeriteModeration
VeriteLockdown

Zu 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.