Integración de chat personalizado¶
Verité normalmente filtra los mensajes de forma automática. Sin embargo, algunos plugins de chat interceptan el evento de chat normal de Minecraft y gestionan por sí mismos el envío de los mensajes.
Si tu plugin hace esto, es posible que Verité nunca reciba el mensaje original para filtrarlo. En ese caso, debes pasar el mensaje por Verité antes de que tu plugin lo envíe.
Solo necesitas esta guía si tu plugin gestiona o sustituye el chat normal de Minecraft. Los servidores que utilizan el chat estándar no necesitan ninguna configuración adicional.
Integración con Java¶
Verité proporciona una pequeña API pública diseñada específicamente para integraciones como sistemas de chat personalizados.
1. Añade Verité como dependencia opcional¶
Añade Verité a tu plugin.yml:
Utilizar una dependencia opcional garantiza que Verité se cargue antes que tu integración cuando esté instalado, sin convertirlo en un requisito obligatorio para que tu plugin pueda iniciarse.
2. Comprueba si la API está disponible¶
Si Verité es opcional, comprueba que la API esté disponible antes de utilizarla:
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;
}
De esta forma, tu integración puede simplemente no hacer nada cuando Verité no esté instalado.
3. Filtra el mensaje¶
Antes de que tu sistema de chat personalizado envíe un mensaje, pásalo por VeriteFilter:
if (VERITE_AVAILABLE) {
FilterResult result = VeriteFilter.check(
player.getUniqueId(),
message
);
if (result.blocks()) {
player.sendMessage(VeriteFilter.blockMessage());
return;
}
}
Eso es todo lo necesario para una integración básica.
check() pasa el mensaje por el filtro de Verité y registra la marca asociada al jugador. Si .blocks() devuelve true, tu sistema de chat debe impedir que se envíe el mensaje.
Usar la categoría del filtro¶
A veces querrás saber por qué Verité ha detectado un mensaje:
FilterResult result = VeriteFilter.check(
player.getUniqueId(),
message
);
switch (result) {
case CLEAN -> {
// Enviar normalmente
}
case SELF_HARM, ABUSE -> {
// Gestionar de forma adecuada
}
default -> {
// Contenido bloqueado normal
}
}
Los posibles resultados son:
CLEANBLOCKPROFANITYSELF_HARMABUSE
Cualquier resultado excepto CLEAN hace que .blocks() devuelva true.
Importante:
SELF_HARMyABUSEexisten para que estos mensajes puedan gestionarse de forma diferente a las infracciones normales de las reglas. Recomendamos no tratarlos automáticamente como infracciones de chat que deban ser sancionadas.
Detectar mensajes repetidos¶
Si tu sistema de chat necesita distinguir entre contenido filtrado y la detección de mensajes repetidos, utiliza la sobrecarga con detección de repeticiones:
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() proporciona la categoría normal del filtro, mientras que outcome.repeat() indica si el mensaje se bloqueó por estar repetido.
Filtrar otro contenido de los usuarios¶
La API no se limita al chat.
Si tu plugin acepta contenido escrito por los usuarios, como apodos, prefijos, etiquetas de equipo o campos similares, puedes pasarlo por el mismo filtro:
Para texto que no pertenezca a ningún jugador en particular, utiliza VeriteFilter.ANONYMOUS:
Las comprobaciones anónimas siguen devolviendo la categoría de filtro correspondiente, pero no añaden ninguna marca al registro de ningún jugador.
Usar Verité con Skript¶
Si tu sistema de chat personalizado está escrito en Skript, no necesitas interactuar con la API de Java.
Con Verité y Skript instalados, la sintaxis de filtrado de Verité estará disponible automáticamente.
Filtrar un chat personalizado¶
Si tu script ya se encarga de enviar los mensajes de chat, comprueba el mensaje antes de enviarlo:
Incluir for player indica a Verité quién ha enviado el mensaje y registra la marca asociada a ese jugador.
Sin un jugador:
Verité realiza una comprobación pura del filtro sin registrar ninguna marca. Esto resulta útil para elementos como nombres, etiquetas, carteles u otros textos que no deban contar como una infracción de un jugador específico.
Comprobar por qué se ha bloqueado un mensaje¶
Para tener un mayor control, obtén el resultado del filtro:
set {_result} to filter result of {_msg} for player
if {_result} is "self_harm":
# Gestionar por separado
stop
if {_result} is "abuse":
# Gestionar por separado
stop
if {_result} is not "clean":
send block message to player
stop
El resultado será uno de los siguientes:
clean, block, profanity, self_harm o abuse
Importante: Considera gestionar
self_harmyabusepor separado de las infracciones normales de moderación, en lugar de sancionar automáticamente al jugador.
Comprobar el número de marcas de un jugador¶
También puedes obtener el número de mensajes que Verité ha marcado para un jugador:
Tu propio sistema de moderación puede utilizar este valor si quieres aplicar un comportamiento diferente ante infracciones repetidas.
Referencia de sintaxis de Skript¶
%string% is blocked [for %-player%]
%string% is not blocked [for %-player%]
filter result of %string% [for %-player%]
block message
message flags of %player%
El jugador opcional es importante:
Con un jugador: el resultado del filtro se registra para ese jugador.
Sin un jugador: Verité solo comprueba el texto y no registra ninguna marca.
Referencia de la API¶
La API pública se encuentra en:
La clase principal para las integraciones de chat es:
Entre los métodos útiles se incluyen:
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 puede utilizarse para filtrar texto que no esté asociado a un jugador.
Verité también expone sus utilidades de normalización para las integraciones que las necesiten, incluidas la normalización de acentos, la eliminación de entidades, la reducción de caracteres repetidos, el fingerprinting y el recorte de los extremos. Estas funciones son thread-safe y, por lo general, no es necesario llamarlas manualmente antes de utilizar check().
Para la mayoría de las integraciones de chat personalizado, solo necesitas:
Verité se encarga del resto.