Moderazione (Veritesauver)

Veritesauver è il componente di moderazione di Verité. Contiene il sistema di punizioni interno (ban, mute, avvertimenti, kick e punizioni IP), l'albero delle punizioni punta-e-clicca, il gate di verifica captcha, l'intelligence sugli account (rilevamento degli alt e cronologia di IP e nomi), la ricerca del paese GeoIP, il blocco del server, l'osservazione dell'inventario e del baule dell'End, e il controllo della chat (broadcast, pulizia, mute e slowmode).

L'intero componente può essere attivato o disattivato indipendentemente dal resto di Verité.

moderation:
  enabled: true

Mentre la moderazione è disabilitata, ogni comando di moderazione dello staff viene rifiutato.

Dove trovare i comandi e i permessi

Questa pagina spiega cosa fa ciascuna funzionalità. Per la sintassi esatta dei comandi, vedi il Riferimento dei comandi. Per ogni nodo di permesso, vedi il Riferimento dei permessi. Gli sviluppatori che integrano un sistema di chat personalizzato dovrebbero leggere invece Applicazione della moderazione personalizzata.

Punizioni

Ogni ban, mute, avvertimento e kick è un record con la stessa forma: chi è stato punito, chi l'ha emesso, il motivo, i tempi di inizio e fine, se era silenzioso e se è ancora attivo. I record non vengono mai modificati sul posto. Revocare una punizione scrive chi l'ha rimossa e perché, e mantiene l'originale come cronologia, così che la traccia di moderazione completa di un giocatore sia sempre intatta.

Tutte le punizioni passano attraverso un unico motore, così che una punizione emessa da un comando, dall'albero delle punizioni o da un'integrazione si comporti sempre allo stesso modo: viene applicata, annunciata allo staff giusto e registrata in modo coerente.

Ban e mute

  • Un ban impedisce a un giocatore di entrare. Viene applicato alla schermata di login, così che un giocatore bannato venga respinto prima ancora di apparire.
  • Un mute impedisce a un giocatore di parlare in chat. Un giocatore mutato che tenta di parlare vede un breve promemoria di quanto tempo resta al suo mute.
  • Entrambi possono essere permanenti o a tempo. Le punizioni a tempo scadono da sole.
  • Emettere un nuovo ban o mute su uno esistente dello stesso tipo lo sostituisce in modo pulito. Il vecchio record viene mantenuto come cronologia, e resta esattamente una punizione attiva.

Punizioni IP

Un ban IP o un mute IP copre l'indirizzo anziché un singolo account, quindi si applica a ogni account che si connette da quell'indirizzo. Questo cattura un giocatore che tenta di eludere una punizione dell'account accedendo su un account alternativo dalla stessa connessione.

Kick

Un kick disconnette immediatamente un giocatore online. Lascia un record per la cronologia ma non impedisce al giocatore di rientrare.

Revocare le punizioni

Lo staff revoca un ban o un mute con i comandi unban e unmute. Un moderatore a cui è concessa solo la forma "own" del permesso di unban o unmute può revocare solo le punizioni che ha emesso lui stesso, il che permette allo staff senior di delegare un potere di perdono limitato.

Messaggi di punizione

Il testo che un giocatore punito vede è scritto nella configurazione, così che i proprietari possano riscrivere ogni messaggio. I modelli supportano placeholder che vengono riempiti per ciascuna punizione specifica:

Placeholder Riempito con
@duration La lunghezza leggibile dall'uomo (vuota per una punizione permanente).
@enforcer Il membro dello staff che ha emesso la punizione.
@target Il giocatore punito.
@reason Il motivo, oppure "No reason provided." quando non ne è stato fornito uno.
@punishment L'azione in forma verbale.
@total.warns Il conteggio degli avvertimenti attivi del giocatore punito.

Usa \n in un modello per un'interruzione di riga.

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}

Limiti e cooldown per rango

Lo staff è soggetto a un tetto per rango su quanto lungo un ban o mute temporaneo possa emettere, e a un cooldown per rango su quanto spesso possa punire. Un membro dello staff non viene mai bloccato del tutto per aver richiesto una durata troppo lunga: la richiesta viene semplicemente ridotta al tetto del suo rango, così che la punizione arrivi comunque, solo più breve. Gli operatori e i detentori del permesso admin sono esenti sia dai limiti sia dal cooldown.

Dettaglio tecnico

I livelli di rango (durate e cooldown) sono attualmente integrati anziché letti dalla configurazione, e il tracciamento del cooldown si azzera quando il server si riavvia.

Albero delle punizioni

L'albero delle punizioni è un menu punta-e-clicca che permette allo staff di punire un giocatore da un elenco crescente di categorie di offesa senza memorizzare comandi o durate.

Eseguire il comando punish apre una pagina di giocatori online, ciascuno mostrato come la propria testa. Cliccare un giocatore passa alle categorie di offesa. Fornire un nome di giocatore in anticipo salta la pagina dei giocatori e va direttamente alle categorie.

La pagina delle categorie mostra un'icona per ogni tipo di offesa su cui il rango del membro dello staff è autorizzato ad agire. Cliccare una categoria apre una conferma che mostra la punizione esatta che l'albero ha scelto per quel giocatore e quell'offesa. La penalità scelta sale una scala man mano che lo stesso giocatore recidiva nella stessa categoria: un primo spam potrebbe essere un avvertimento, e uno successivo un mute o un ban, così che lo staff non debba mai ricordare la lunghezza giusta.

La conferma offre tre pulsanti:

  • Annulla (rosso) chiude il menu.
  • Approva (verde) applica la punizione scelta e avanza la scala di escalation.
  • Manuale (azzurro) permette al membro dello staff di scegliere lui stesso la punizione. Sui server abbastanza nuovi questo è un modulo di input nativo; sui server più vecchi è un prompt di chat cliccabile. Una scelta manuale non avanza la scala.

L'escalation viene contata per giocatore, per categoria, ed è ricordata tra i riavvii. Un membro dello staff può agire solo sulle categorie che il suo rango ha concesso nella configurazione, e l'intero menu non è disponibile mentre l'albero è disattivato.

Configurare l'albero

Ogni categoria porta con sé una scala ordinata di passaggi e un oggetto Minecraft usato come sua icona GUI. Un passaggio è una punizione applicata a un dato conteggio di offesa: warn, kick, mute, mute: 10m, ban o ban: 14d. Un passaggio senza durata è permanente.

Il blocco permissions.luckperms mappa un rango alle categorie su cui quel rango può agire. L'ereditarietà segue l'ordine elencato dal meno al più privilegiato, così che un rango superiore erediti le categorie dei ranghi sopra di esso nell'elenco.

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

Imposta use.fields su true per presentare l'override manuale come un modulo di input nativo di Minecraft su Minecraft 1.21.7 e successivi, o false per usare sempre il prompt di chat cliccabile.

Avvertimenti

Lo staff emette avvertimenti, revoca il più recente e ispeziona gli avvertimenti attivi per giocatore o a livello di server. Un avvertimento non viene applicato di per sé: è un richiamo che decade. Un avvertimento conta come attivo finché non decade, dopodiché non conta più verso il totale attivo.

moderation:
  expire.warns.after: 7d

Azioni automatiche a soglia

Quando il conteggio degli avvertimenti attivi di un giocatore raggiunge una soglia stabilita, il server agisce da solo così che lo staff non debba tracciare i richiami a mano. Di base, raggiungere tre avvertimenti attivi muta il giocatore per un giorno, e raggiungerne cinque lo banna temporaneamente per un giorno. Ogni soglia scatta solo al suo conteggio esatto, così che un singolo avvertimento inneschi al massimo un'azione. Lo staff configurato per ricevere le notifiche vede un annuncio che nomina il giocatore e il conteggio che ha raggiunto.

Dettaglio tecnico

Le soglie e le loro azioni sono attualmente integrate (tre avvertimenti per un mute di un giorno, cinque per un tempban di un giorno) anziché configurabili.

Gate captcha

Il sistema captcha costringe un giocatore a completare una sfida di verifica, o automaticamente quando è presente un forte segnale di comportamento automatizzato, o manualmente quando lo staff ne emette una. Un giocatore esente tramite il permesso di bypass non viene mai sfidato.

Ci sono due varianti:

  • Standard è il controllo più leggero. Al giocatore viene mostrato un menu a baule e gli viene chiesto di cliccare un oggetto con nome tra una griglia di esche. Cliccare l'oggetto sbagliato conta contro di lui, e cinque clic sbagliati falliscono. Il menu si riapre se chiuso, il giocatore viene tenuto fermo, e il tentativo fallisce dopo 30 secondi. Non acceca né rallenta il giocatore e non prende il controllo del suo inventario.
  • Dettagliata è il controllo più forte. Un codice casuale di cinque caratteri viene disegnato su una mappa che il giocatore tiene, e deve digitare il codice in chat. Mentre è attiva il giocatore è bloccato sul posto, accecato e rallentato, e non può muoversi, lasciare cadere oggetti o aprire il proprio inventario, così che l'unica azione possibile sia digitare il codice. Digitare exit rinuncia, tre tentativi sbagliati falliscono, e il tentativo scade dopo 60 secondi. L'inventario e la posizione reali del giocatore vengono salvati e ripristinati al termine della sfida.

Quando una sfida si conclude, il risultato (superata, fallita o scaduta) viene annunciato allo staff che detiene il permesso di notifica captcha. Un giocatore che fallisce o va in timeout viene espulso.

Lo staff può forzare una sfida su un giocatore o su ogni giocatore idoneo in una volta con il comando captcha, scegliendo la variante standard o dettagliata.

Intelligence sugli account

Ogni login viene registrato: il nome del giocatore, il suo IP di connessione, il brand del suo client e la versione del protocollo. Questo costruisce una traccia di identità duratura che alimenta i comandi di ricerca e gli avvisi automatici per lo staff.

Dietro un proxy

Verité risolve il vero IP client del giocatore in modo consapevole del proxy, fidandosi prima di un handshake in stile TCPShield e mai dell'indirizzo socket del proxy stesso. Questo è ciò che mantiene accurati il rilevamento degli IP condivisi e le ricerche del paese su una rete con proxy.

Ricerche

Lo staff dispone di un insieme di comandi di indagine in sola lettura:

  • History e staff history elencano le punizioni che un giocatore ha ricevuto o che un membro dello staff ha emesso.
  • Ban list e mute list sfogliano le punizioni attualmente attive di ciascun tipo.
  • Scansione degli IP duplicati elenca gli account che condividono un IP con un dato giocatore e segnala quelli attualmente bannati o mutati, facendo emergere probabili account alt. Il numero di account mostrati è limitato.
  • IP history, name history e last UUID fanno emergere la traccia di identità memorizzata di un giocatore.
  • Staff rollback revoca in blocco le punizioni attive recenti di un membro dello staff, e prune history elimina i record inattivi di un giocatore.
  • Seen riporta quando un giocatore è stato online l'ultima volta.
  • Whois costruisce un dossier completo dell'account: identità, nomi passati, client e versione, referrer, paese, tempo di gioco, e primo e ultimo accesso. Se il nome non ha mai toccato questo server, Verité lo risolve tramite Mojang così che lo staff possa comunque cercare un account reale. L'ultimo IP esatto è protetto da un proprio permesso.
moderation:
  shared.ip.scan.limit: 20

Politica di rilevamento degli alt

Per impostazione predefinita un alt viene catturato solo da una punizione IP. Attivare la politica di alt-ban fa sì che un ban copra automaticamente altri account che condividono l'IP del giocatore bannato, anche senza un ban IP esplicito.

moderation:
  auto.ban.alts: false

Connessioni condivise

Non abilitare la politica di alt-ban su un server dove più giocatori distinti condividono un indirizzo IP (per esempio, giocatori dietro la stessa abitazione o una rete condivisa), perché può catturare account innocenti.

Avvisi automatici di ingresso

Lo staff che detiene il permesso di notifica pertinente viene avvisato automaticamente quando un giocatore segnalato si connette:

  • Ingresso bannato: un giocatore bannato, un giocatore bannato per IP o un alt bannato viene respinto alla schermata di login. L'avviso nomina il giocatore e quanto tempo resta ancora al ban.
  • Ingresso da IP duplicato: un giocatore che entra condivide un IP con altri account. L'avviso elenca gli altri account e segnala quelli che sono bannati o mutati.
  • Ingresso da client non vanilla: un giocatore che entra è su un client modificato come Fabric o Forge. L'avviso nomina il giocatore e il brand del client riportato. Un client vanilla è silenzioso.

Applicazione in rete e tramite proxy

Su una rete con più server, Verité può applicare ban e mute sul proxy, in modo che un giocatore sanzionato venga fermato al confine della rete, prima che raggiunga qualsiasi server backend. Questo è opzionale ed è disattivato per impostazione predefinita: un server singolo non ne ha bisogno.

Verité memorizza tutti i dati in H2 e non serve nient'altro per condividerli. Lo stesso database H2 viene aperto da ogni backend e dal proxy; il tuo database esistente viene usato così com'è, senza alcun passaggio di conversione durante l'aggiornamento.

Come viene condiviso il database

Un server è proprietario del file del database e lo serve al resto della rete tramite la modalità di rete propria di H2. Ogni backend legge e scrive i dati condivisi; il proxy li legge soltanto.

  • embedded è il valore predefinito: un singolo server con il proprio file di database locale. Corretto quando non gestisci una rete con proxy.
  • host fa sì che questo backend sia proprietario del file del database e lo serva alla rete. Esegui esattamente un host per rete.
  • remote fa sì che questo backend si connetta all'host tramite la rete. Indica l'indirizzo dell'host.
database:
  mode: embedded
  port: 9092
  host.address: "127.0.0.1:9092"
  auto.server: false

Quando un backend e il proxy condividono la stessa macchina e lo stesso file, auto.server consente alla modalità embedded di servire il file senza un host dedicato. Lascialo disattivato a meno che tu non gestisca una rete su una sola macchina.

Le sanzioni concorrenti sono sicure

Più backend possono emettere sanzioni contemporaneamente sul database condiviso senza che una cancelli l'altra, e revocare una sanzione non viene mai annullato da una copia obsoleta su un altro server. Un ban o un mute emesso su un backend è visibile a tutti gli altri backend e al proxy.

Il plugin del proxy

Lo stesso jar di Verité gira su Velocity e su BungeeCord o Waterfall. Inseriscilo nella cartella dei plugin del proxy come qualsiasi altro plugin del proxy.

Il proxy è rigorosamente in sola lettura: non registra mai accessi, non emette sanzioni e non scrive nulla nel database condiviso. Riutilizza la logica di sanzioni propria di Verité, quindi un ban risolto sul proxy è esattamente la stessa decisione che prenderebbe un backend, coprendo ban diretti, ban IP e alt bannati.

  • Un giocatore bannato viene rifiutato all'accesso del proxy e vede la schermata di ban, quindi non raggiunge mai un backend.
  • La chat di un giocatore mutato viene bloccata sul proxy. Anche i comandi bloccati in caso di mute lo sono, il che colma il varco in cui un proxy gestisce un comando prima che qualsiasi backend lo veda.
database.mode=remote
database.host.address=127.0.0.1:9092
moderation.ban.alts=false
moderation.enforce.mute.commands=true

La configurazione del proxy risiede in verite-proxy.properties, nella cartella dati di Verité del proxy, scritta con valori predefiniti sensati al primo avvio. Punta database.host.address al backend eseguito in modalità host e assicurati che il proxy possa raggiungere quella porta.

GeoIP

Verité può associare un paese a un indirizzo IP, usato da whois e dal comando geoip. Dagli un nome di giocatore per usare il suo IP memorizzato più recente, o un indirizzo IP direttamente.

La ricerca del paese usa un database MaxMind GeoLite2-Country. Se non è presente alcun database, Verité lo dice chiaramente anziché riportare un paese sbagliato o sconosciuto. Gli indirizzi privati e di loopback non possono mai essere risolti a prescindere dal database.

Usare un database ufficiale

Per usare un database MaxMind ufficiale, inserisci GeoLite2-Country.mmdb nella cartella dei dati del plugin. Verité scarica un database sostitutivo solo quando il file è assente, quindi un file esistente non viene mai sovrascritto.

Blocco del server

Il blocco sigilla il server durante un'emergenza come un raid o un exploit che viene abusato, senza bannare alcun singolo giocatore. Mentre il blocco è attivo, chiunque tenti di entrare viene respinto alla schermata di login e gli viene mostrato il motivo impostato dallo staff. Lo staff fidato con il permesso di bypass del blocco può comunque entrare per affrontare la situazione.

Il blocco è una posizione di emergenza temporanea, non un'impostazione duratura: dura solo fino al riavvio del server, quindi un riavvio lo azzera sempre e il server non può mai essere lasciato accidentalmente inaccessibile dopo essere ritornato attivo. Lo staff lo avvia e lo termina con il comando lockdown e può fornire un motivo personalizzato che i giocatori vedranno.

Osservazione dell'inventario e del baule dell'End

L'osservazione è uno strumento dello staff per guardare all'interno dei beni di un altro giocatore. Aprire il comando di osservazione dell'inventario su un giocatore mostra tutto ciò che sta portando: hotbar e archiviazione principale, armatura, mano secondaria, e persino gli slot di crafting o della postazione di lavoro che ha attualmente aperti. Il comando di osservazione dell'End fa lo stesso per il suo baule dell'End.

  • Con il permesso di modifica, un osservatore può spostare oggetti dentro e fuori, e il cambiamento avviene sul bersaglio immediatamente.
  • Con il solo permesso di visualizzazione, la finestra è in sola lettura.
  • Un osservatore con il permesso no-takeout può mettere oggetti dentro ma mai prenderli fuori, il che permette allo staff di livello inferiore di riordinare o depositare senza poter rubare.

L'osservazione funziona anche sui giocatori offline, leggendo i loro dati salvati e riscrivendo qualsiasi modifica quando la finestra viene chiusa. Alcuni giocatori possono essere marcati come protetti così che non possano essere spiati a meno che l'osservatore non sia autorizzato ad aggirare quella protezione.

Ogni sessione viene annunciata alla console: una riga quando un membro dello staff apre una finestra, un elenco di esattamente cosa è cambiato se qualcosa è stato aggiunto o rimosso, e una riga quando la finestra viene chiusa. Un osservatore che si limita a guardare e non cambia nulla produce solo le righe di apertura e chiusura.

Nomi familiari

I comandi e i nodi di permesso rispecchiano l'originale InvSee++, così che le abitudini dello staff esistente e le concessioni di permessi continuino a funzionare. Vedi il Riferimento dei permessi per i nodi di osservazione.

invsee:
  enable-offline-player-support: true
  enable-unknown-player-support: true
  tabcomplete-offline-players: true
  • enable-offline-player-support consente di visualizzare i giocatori che non sono attualmente online.
  • enable-unknown-player-support consente di visualizzare gli account che non sono mai entrati in questo server.
  • tabcomplete-offline-players include i nomi offline nel completamento con tab.

Controllo della chat

Verité fornisce i controlli collettivi di moderazione della chat. Lo staff con il permesso di bypass della chat non è mai influenzato dal mute della chat o dallo slowmode.

Broadcast

Il broadcast invia un annuncio dello staff a tutto il server. Il messaggio appare nella chat di tutti, messo in risalto con il prefisso del server e una riga vuota sopra e sotto così che spicchi. Usalo per promemoria, avvisi di eventi o annunci di regole.

Pulizia della chat

La pulizia della chat spinge la conversazione recente su e fuori dalla vista per ogni giocatore, poi annuncia chi l'ha pulita. È utile per cancellare lo spam o resettare una discussione. Pulisce solo ciò che i giocatori vedono attualmente; non elimina alcun log salvato.

Mute della chat

Il mute della chat attiva o disattiva un freeze della chat a livello di server. Mentre è attivo, i giocatori ordinari non possono inviare messaggi e viene detto loro che la chat è mutata se ci provano, il che è utile per calmare un momento acceso o mantenere l'attenzione durante un annuncio. Eseguire di nuovo il comando smuta la chat. Lo staff con il permesso di bypass può sempre parlare.

Slowmode

Lo slowmode imposta un'attesa minima tra i messaggi di chat. Dagli una durata come 10s, 5m o 2h, e ogni giocatore deve aspettare tanto tra i messaggi; se prova a parlare troppo presto gli viene detto quanto tempo resta. Aggiungi un nome di giocatore per applicare uno slowmode personale a una sola persona anziché a tutti. Usa off per rimuoverlo, globalmente o per un giocatore nominato. Uno slowmode personale ha la priorità su quello a livello di server, e lo slowmode massimo è 24 ore.

Blacklist dei comandi in mute

A un giocatore mutato viene impedito di instradare la chat attraverso comandi come /msg o /me. Quando un giocatore mutato esegue un comando in blacklist, viene annullato e gli viene rimostrato il motivo del suo mute. La blacklist è configurabile.

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

Reti con proxy

Se il tuo server è ospitato su una rete con injection del proxy, questi comandi potrebbero essere gestiti dal proxy prima che qualsiasi backend li veda, nel qual caso un giocatore mutato potrebbe comunque usarli. Esegui il plugin del proxy di Verité per colmare questo varco: vedi Applicazione in rete e tramite proxy. Per una configurazione di chat o proxy personalizzata, vedi Applicazione della moderazione personalizzata.

Esenzioni e protezione dei ranghi

Verité controlla chi non può essere punito prima di applicare qualsiasi punizione.

  • Esenzione dai permessi: un bersaglio che detiene il permesso exempt non può essere punito a meno che chi emette la punizione detenga il permesso exempt-bypass. L'esenzione può essere delimitata a un tipo di punizione, così che un giocatore esente dai ban possa comunque essere mutabile.
  • Protezione dei ranghi: quando abilitata, chi emette una punizione non può punire un bersaglio il cui peso del gruppo LuckPerms è uguale o superiore al proprio, così che lo staff non possa punire pari o superiori. Un operatore è sempre trattato come il rango più alto, così che un non operatore non possa mai punire un operatore e un operatore possa sempre punire. La console non è mai bloccata.
moderation:
  use.rank.weights: true
  exempt:
    use.group.weights: false
    permit.same.weight: true

Dettaglio tecnico

I controlli sui permessi e sui ranghi si applicano solo ai bersagli online, perché i permessi live di un giocatore offline non possono essere letti. LuckPerms è opzionale: quando è assente, il confronto dei pesi passa attraverso e non blocca mai lo staff.