Moderação (Veritesauver)
O Veritesauver é o componente de moderação do Verité. Contém o sistema de castigos interno (banimentos, silenciamentos, avisos, expulsões e castigos por IP), a árvore de castigos de apontar e clicar, a barreira de verificação por captcha, a inteligência de contas (deteção de alts e histórico de IP e nomes), a consulta de país GeoIP, o bloqueio do servidor, a observação de inventário e baú de ender, e o controlo de chat (difusão, limpeza, silenciamento e modo lento).
O componente inteiro pode ser ligado ou desligado independentemente do resto do Verité.
moderation:
enabled: trueEnquanto a moderação está desativada, cada comando de moderação do pessoal é recusado.
Onde encontrar os comandos e as permissões
Esta página explica o que cada funcionalidade faz. Para a sintaxe exata dos comandos, consulte a Referência de comandos. Para cada nó de permissão, consulte a Referência de permissões. Os programadores que integram um sistema de chat personalizado devem ler antes Aplicação de moderação personalizada.
Castigos
Cada banimento, silenciamento, aviso e expulsão é um registo com a mesma forma: quem foi castigado, quem o emitiu, o motivo, os tempos de início e fim, se foi silencioso e se ainda está ativo. Os registos nunca são editados no lugar. Levantar um castigo escreve quem o removeu e porquê, e mantém o original como histórico, por isso o rasto de moderação completo de um jogador está sempre intacto.
Todos os castigos fluem através de um único motor, por isso um castigo emitido por um comando, pela árvore de castigos ou por uma integração comporta-se sempre da mesma forma: é aplicado, anunciado ao pessoal certo e registado de forma consistente.
Banimentos e silenciamentos
- Um banimento impede um jogador de entrar. É aplicado no ecrã de login, por isso um jogador banido é recusado antes de sequer aparecer.
- Um silenciamento impede um jogador de falar no chat. Um jogador silenciado que tenta falar vê um breve lembrete de quanto tempo lhe resta do silenciamento.
- Ambos podem ser permanentes ou temporizados. Os castigos temporizados expiram por conta própria.
- Emitir um novo banimento ou silenciamento sobre um existente do mesmo tipo substitui-o de forma limpa. O registo antigo é mantido como histórico, e permanece exatamente um castigo ativo.
Castigos por IP
Um banimento por IP ou silenciamento por IP cobre o endereço em vez de uma única conta, por isso aplica-se a cada conta que se liga a partir desse endereço. Isto apanha um jogador que tenta evadir um castigo de conta ao entrar numa conta alternativa a partir da mesma ligação.
Expulsões
Uma expulsão desliga um jogador online imediatamente. Deixa um registo para histórico mas não impede o jogador de voltar a entrar.
Levantar castigos
O pessoal levanta um banimento ou silenciamento com os comandos unban e unmute. Um moderador com apenas a forma "própria" da permissão de unban ou unmute pode levantar apenas os castigos que ele próprio emitiu, o que permite ao pessoal sénior delegar um poder de perdão limitado.
Mensagens de castigo
O texto que um jogador castigado vê é criado na configuração, por isso os donos podem reescrever cada mensagem. Os modelos suportam placeholders que são preenchidos para cada castigo específico:
| Placeholder | Preenchido com |
|---|---|
@duration |
O comprimento legível (vazio para um castigo permanente). |
@enforcer |
O membro do pessoal que emitiu o castigo. |
@target |
O jogador castigado. |
@reason |
O motivo, ou "No reason provided." quando nenhum foi dado. |
@punishment |
A ação em forma de verbo. |
@total.warns |
A contagem de avisos ativos do jogador castigado. |
Use \n num modelo para uma quebra de linha.
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}Limites e tempos de espera por cargo
O pessoal está sujeito a um teto por cargo sobre a duração de um banimento ou silenciamento temporário que pode emitir, e a um tempo de espera por cargo sobre a frequência com que pode castigar. Um membro do pessoal nunca é impedido rigidamente por pedir uma duração demasiado longa: o pedido é simplesmente reduzido ao limite do seu cargo, por isso o castigo ainda acontece, apenas mais curto. Os operadores e os portadores da permissão de administração estão isentos tanto dos limites como do tempo de espera.
Detalhe técnico
Os níveis de cargo (durações e tempo de espera) estão atualmente integrados no código em vez de lidos da configuração, e o acompanhamento do tempo de espera reinicia quando o servidor reinicia.
Árvore de castigos
A árvore de castigos é um menu de apontar e clicar que permite ao pessoal castigar um jogador a partir de uma lista escalonada de categorias de ofensa sem memorizar comandos ou durações.
Executar o comando de castigo abre uma página de jogadores online, cada um mostrado como a sua própria cabeça. Clicar num jogador avança para as categorias de ofensa. Fornecer um nome de jogador logo à partida salta a página de jogadores e vai diretamente para as categorias.
A página de categorias mostra um ícone para cada tipo de ofensa que o cargo do membro do pessoal está autorizado a aplicar. Clicar numa categoria abre uma confirmação que mostra o castigo exato que a árvore escolheu para esse jogador e essa ofensa. A penalização escolhida sobe uma escada à medida que o mesmo jogador reincide na mesma categoria: um primeiro spam pode ser um aviso, e um posterior um silenciamento ou um banimento, por isso o pessoal nunca tem de recordar o comprimento certo.
A confirmação oferece três botões:
- Cancelar (vermelho) fecha o menu.
- Aprovar (verde) aplica o castigo escolhido e avança a escada de escalada.
- Manual (azul claro) permite ao membro do pessoal escolher o castigo ele próprio. Em servidores suficientemente recentes isto é um formulário de entrada nativo; em servidores mais antigos é um pedido de chat clicável. Uma escolha manual não avança a escada.
A escalada é contada por jogador, por categoria, e é recordada entre reinícios. Um membro do pessoal só pode atuar nas categorias que o seu cargo tem concedidas na configuração, e o menu inteiro fica indisponível enquanto a árvore está desligada.
Configurar a árvore
Cada categoria carrega uma escada ordenada de passos e um item do Minecraft utilizado como o seu ícone de GUI. Um passo é um castigo aplicado a uma dada contagem de ofensas: warn, kick, mute, mute: 10m, ban ou ban: 14d. Um passo sem duração é permanente.
O bloco permissions.luckperms mapeia um cargo para as categorias que esse cargo pode aplicar. A herança segue a ordem listada do menos ao mais privilegiado, por isso um cargo mais alto herda as categorias dos cargos acima dele na 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: trueDefina use.fields como true para apresentar a substituição manual como um formulário de entrada nativo do Minecraft no Minecraft 1.21.7 e mais recente, ou false para utilizar sempre o pedido de chat clicável.
Avisos
O pessoal emite avisos, revoga o mais recente e inspeciona os avisos ativos por jogador ou em todo o servidor. Um aviso não é aplicado por si só: é um golpe que decai. Um aviso conta como ativo até caducar, após o que deixa de contar para o total ativo.
moderation:
expire.warns.after: 7dAções automáticas por limiar
Quando a contagem de avisos ativos de um jogador atinge um limiar definido, o servidor age por conta própria para que o pessoal não tenha de acompanhar os golpes à mão. De origem, atingir três avisos ativos silencia o jogador durante um dia, e atingir cinco bane-o temporariamente durante um dia. Cada limiar dispara apenas na sua contagem exata, por isso um único aviso aciona no máximo uma ação. O pessoal configurado para receber notificações vê um anúncio nomeando o jogador e a contagem que atingiu.
Detalhe técnico
Os limiares e as suas ações estão atualmente integrados no código (três avisos para um silenciamento de um dia, cinco para um banimento temporário de um dia) em vez de configuráveis.
Barreira de captcha
O sistema de captcha força um jogador a completar um desafio de verificação, quer automaticamente quando um sinal forte de comportamento automatizado está presente, quer manualmente quando o pessoal o emite. Um jogador isento através da permissão de bypass nunca é desafiado.
Há duas variantes:
- Padrão é a verificação mais ligeira. Ao jogador é mostrado um menu de baú e é-lhe pedido que clique num item nomeado de entre uma grelha de engodos. Clicar no item errado conta contra ele, e cinco cliques errados reprovam. O menu reabre se for fechado, o jogador é mantido no lugar, e a tentativa reprova após 30 segundos. Não cega nem abranda o jogador nem toma conta do seu inventário.
- Detalhado é a verificação mais forte. Um código aleatório de cinco caracteres é desenhado num item de mapa que o jogador segura, e ele tem de escrever o código de volta no chat. Enquanto está ativo o jogador é fixado no lugar, cegado e abrandado, e não pode mover-se, largar itens ou abrir o seu inventário, por isso a única ação possível é escrever o código. Escrever
exitdesiste, três tentativas erradas reprovam, e a tentativa expira após 60 segundos. O inventário e a localização reais do jogador são guardados e restaurados quando o desafio termina.
Quando um desafio conclui, o resultado (aprovação, reprovação ou expiração) é anunciado ao pessoal que possui a permissão de notificação de captcha. Um jogador que reprova ou expira é expulso.
O pessoal pode forçar um desafio num jogador ou em cada jogador elegível de uma só vez com o comando de captcha, escolhendo a variante padrão ou detalhada.
Inteligência de contas
Cada login é registado: o nome do jogador, o seu IP de ligação, a marca do seu cliente e a sua versão de protocolo. Isto constrói um rasto de identidade durável que alimenta os comandos de consulta e os alertas automáticos do pessoal.
Atrás de um proxy
O Verité resolve o verdadeiro IP de cliente do jogador de uma forma consciente do proxy, confiando primeiro num handshake ao estilo TCPShield e nunca no endereço de socket do próprio proxy. É isto que mantém a deteção de IP partilhado e as consultas de país precisas numa rede com proxy.
Consultas
O pessoal tem um conjunto de comandos de investigação apenas de leitura:
- O histórico e o histórico do pessoal listam os castigos que um jogador recebeu ou que um membro do pessoal emitiu.
- A lista de banimentos e a lista de silenciamentos paginam pelos castigos atualmente ativos de cada tipo.
- A análise de IP duplicado lista as contas que partilham um IP com um dado jogador e sinaliza qualquer uma que esteja atualmente banida ou silenciada, expondo prováveis contas alt. O número de contas mostradas é limitado.
- O histórico de IP, o histórico de nomes e o último UUID expõem o rasto de identidade armazenado de um jogador.
- O rollback do pessoal levanta em massa os castigos ativos recentes de um membro do pessoal, e a poda do histórico elimina os registos inativos de um jogador.
- O seen reporta quando um jogador esteve online pela última vez.
- O whois constrói um dossiê completo da conta: identidade, nomes anteriores, cliente e versão, referrer, país, tempo de jogo e primeira e última vez visto. Se o nome nunca tocou neste servidor, o Verité resolve-o através da Mojang para que o pessoal ainda possa consultar uma conta real. O último IP exato está protegido pela sua própria permissão.
moderation:
shared.ip.scan.limit: 20Política de deteção de alts
Por predefinição, uma alt só é apanhada por um castigo por IP. Ligar a política de banimento de alts faz com que um banimento cubra automaticamente outras contas que partilham o IP do jogador banido, mesmo sem um banimento por IP explícito.
moderation:
auto.ban.alts: falseLigações partilhadas
Não ative a política de banimento de alts num servidor onde vários jogadores distintos partilham um endereço IP (por exemplo, jogadores atrás do mesmo agregado familiar ou de uma rede partilhada), porque pode apanhar contas inocentes.
Alertas automáticos de entrada
O pessoal que possui a permissão de notificação relevante é alertado automaticamente quando um jogador sinalizado se liga:
- Entrada de banido: um jogador banido, jogador banido por IP ou alt banida é recusado no ecrã de login. O alerta nomeia o jogador e quanto tempo ainda falta para o banimento correr.
- Entrada de IP duplicado: um jogador que entra partilha um IP com outras contas. O alerta lista as outras contas e marca qualquer uma que esteja banida ou silenciada.
- Entrada de cliente não vanilla: um jogador que entra está num cliente modificado como Fabric ou Forge. O alerta nomeia o jogador e a marca de cliente reportada. Um cliente vanilla é silencioso.
Aplicação em rede e por proxy
Numa rede com vários servidores, o Verité pode aplicar banimentos e silenciamentos no proxy, de modo que um jogador sancionado é detido na borda da rede, antes de chegar a qualquer servidor backend. Isto é opcional e está desativado por predefinição: um servidor único não precisa de nada disto.
O Verité armazena todos os dados em H2 e nada mais é necessário para os partilhar. A mesma base de dados H2 é aberta por cada backend e pelo proxy; a sua base de dados existente é usada tal como está, sem qualquer passo de conversão ao atualizar.
Como a base de dados é partilhada
Um servidor é dono do ficheiro da base de dados e serve-o ao resto da rede através do próprio modo de rede do H2. Cada backend lê e escreve os dados partilhados; o proxy apenas os lê.
- embedded é a predefinição: um único servidor com o seu próprio ficheiro de base de dados local. Correto quando não executa uma rede com proxy.
- host faz com que este backend seja dono do ficheiro da base de dados e o sirva à rede. Execute exatamente um host por rede.
- remote faz com que este backend se ligue ao host através da rede. Indique o endereço do host.
database:
mode: embedded
port: 9092
host.address: "127.0.0.1:9092"
auto.server: falseQuando um backend e o proxy partilham a mesma máquina e o mesmo ficheiro, auto.server permite que o modo embedded sirva o ficheiro sem um host dedicado. Deixe-o desativado a menos que execute uma rede numa só máquina.
As sanções concorrentes são seguras
Vários backends podem emitir sanções ao mesmo tempo contra a base de dados partilhada sem que uma apague a outra, e levantar uma sanção nunca é desfeito por uma cópia desatualizada noutro servidor. Um banimento ou silenciamento emitido num backend é visível para todos os outros backends e para o proxy.
O plugin do proxy
O mesmo jar do Verité corre no Velocity e no BungeeCord ou Waterfall. Coloque-o na pasta de plugins do proxy como qualquer outro plugin de proxy.
O proxy é estritamente só de leitura: nunca regista inícios de sessão, emite sanções nem escreve nada na base de dados partilhada. Reutiliza a própria lógica de sanções do Verité, portanto um banimento resolvido no proxy é exatamente a mesma decisão que um backend tomaria, abrangendo banimentos diretos, banimentos de IP e alts banidos.
- Um jogador banido é recusado no início de sessão do proxy e vê o ecrã de banimento, por isso nunca chega a um backend.
- O chat de um jogador silenciado é bloqueado no proxy. Os comandos bloqueados em caso de silenciamento também o são, o que fecha a brecha em que um proxy trata um comando antes de qualquer backend o ver.
database.mode=remote
database.host.address=127.0.0.1:9092
moderation.ban.alts=false
moderation.enforce.mute.commands=trueA configuração do proxy fica em verite-proxy.properties, na pasta de dados do Verité do proxy, escrita com predefinições sensatas no primeiro arranque. Aponte database.host.address para o backend em execução no modo host e certifique-se de que o proxy consegue alcançar essa porta.
GeoIP
O Verité pode anexar um país a um endereço IP, utilizado pelo whois e pelo comando geoip. Dê-lhe um nome de jogador para usar o seu IP armazenado mais recente, ou um endereço IP diretamente.
A consulta de país utiliza uma base de dados MaxMind GeoLite2-Country. Se nenhuma base de dados estiver presente, o Verité di-lo claramente em vez de reportar um país errado ou desconhecido. Os endereços privados e de loopback nunca podem ser resolvidos independentemente da base de dados.
Utilizar uma base de dados oficial
Para utilizar uma base de dados MaxMind oficial, coloque GeoLite2-Country.mmdb na pasta de dados do plugin. O Verité só transfere uma base de dados substituta quando o ficheiro está ausente, por isso um ficheiro existente nunca é sobrescrito.
Bloqueio do servidor
O bloqueio sela o servidor durante uma emergência como um raide ou um exploit a ser abusado, sem banir qualquer jogador individual. Enquanto o bloqueio está ligado, todos os que tentam entrar são recusados no ecrã de login e é-lhes mostrado o motivo que o pessoal definiu. O pessoal de confiança com a permissão de bypass de bloqueio pode ainda entrar para lidar com a situação.
O bloqueio é uma postura de emergência temporária, não uma definição duradoura: dura apenas até o servidor reiniciar, por isso um reinício limpa-o sempre e o servidor nunca pode ficar acidentalmente inacessível depois de voltar a arrancar. O pessoal inicia-o e termina-o com o comando de bloqueio e pode dar um motivo personalizado que os jogadores verão.
Observação de inventário e baú de ender
A observação é uma ferramenta do pessoal para olhar dentro dos pertences de outro jogador. Abrir o comando de observação de inventário num jogador mostra tudo o que ele carrega: hotbar e armazenamento principal, armadura, mão secundária, e até os espaços de fabrico ou de estação de trabalho que tem atualmente abertos. O comando de observação de ender faz o mesmo para o seu baú de ender.
- Com permissão de edição, um observador pode mover itens para dentro e para fora, e a alteração acontece ao alvo de imediato.
- Com apenas permissão de visualização, a janela é apenas de leitura.
- Um observador com a permissão de não retirada pode colocar itens dentro mas nunca retirar itens, o que permite ao pessoal de nível inferior rearranjar ou depositar sem poder roubar.
A observação funciona também em jogadores offline, lendo os seus dados guardados e escrevendo quaisquer edições de volta quando a janela é fechada. Alguns jogadores podem ser marcados como protegidos para que não possam ser espiados a menos que o observador tenha permissão para contornar essa proteção.
Cada sessão é anunciada à consola: uma linha quando um membro do pessoal abre uma janela, uma lista de exatamente o que mudou se algo foi adicionado ou removido, e uma linha quando a janela é fechada. Um observador que apenas olha e não muda nada produz apenas as linhas de abertura e fecho.
Nomes familiares
Os comandos e nós de permissão espelham o InvSee++ original, por isso os hábitos existentes do pessoal e as concessões de permissão continuam a funcionar. Consulte a Referência de permissões para os nós de observação.
invsee:
enable-offline-player-support: true
enable-unknown-player-support: true
tabcomplete-offline-players: trueenable-offline-player-supportpermite ver jogadores que não estão atualmente online.enable-unknown-player-supportpermite ver contas que nunca entraram neste servidor.tabcomplete-offline-playersinclui nomes offline na conclusão por tabulação.
Controlo de chat
O Verité fornece os controlos coletivos de moderação de chat. O pessoal com a permissão de bypass de chat nunca é afetado pelo silenciamento de chat ou pelo modo lento.
Difusão
A difusão envia um anúncio do pessoal para todo o servidor. A mensagem aparece no chat de todos, destacada com o prefixo do servidor e uma linha em branco acima e abaixo para que se sobressaia. Use-a para lembretes, avisos de eventos ou anúncios de regras.
Limpeza de chat
A limpeza de chat empurra a conversa recente para cima e para fora de vista para todos os jogadores, e depois anuncia quem a limpou. É útil para apagar spam ou reiniciar uma discussão. Só limpa o que os jogadores veem atualmente; não elimina quaisquer registos guardados.
Silenciamento de chat
O silenciamento de chat alterna um congelamento de chat de todo o servidor. Enquanto está ligado, os jogadores comuns não podem enviar mensagens e é-lhes dito que o chat está silenciado se tentarem, o que é útil para acalmar um momento acalorado ou manter a atenção durante um anúncio. Executar o comando novamente descongela o chat. O pessoal com a permissão de bypass pode falar sempre.
Modo lento
O modo lento define uma espera mínima entre mensagens de chat. Dê-lhe uma duração como 10s, 5m ou 2h, e cada jogador tem de esperar esse tempo entre mensagens; se tentarem falar demasiado cedo é-lhes dito quanto tempo resta. Adicione um nome de jogador para aplicar um modo lento pessoal a apenas uma pessoa em vez de todos. Use off para o limpar, quer globalmente quer para um jogador nomeado. Um modo lento pessoal tem prioridade sobre o de todo o servidor, e o modo lento máximo é de 24 horas.
Lista negra de comandos de silenciados
Um jogador silenciado é impedido de encaminhar chat através de comandos como /msg ou /me. Quando um jogador silenciado executa um comando na lista negra, é cancelado e é-lhe mostrado novamente o seu motivo de silenciamento. A lista negra é configurável.
moderation:
muted.command.blacklist:
- "me"
- "say"
- "msg"
- "tell"
- "r"Redes com proxy
Se o seu servidor está alojado numa rede com injeção por proxy, estes comandos podem ser tratados pelo proxy antes de qualquer backend os ver, caso em que um jogador silenciado poderia ainda utilizá-los. Execute o plugin de proxy do Verité para fechar esta brecha: consulte Aplicação em rede e por proxy. Para uma configuração de chat ou proxy personalizada, consulte Aplicação de moderação personalizada.
Isenções e proteção de cargo
O Verité verifica quem não pode ser castigado antes de aplicar qualquer castigo.
- Isenção por permissão: um alvo que possua a permissão de isenção não pode ser castigado a menos que o emissor possua a permissão de bypass de isenção. A isenção pode ser delimitada a um tipo de castigo, por isso um jogador isento de banimentos pode ainda ser silenciável.
- Proteção de cargo: quando ativada, um emissor não pode castigar um alvo cujo peso de grupo do LuckPerms seja igual ou superior ao seu próprio, por isso o pessoal não pode castigar pares ou superiores. Um operador é sempre tratado como o cargo mais alto, por isso um não operador nunca pode castigar um operador e um operador pode castigar sempre. A consola nunca é bloqueada.
moderation:
use.rank.weights: true
exempt:
use.group.weights: false
permit.same.weight: trueDetalhe técnico
As verificações de permissão e cargo aplicam-se apenas a alvos online, porque as permissões em tempo real de um jogador offline não podem ser lidas. O LuckPerms é opcional: quando está ausente, a comparação de peso passa a direito e nunca bloqueia o pessoal.