Aplicación de moderación personalizada
Verité normalmente aplica los mutes, el modo lento y las congelaciones de chat 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 vea el mensaje, así que sus propias comprobaciones de mute y modo lento nunca se ejecutan. En ese caso, debes preguntar a Verité sobre el remitente antes de que tu plugin envíe el mensaje, y detener el mensaje tú mismo cuando Verité lo indique.
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.
Esta es la contraparte de moderación de la guía de Integración de chat personalizado. La guía del filtro examina el contenido del mensaje; esta guía aplica los mutes, el modo lento y las congelaciones de chat.
Integración con Java
La superficie de moderación se encuentra en teacommontea.api.VeriteModeration. Cada método devuelve un valor seguro cuando el módulo de moderación está desactivado, así que quien lo llama nunca tiene que tratarlo como caso especial.
1. Añade Verité como dependencia opcional
Añade Verité a tu plugin.yml:
softdepend:
- VeriteUtilizar 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.VeriteModeration");
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. Aplica los mutes
Antes de que tu sistema de chat personalizado envíe un mensaje, pregunta a Verité si el remitente está muteado:
if (VERITE_AVAILABLE) {
if (VeriteModeration.muteGate(player)) {
return;
}
}muteGate devuelve true cuando el jugador está muteado, y al hacerlo le envía el aviso de muteo por ti. Cuando devuelve true, detén el mensaje.
Si prefieres construir el aviso tú mismo, lee el muteo activo en su lugar:
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 es una comprobación pura y no envía nada. activeMute devuelve el muteo como un Punishment, del que puedes leer reason(), permanent() y remaining(now).
4. Aplica el modo lento y la congelación de chat
Verité tiene dos frenos de chat para todo el servidor: una congelación global de chat establecida por el personal, y el modo lento por jugador. Regula ambos de la misma forma que regulas los mutes:
if (VeriteModeration.chatMuteGate(player)) {
return;
}
if (VeriteModeration.slowmodeGate(player)) {
return;
}Cada uno devuelve true cuando el jugador debe ser detenido, y le envía el motivo (el aviso de chat congelado o la espera restante del modo lento) al hacerlo. Comprueba ambos antes de enviar.
Poniéndolo todo junto
Un manejador de chat completo que reproduce la aplicación de Verité tiene este aspecto:
if (VERITE_AVAILABLE) {
if (VeriteModeration.muteGate(player)) {
return;
}
if (VeriteModeration.chatMuteGate(player)) {
return;
}
if (VeriteModeration.slowmodeGate(player)) {
return;
}
}
sendMessage(player, message);Reaccionar ante los castigos
Si tu plugin necesita saber cuándo se emite o se levanta un castigo (para registro, notificaciones o sincronización de otro sistema), registra un listener:
VeriteModeration.registerListener(new ModerationListener() {
@Override
public void entryAdded(Punishment punishment) {
}
@Override
public void entryRemoved(Punishment punishment) {
}
});entryAdded se dispara cuando se emite un castigo, entryRemoved cuando se levanta uno. Cada Punishment lleva el objetivo, el tipo, el motivo, la duración, quien lo emitió y si fue silencioso. Llama a unregisterListener con el mismo listener para dejar de recibir eventos.
Bloqueo del servidor
Verité puede sellar el servidor tras un bloqueo. Tu plugin puede leer el estado de bloqueo o accionarlo a través de teacommontea.api.VeriteLockdown:
if (VeriteLockdown.active()) {
String reason = VeriteLockdown.reason();
}
VeriteLockdown.begin("Maintenance");
VeriteLockdown.end();active() informa si un bloqueo está en efecto, reason() devuelve el motivo actual, begin(reason) inicia uno y end() lo levanta. Usa active() para regular tu propio comportamiento durante un bloqueo, o begin y end para accionar el bloqueo desde tus propios comandos.
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 moderación de Verité estará disponible automáticamente.
Aplicar mutes, modo lento y congelación
Si tu script ya se encarga de enviar los mensajes de chat, comprueba el remitente antes de enviar. Usa estos dentro de tu evento de chat:
if chat is frozen for player:
stop
if player is on slowmode:
stopchat is frozen informa de la congelación global del chat, y player is on slowmode informa del tiempo de espera del modo lento por jugador. Ambos envían al jugador el motivo como efecto secundario, así que úsalos donde tengas intención de aplicar la norma, no solo para leer el estado.
Para comprobar el muteo personal de un jugador:
if player is muted:
stopplayer is muted lee el estado de muteo activo sin enviar nada, así que combínalo con tu propio aviso.
Controlar el bloqueo
Puedes iniciar o levantar un bloqueo del servidor desde un script:
begin message lockdown with reason "Maintenance"
end message lockdownEl motivo es opcional; si se omite, se usa una etiqueta genérica.
Referencia de sintaxis de Skript
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 y is on slowmode envían al jugador un aviso cuando coinciden, así que úsalos en un manejador de chat donde tengas intención de detener el mensaje.
Referencia de la API
La API pública se encuentra en:
teacommontea.apiLas clases principales para la aplicación de moderación son:
VeriteModeration
VeriteLockdownEntre los métodos útiles se incluyen:
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()Los métodos de puerta (muteGate, chatMuteGate, slowmodeGate) deciden si detener al jugador y le envían el motivo. Los métodos de consulta (isMuted, activeMute) solo leen el estado y no envían nada.
Para la mayoría de las integraciones de chat personalizado, aplicar las tres puertas en orden es todo lo que necesitas:
if (VeriteModeration.muteGate(player)
|| VeriteModeration.chatMuteGate(player)
|| VeriteModeration.slowmodeGate(player)) {
return;
}Verité se encarga del resto.