Integration benutzerdefinierter Chat-Systeme¶
Verité filtert Nachrichten normalerweise automatisch. Einige Chat-Plugins fangen jedoch das normale Chat-Ereignis von Minecraft ab und übernehmen die Nachrichtenzustellung selbst.
Wenn dein Plugin dies tut, erhält Verité die ursprüngliche Nachricht möglicherweise nie und kann sie daher nicht filtern. In diesem Fall solltest du die Nachricht durch Verité prüfen lassen, bevor dein Plugin sie sendet.
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.
Java-Integration¶
Verité stellt eine kleine öffentliche API bereit, die speziell für Integrationen wie benutzerdefinierte Chat-Systeme vorgesehen ist.
1. Verité als optionale Abhängigkeit hinzufügen¶
Füge Verité zu deiner plugin.yml hinzu:
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.VeriteFilter");
available = true;
} catch (ClassNotFoundException ignored) {
available = false;
}
VERITE_AVAILABLE = available;
}
Deine Integration kann dann einfach nichts tun, wenn Verité nicht installiert ist.
3. Die Nachricht filtern¶
Bevor dein benutzerdefiniertes Chat-System eine Nachricht sendet, übergib sie an VeriteFilter:
if (VERITE_AVAILABLE) {
FilterResult result = VeriteFilter.check(
player.getUniqueId(),
message
);
if (result.blocks()) {
player.sendMessage(VeriteFilter.blockMessage());
return;
}
}
Mehr ist für eine grundlegende Integration nicht erforderlich.
check() lässt die Nachricht durch den Filter von Verité laufen und zeichnet die Meldung für den Spieler auf. Wenn .blocks() den Wert true zurückgibt, sollte dein Chat-System verhindern, dass die Nachricht gesendet wird.
Die Filterkategorie verwenden¶
Manchmal möchtest du wissen, warum Verité eine Nachricht erkannt hat:
FilterResult result = VeriteFilter.check(
player.getUniqueId(),
message
);
switch (result) {
case CLEAN -> {
// Normal senden
}
case SELF_HARM, ABUSE -> {
// Angemessen behandeln
}
default -> {
// Gewöhnlicher blockierter Inhalt
}
}
Folgende Ergebnisse sind möglich:
CLEANBLOCKPROFANITYSELF_HARMABUSE
Bei jedem Ergebnis außer CLEAN gibt .blocks() den Wert true zurück.
Wichtig:
SELF_HARMundABUSEsind dafür vorgesehen, diese Nachrichten anders als gewöhnliche Regelverstöße behandeln zu können. Wir empfehlen, sie nicht automatisch als strafbare Chat-Verstöße zu behandeln.
Wiederholte Nachrichten erkennen¶
Wenn dein Chat-System zwischen gefilterten Inhalten und der Erkennung wiederholter Nachrichten unterscheiden muss, verwende die wiederholungssensitive Überladung:
FilterOutcome outcome = VeriteFilter.check(
player.getUniqueId(),
message,
true
);
if (outcome.blocks()) {
if (outcome.repeat()) {
player.sendMessage(VeriteFilter.repeatMessage());
} else {
player.sendMessage(VeriteFilter.blockMessage());
}
return;
}
outcome.category() liefert die normale Filterkategorie, während outcome.repeat() angibt, ob die Nachricht blockiert wurde, weil sie wiederholt wurde.
Andere Benutzerinhalte filtern¶
Die API ist nicht auf den Chat beschränkt.
Wenn dein Plugin von Benutzern verfasste Inhalte wie Spitznamen, Präfixe, Team-Tags oder ähnliche Felder akzeptiert, kannst du diese durch denselben Filter prüfen lassen:
Verwende für Text, der keinem bestimmten Spieler zugeordnet ist, VeriteFilter.ANONYMOUS:
Anonyme Prüfungen geben weiterhin die entsprechende Filterkategorie zurück, fügen aber dem Datensatz keines Spielers eine Meldung hinzu.
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 Filtersyntax von Verité automatisch zur Verfügung.
Benutzerdefinierten Chat filtern¶
Wenn dein Skript das Senden von Chatnachrichten bereits selbst übernimmt, prüfe die Nachricht vor dem Senden:
Mit for player teilst du Verité mit, wer die Nachricht gesendet hat, und die Meldung wird für diesen Spieler aufgezeichnet.
Ohne Spieler:
Verité führt eine reine Filterprüfung durch, ohne eine Meldung aufzuzeichnen. Dies ist beispielsweise für Namen, Tags, Schilder oder andere Texte nützlich, die keinem bestimmten Spieler als Verstoß angerechnet werden sollen.
Prüfen, warum eine Nachricht blockiert wurde¶
Für mehr Kontrolle kannst du das Filterergebnis abrufen:
set {_result} to filter result of {_msg} for player
if {_result} is "self_harm":
# Separat behandeln
stop
if {_result} is "abuse":
# Separat behandeln
stop
if {_result} is not "clean":
send block message to player
stop
Das Ergebnis ist einer der folgenden Werte:
clean, block, profanity, self_harm oder abuse
Wichtig: Erwäge,
self_harmundabusegetrennt von gewöhnlichen Moderationsverstößen zu behandeln, anstatt den Spieler automatisch zu bestrafen.
Anzahl der Meldungen eines Spielers prüfen¶
Du kannst außerdem abrufen, wie viele Nachrichten Verité für einen Spieler markiert hat:
Dein eigenes Moderationssystem kann diesen Wert verwenden, wenn du bei wiederholten Verstößen ein anderes Verhalten möchtest.
Skript-Syntaxreferenz¶
%string% is blocked [for %-player%]
%string% is not blocked [for %-player%]
filter result of %string% [for %-player%]
block message
message flags of %player%
Der optionale Spieler ist von Bedeutung:
Mit einem Spieler: Das Filterergebnis wird für diesen Spieler aufgezeichnet.
Ohne Spieler: Verité prüft nur den Text und zeichnet keine Meldung auf.
API-Referenz¶
Die öffentliche API befindet sich unter:
Die primäre Klasse für Chat-Integrationen ist:
Zu den nützlichen Methoden gehören:
VeriteFilter.check(UUID player, String message)
VeriteFilter.check(UUID player, String message, boolean repeatAware)
VeriteFilter.count(UUID player)
VeriteFilter.blockMessage()
VeriteFilter.repeatMessage()
VeriteFilter.selfHarmMessage()
VeriteFilter.blockNotice(FilterResult result, String message)
VeriteFilter.ANONYMOUS kann beim Filtern von Text verwendet werden, der keinem Spieler zugeordnet ist.
Verité stellt außerdem seine Normalisierungsfunktionen für Integrationen zur Verfügung, die diese benötigen. Dazu gehören Akzentnormalisierung, Entfernung von Entities, Reduzierung wiederholter Zeichen, Fingerprinting und das Bereinigen der Textenden. Diese Funktionen sind thread-safe und müssen im Allgemeinen nicht manuell aufgerufen werden, bevor check() verwendet wird.
Für die meisten benutzerdefinierten Chat-Integrationen benötigst du lediglich:
Verité übernimmt den Rest.