Moderación (Veritesauver)

Veritesauver es el componente de moderación de Verité. Alberga el sistema de castigos interno (baneos, muteos, advertencias, expulsiones y castigos por IP), el árbol de castigos de apuntar y hacer clic, la puerta de verificación por captcha, la inteligencia de cuentas (detección de cuentas alternativas e historial de IP y nombres), la consulta de país por GeoIP, el bloqueo del servidor, la observación de inventarios y cofres de ender, y el control del chat (difusión, limpieza, muteo y modo lento).

Todo el componente puede activarse o desactivarse de forma independiente del resto de Verité.

moderation:
  enabled: true

Mientras la moderación está desactivada, todos los comandos de moderación del personal se rechazan.

Dónde encontrar los comandos y permisos

Esta página explica qué hace cada característica. Para la sintaxis exacta de los comandos, consulta la Referencia de comandos. Para cada nodo de permiso, consulta la Referencia de permisos. Los desarrolladores que integren un sistema de chat personalizado deberían leer Aplicación de moderación personalizada en su lugar.

Castigos

Cada baneo, muteo, advertencia y expulsión es un registro con la misma forma: a quién se castigó, quién lo emitió, el motivo, las horas de inicio y fin, si fue silencioso, y si sigue activo. Los registros nunca se editan sobre la marcha. Levantar un castigo escribe quién lo eliminó y por qué, y conserva el original como historial, así que el rastro completo de moderación de un jugador siempre queda intacto.

Todos los castigos fluyen por un único motor, así que un castigo emitido por un comando, por el árbol de castigos o por una integración siempre se comporta igual: se aplica, se anuncia al personal correcto y se registra de forma coherente.

Baneos y muteos

  • Un baneo impide que un jugador entre. Se aplica en la pantalla de inicio de sesión, así que un jugador baneado es rechazado antes de que llegue siquiera a aparecer.
  • Un muteo impide que un jugador hable en el chat. Un jugador muteado que intenta hablar ve un breve recordatorio de cuánto le queda de muteo.
  • Ambos pueden ser permanentes o temporizados. Los castigos temporizados caducan por su cuenta.
  • Emitir un nuevo baneo o muteo sobre uno existente del mismo tipo lo reemplaza limpiamente. El registro antiguo se conserva como historial, y queda exactamente un castigo activo.

Castigos por IP

Un baneo por IP o muteo por IP cubre la dirección en lugar de una sola cuenta, así que se aplica a cada cuenta que se conecta desde esa dirección. Esto captura a un jugador que intenta evadir un castigo de cuenta iniciando sesión en una cuenta alternativa desde la misma conexión.

Expulsiones

Una expulsión desconecta a un jugador conectado inmediatamente. Deja un registro para el historial pero no impide que el jugador vuelva a entrar.

Levantar castigos

El personal levanta un baneo o muteo con los comandos unban y unmute. Un moderador al que solo se le concede la forma "own" (propia) del permiso de unban o unmute puede levantar solo los castigos que emitió él mismo, lo que permite al personal superior delegar un poder de indulto limitado.

Mensajes de castigo

El texto que ve un jugador castigado se crea en la configuración, así que los propietarios pueden reescribir cada mensaje. Las plantillas admiten placeholders que se rellenan para cada castigo específico:

Placeholder Se rellena con
@duration La duración legible (vacía para un castigo permanente).
@enforcer El miembro del personal que emitió el castigo.
@target El jugador castigado.
@reason El motivo, o "No reason provided." cuando no se dio ninguno.
@punishment La acción en forma verbal.
@total.warns El recuento de advertencias activas del jugador castigado.

Usa \n en una plantilla para un salto de línea.

moderation:
  punish.message.templates:
    ban.template.temporary: {You have been banned for @duration.\n@reason}
    ban.template.permanent: {You have been permanently banned.\n@reason}
    mute.template.temporary: {You have been muted by @enforcer for @duration.\n@reason}
    mute.notice: {You are muted. Time remaining: @remaining}

Límites y tiempos de espera por rango

El personal está sujeto a un techo por rango sobre cuánto puede durar un baneo o muteo temporal que emita, y a un tiempo de espera por rango sobre con qué frecuencia puede castigar. A un miembro del personal nunca se le detiene en seco por pedir una duración demasiado larga: la solicitud simplemente se recorta al tope de su rango, así que el castigo igual aterriza, solo que más corto. Los operadores y los titulares del permiso admin están exentos tanto de los topes como del tiempo de espera.

Detalle técnico

Los niveles de rango (duraciones y tiempo de espera) están actualmente incorporados en lugar de leerse de la configuración, y el seguimiento del tiempo de espera se reinicia cuando el servidor se reinicia.

Árbol de castigos

El árbol de castigos es un menú de apuntar y hacer clic que permite al personal castigar a un jugador a partir de una lista escalonada de categorías de infracción sin memorizar comandos ni duraciones.

Ejecutar el comando punish abre una página de jugadores conectados, cada uno mostrado como su propia cabeza. Hacer clic en un jugador pasa a las categorías de infracción. Proporcionar un nombre de jugador de antemano se salta la página de jugadores y va directo a las categorías.

La página de categorías muestra un icono por cada tipo de infracción sobre el que el rango del miembro del personal tiene permiso para actuar. Hacer clic en una categoría abre una confirmación que muestra el castigo exacto que el árbol ha elegido para ese jugador y esa infracción. La penalización elegida sube una escalera a medida que el mismo jugador reincide en la misma categoría: un primer spam podría ser una advertencia, y uno posterior un muteo o un baneo, así que el personal nunca tiene que recordar la duración correcta.

La confirmación ofrece tres botones:

  • Cancel (rojo) cierra el menú.
  • Approve (verde) aplica el castigo elegido y avanza la escalera de escalada.
  • Manual (azul claro) permite al miembro del personal elegir el castigo por sí mismo. En servidores lo bastante nuevos, esto es un formulario de entrada nativo; en servidores más antiguos, es un aviso de chat con clic. Una elección manual no avanza la escalera.

La escalada se cuenta por jugador, por categoría, y se recuerda entre reinicios. Un miembro del personal solo puede actuar sobre las categorías que su rango tiene concedidas en la configuración, y todo el menú no está disponible mientras el árbol está desactivado.

Configurar el árbol

Cada categoría lleva una escalera ordenada de pasos y un objeto de Minecraft usado como su icono de GUI. Un paso es un castigo aplicado en un recuento de infracción dado: warn, kick, mute, mute: 10m, ban o ban: 14d. Un paso sin duración es permanente.

El bloque permissions.luckperms asigna un rango a las categorías sobre las que ese rango puede actuar. La herencia sigue el orden listado de menos a más privilegiado, así que un rango superior hereda las categorías de los rangos por encima de él en la lista.

moderation:
  tree:
    enabled: true
    permissions:
      luckperms:
        helper: {harassment, threats, spam, advertising}
        mod: {exploiting, discrimination, impersonation}
        admin: {hacking, fraud, evading.punishment}
    categories:
      spam: {warn, mute: 10m, mute: 1h, ban: 3d, ban, minecraft:cactus}
      harassment: {kick, ban: 14d, ban, minecraft:nether_star}
  use.fields: true

Establece use.fields en true para presentar la anulación manual como un formulario de entrada nativo de Minecraft en Minecraft 1.21.7 y posterior, o false para usar siempre el aviso de chat con clic.

Advertencias

El personal emite advertencias, revoca la más reciente e inspecciona las advertencias activas por jugador o de todo el servidor. Una advertencia no se aplica por sí sola: es un aviso que decae. Una advertencia cuenta como activa hasta que caduca, tras lo cual deja de contar hacia el total activo.

moderation:
  expire.warns.after: 7d

Acciones automáticas por umbral

Cuando el recuento de advertencias activas de un jugador alcanza un umbral establecido, el servidor actúa por su cuenta para que el personal no tenga que llevar la cuenta de los avisos a mano. De fábrica, alcanzar tres advertencias activas mutea al jugador durante un día, y alcanzar cinco lo banea temporalmente durante un día. Cada umbral se dispara solo en su recuento exacto, así que una sola advertencia desencadena como máximo una acción. El personal configurado para recibir notificaciones ve un anuncio que nombra al jugador y el recuento que alcanzó.

Detalle técnico

Los umbrales y sus acciones están actualmente incorporados (tres advertencias para un muteo de un día, cinco para un tempban de un día) en lugar de ser configurables.

Puerta de captcha

El sistema de captcha obliga a un jugador a completar un desafío de verificación, ya sea automáticamente cuando hay una señal fuerte de comportamiento automatizado, o manualmente cuando el personal emite uno. Un jugador exento a través del permiso de bypass nunca es desafiado.

Hay dos variantes:

  • Estándar es la comprobación más ligera. Se muestra al jugador un menú de cofre y se le pide que haga clic en un objeto con nombre de entre una cuadrícula de señuelos. Hacer clic en el objeto equivocado cuenta en su contra, y cinco clics erróneos suponen un fallo. El menú se vuelve a abrir si se cierra, el jugador se mantiene en su sitio, y el intento falla tras 30 segundos. No ciega ni ralentiza al jugador ni toma el control de su inventario.
  • Detallada es la comprobación más fuerte. Un código aleatorio de cinco caracteres se dibuja en un objeto de mapa que el jugador sostiene, y debe teclear el código de vuelta en el chat. Mientras está activa, el jugador queda inmovilizado en su sitio, cegado y ralentizado, y no puede moverse, soltar objetos ni abrir su inventario, así que la única acción posible es teclear el código. Teclear exit se rinde, tres intentos erróneos suponen un fallo, y el intento se agota tras 60 segundos. El inventario y la ubicación reales del jugador se guardan y se restauran cuando el desafío termina.

Cuando un desafío concluye, el resultado (aprobado, fallo o tiempo agotado) se anuncia al personal que tiene el permiso de notificación de captcha. Un jugador que falla o agota el tiempo es expulsado.

El personal puede forzar un desafío sobre un jugador o sobre todos los jugadores elegibles a la vez con el comando captcha, eligiendo la variante estándar o detallada.

Inteligencia de cuentas

Cada inicio de sesión se registra: el nombre del jugador, su IP de conexión, la marca de su cliente y su versión de protocolo. Esto construye un rastro de identidad duradero que impulsa los comandos de consulta y las alertas automáticas para el personal.

Detrás de un proxy

Verité resuelve la IP real del cliente del jugador de forma consciente del proxy, confiando primero en un handshake tipo TCPShield y nunca en la propia dirección de socket del proxy. Esto es lo que mantiene precisas la detección de IP compartida y las consultas de país en una red con proxy.

Consultas

El personal tiene un conjunto de comandos de investigación de solo lectura:

  • El historial y el historial de personal enumeran los castigos que ha recibido un jugador o que ha emitido un miembro del personal.
  • La lista de baneos y la lista de muteos pasan página por los castigos actualmente activos de cada tipo.
  • El escaneo de IP duplicada enumera las cuentas que comparten una IP con un jugador dado y marca las que están actualmente baneadas o muteadas, sacando a la luz probables cuentas alternativas. El número de cuentas mostradas está limitado.
  • El historial de IP, el historial de nombres y el último UUID sacan a la luz el rastro de identidad almacenado de un jugador.
  • El rollback de personal levanta en bloque los castigos activos recientes de un miembro del personal, y el prune history elimina los registros inactivos de un jugador.
  • Seen informa de cuándo estuvo un jugador conectado por última vez.
  • Whois construye un expediente completo de la cuenta: identidad, nombres pasados, cliente y versión, referente, país, tiempo de juego, y primera y última conexión. Si el nombre nunca ha tocado este servidor, Verité lo resuelve a través de Mojang para que el personal aún pueda consultar una cuenta real. La última IP exacta está restringida por su propio permiso.
moderation:
  shared.ip.scan.limit: 20

Política de detección de cuentas alternativas

Por defecto, una cuenta alternativa solo se captura mediante un castigo por IP. Activar la política de baneo de cuentas alternativas hace que un baneo cubra automáticamente otras cuentas que comparten la IP del jugador baneado, incluso sin un baneo por IP explícito.

moderation:
  auto.ban.alts: false

Conexiones compartidas

No actives la política de baneo de cuentas alternativas en un servidor donde varios jugadores distintos comparten una dirección IP (por ejemplo, jugadores detrás del mismo hogar o de una red compartida), porque puede capturar cuentas inocentes.

Alertas automáticas de entrada

El personal que tiene el permiso de notificación relevante es alertado automáticamente cuando se conecta un jugador marcado:

  • Entrada de baneado: un jugador baneado, un jugador baneado por IP o una cuenta alternativa baneada es rechazado en la pantalla de inicio de sesión. La alerta nombra al jugador y cuánto le queda de baneo.
  • Entrada de IP duplicada: un jugador que entra comparte una IP con otras cuentas. La alerta enumera las otras cuentas y marca las que están baneadas o muteadas.
  • Entrada de cliente no vanilla: un jugador que entra está en un cliente modificado como Fabric o Forge. La alerta nombra al jugador y la marca de cliente que reporta. Un cliente vanilla es silencioso.

Aplicación en red y por proxy

En una red de varios servidores, Verité puede aplicar baneos y muteos en el proxy, de modo que un jugador sancionado se detiene en el borde de la red, antes de que llegue a cualquier servidor backend. Esto es opcional y está desactivado por defecto: un servidor único no necesita nada de esto.

Verité almacena todos los datos en H2 y no se requiere nada más para compartirlos. La misma base de datos H2 la abren todos los backends y el proxy; tu base de datos existente se usa tal cual, sin ningún paso de conversión al actualizar.

Cómo se comparte la base de datos

Un servidor es el dueño del archivo de la base de datos y lo sirve al resto de la red mediante el propio modo de red de H2. Cada backend lee y escribe los datos compartidos; el proxy solo los lee.

  • embedded es el valor por defecto: un único servidor con su propio archivo de base de datos local. Correcto cuando no ejecutas una red con proxy.
  • host hace que este backend sea el dueño del archivo de la base de datos y lo sirva a la red. Ejecuta exactamente un host por red.
  • remote hace que este backend se conecte al host a través de la red. Indica la dirección del host.
database:
  mode: embedded
  port: 9092
  host.address: "127.0.0.1:9092"
  auto.server: false

Cuando un backend y el proxy comparten la misma máquina y el mismo archivo, auto.server permite que el modo embedded sirva el archivo sin un host dedicado. Déjalo desactivado a menos que ejecutes una red en una sola máquina.

Las sanciones concurrentes son seguras

Varios backends pueden emitir sanciones a la vez contra la base de datos compartida sin que una borre a otra, y levantar una sanción nunca se deshace por una copia obsoleta en otro servidor. Un baneo o muteo emitido en un backend es visible para todos los demás backends y para el proxy.

El plugin del proxy

El mismo jar de Verité se ejecuta en Velocity y en BungeeCord o Waterfall. Colócalo en la carpeta de plugins del proxy como cualquier otro plugin de proxy.

El proxy es estrictamente de solo lectura: nunca registra inicios de sesión, emite sanciones ni escribe nada en la base de datos compartida. Reutiliza la propia lógica de sanciones de Verité, así que un baneo resuelto en el proxy es exactamente la misma decisión que tomaría un backend, cubriendo baneos directos, baneos de IP y alts baneados.

  • Un jugador baneado es rechazado en el inicio de sesión del proxy y ve la pantalla de baneo, así que nunca llega a un backend.
  • El chat de un jugador muteado se bloquea en el proxy. Los comandos muteados también se bloquean, lo que cierra el hueco en el que un proxy gestiona un comando antes de que ningún backend lo vea.
database.mode=remote
database.host.address=127.0.0.1:9092
moderation.ban.alts=false
moderation.enforce.mute.commands=true

La configuración del proxy vive en verite-proxy.properties, en la carpeta de datos de Verité del proxy, escrita con valores por defecto sensatos en el primer arranque. Apunta database.host.address al backend que se ejecuta en modo host, y asegúrate de que el proxy puede alcanzar ese puerto.

GeoIP

Verité puede adjuntar un país a una dirección IP, usado por whois y el comando geoip. Dale un nombre de jugador para usar su IP almacenada más reciente, o una dirección IP directamente.

La consulta de país usa una base de datos MaxMind GeoLite2-Country. Si no hay ninguna base de datos presente, Verité lo dice claramente en lugar de reportar un país erróneo o desconocido. Las direcciones privadas y de loopback nunca pueden resolverse, independientemente de la base de datos.

Usar una base de datos oficial

Para usar una base de datos oficial de MaxMind, coloca GeoLite2-Country.mmdb en la carpeta de datos del plugin. Verité solo descarga una base de datos sustituta cuando el archivo está ausente, así que un archivo existente nunca se sobrescribe.

Bloqueo del servidor

El bloqueo sella el servidor durante una emergencia como una incursión o el abuso de un exploit, sin banear a ningún jugador individual. Mientras el bloqueo está activado, a todos los que intentan entrar se les rechaza en la pantalla de inicio de sesión y se les muestra el motivo que estableció el personal. El personal de confianza con el permiso de bypass de bloqueo aún puede entrar para lidiar con la situación.

El bloqueo es una postura de emergencia temporal, no un ajuste duradero: dura solo hasta que el servidor se reinicia, así que un reinicio siempre lo despeja y el servidor nunca puede quedar accidentalmente inaccesible tras volver a arrancar. El personal lo inicia y termina con el comando de bloqueo y puede dar un motivo personalizado que los jugadores verán.

Observación de inventarios y cofres de ender

La observación es una herramienta del personal para mirar dentro de las pertenencias de otro jugador. Abrir el comando de observación de inventario sobre un jugador muestra todo lo que lleva: barra rápida y almacenamiento principal, armadura, mano secundaria, e incluso las ranuras de fabricación o de estación de trabajo que tenga abiertas en ese momento. El comando de observación de ender hace lo mismo para su cofre de ender.

  • Con permiso de edición, un observador puede mover objetos dentro y fuera, y el cambio le ocurre al objetivo de inmediato.
  • Con solo permiso de visualización, la ventana es de solo lectura.
  • Un observador con el permiso de no-sacar puede meter objetos pero nunca sacarlos, lo que permite al personal inferior reorganizar o depositar sin poder robar.

La observación funciona también con jugadores desconectados, leyendo sus datos guardados y escribiendo cualquier edición de vuelta cuando la ventana se cierra. Algunos jugadores pueden marcarse como protegidos para que no se les pueda espiar a menos que el observador tenga permiso para saltarse esa protección.

Cada sesión se anuncia a la consola: una línea cuando un miembro del personal abre una ventana, una lista de exactamente qué cambió si se añadió o eliminó algo, y una línea cuando la ventana se cierra. Un observador que solo mira y no cambia nada produce solo las líneas de apertura y cierre.

Nombres familiares

Los comandos y los nodos de permiso reflejan el InvSee++ original, así que los hábitos del personal existente y las concesiones de permisos siguen funcionando. Consulta la Referencia de permisos para los nodos de observación.

invsee:
  enable-offline-player-support: true
  enable-unknown-player-support: true
  tabcomplete-offline-players: true
  • enable-offline-player-support permite ver a jugadores que no están conectados actualmente.
  • enable-unknown-player-support permite ver cuentas que nunca se han conectado a este servidor.
  • tabcomplete-offline-players incluye nombres desconectados en el autocompletado.

Control del chat

Verité proporciona los controles colectivos de moderación del chat. El personal con el permiso de bypass del chat nunca se ve afectado por el muteo del chat ni el modo lento.

Difusión

La difusión envía un anuncio del personal a todo el servidor. El mensaje aparece en el chat de todos, destacado con el prefijo del servidor y una línea en blanco encima y debajo para que resalte. Úsala para recordatorios, avisos de eventos o anuncios de reglas.

Limpieza del chat

La limpieza del chat empuja la conversación reciente hacia arriba y fuera de la vista de cada jugador, y luego anuncia quién la limpió. Es útil para borrar spam o reiniciar una discusión. Solo limpia lo que los jugadores ven en ese momento; no elimina ningún registro guardado.

Muteo del chat

El muteo del chat alterna una congelación de chat de todo el servidor. Mientras está activada, los jugadores ordinarios no pueden enviar mensajes y se les dice que el chat está muteado si lo intentan, lo que es útil para calmar un momento acalorado o mantener la atención durante un anuncio. Ejecutar el comando de nuevo desmutea el chat. El personal con el permiso de bypass siempre puede hablar.

Modo lento

El modo lento establece una espera mínima entre mensajes de chat. Dale una duración como 10s, 5m o 2h, y cada jugador debe esperar ese tiempo entre mensajes; si intentan hablar demasiado pronto se les dice cuánto tiempo queda. Añade un nombre de jugador para aplicar un modo lento personal a una sola persona en lugar de a todos. Usa off para despejarlo, ya sea globalmente o para un jugador nombrado. Un modo lento personal tiene prioridad sobre el de todo el servidor, y el modo lento máximo es de 24 horas.

Lista negra de comandos para muteados

A un jugador muteado se le impide enrutar el chat a través de comandos como /msg o /me. Cuando un jugador muteado ejecuta un comando de la lista negra, se cancela y se le vuelve a mostrar su motivo de muteo. La lista negra es configurable.

moderation:
  muted.command.blacklist:
    - "me"
    - "say"
    - "msg"
    - "tell"
    - "r"

Redes con proxy

Si tu servidor está alojado en una red con inyección por proxy, es posible que estos comandos los gestione el proxy antes de que ningún backend los vea, en cuyo caso un jugador muteado aún podría usarlos. Ejecuta el plugin de proxy de Verité para cerrar este hueco: consulta Aplicación en red y por proxy. Para una configuración de chat o proxy personalizada, consulta Aplicación de moderación personalizada.

Exenciones y protección de rango

Verité comprueba quién no puede ser castigado antes de aplicar cualquier castigo.

  • Exención por permiso: un objetivo que tiene el permiso de exención no puede ser castigado a menos que quien lo impone tenga el permiso de exempt-bypass. La exención puede acotarse a un tipo de castigo, así que un jugador exento de baneos aún puede ser muteable.
  • Protección de rango: cuando está activada, quien impone el castigo no puede castigar a un objetivo cuyo peso de grupo de LuckPerms sea igual o superior al suyo, así que el personal no puede castigar a pares o superiores. Un operador siempre se trata como el rango más alto, así que un no-operador nunca puede castigar a un operador y un operador siempre puede castigar. La consola nunca se bloquea.
moderation:
  use.rank.weights: true
  exempt:
    use.group.weights: false
    permit.same.weight: true

Detalle técnico

Las comprobaciones de permiso y rango se aplican solo a objetivos conectados, porque los permisos en vivo de un jugador desconectado no se pueden leer. LuckPerms es opcional: cuando está ausente, la comparación de pesos pasa de largo y nunca bloquea al personal.