Filtro de Linguagem

Resumo

O filtro de linguagem é o sistema responsável por detectar e tratar profanidade no chat e em outros campos de texto livre. A política é censurar por padrão com asteriscos, deixando o jogador optar por ver o conteúdo cru via toggle, e escalar termos extremamente ofensivos para denúncia automática. A detecção é delegada a uma biblioteca de mercado, com whitelist própria para termos do jogo.

Esta nota registra o que foi decidido na reunião de design do card Definição de Game Design — Filtro de Linguagem (2026-04-27).

Biblioteca / serviço

  • Decisão: usar uma biblioteca já consolidada no mercado em vez de manter lista própria do zero.
  • A escolha específica (profanity-check, Cohere Moderation, OpenAI Moderation, lista PT-BR open-source, etc.) fica para a fase de implementação, dependendo de cobertura de PT-BR, custo, latência e modelo de execução (client vs. server).
  • Critério de escolha:
    • Boa cobertura de PT-BR (incluindo gírias regionais).
    • Tolerância a variações (leetspeak, repetição, espaços) integrada — não vamos reimplementar normalização.
    • Custo e latência compatíveis com filtragem em tempo real do chat.

Idiomas suportados

  • Lançamento: PT-BR obrigatório.
  • Pós-lançamento: EN entra junto com a localização do jogo para inglês.
  • Outros idiomas seguem o roadmap geral de localização e não são tratados aqui.

Severidade — política de tratamento

A política padrão é censurar, não bloquear. Mensagens não são descartadas — o jogador continua vendo que houve uma fala, com as palavras sensíveis substituídas por asteriscos.

NívelTratamento
Termo na biblioteca de profanidadeA palavra é substituída por *** na renderização. A mensagem é entregue normalmente.
Termo extremamente ofensivo (slur, ódio, conteúdo grave)Asteriscos no chat + denúncia automática gerada contra o autor. Ver seção Auto-report.

Toggle de visualização

  • O jogador tem uma opção de exibir ou esconder o conteúdo censurado — um check nas configurações de chat.
  • Default: censurado (mostrar asteriscos).
  • Quando o toggle está desligado, o jogador vê a palavra original. Isso é uma escolha pessoal de cada cliente; não altera o que o servidor entrega aos outros jogadores.
  • O auto-report (próxima seção) independe do toggle — ele dispara pela presença do termo na mensagem, não pela visibilidade dela.

Auto-report

  • Existe uma sub-lista de termos extremamente ofensivos (slurs, conteúdo de ódio, etc.) que, quando detectados em uma mensagem, geram automaticamente uma denúncia contra o autor na categoria Ofensa do sistema de Denúncias.
  • O auto-report acontece independentemente de algum jogador ter clicado em reportar — o sistema fecha o ciclo sozinho.
  • A definição da sub-lista exata fica para a fase de implementação, em conjunto com a equipe responsável pela moderação.

Whitelist de contexto

Para evitar falsos positivos em termos próprios do jogo, mantemos uma whitelist explícita que sobrescreve a biblioteca:

A whitelist é mantida pelo time de design e atualizada sempre que entram novos termos de jogo. Termos da whitelist nunca são censurados nem disparam auto-report, mesmo se a biblioteca os marcar.

Nomes de jogadores não entram na whitelist — eles passam pelas regras de validação de Nome e Avatar, que incluem filtro próprio no cadastro.

Tolerância de variações

  • Delegada à biblioteca. Leetspeak, repetição de letras, separação por espaços ou pontuação, substituição por símbolos: tudo é tratado pelo nível de tolerância da biblioteca escolhida.
  • Não vamos manter regras próprias de normalização em paralelo. Se a cobertura da biblioteca não for suficiente em PT-BR, o critério é trocar de biblioteca, não empilhar camadas próprias.

Pontos de aplicação

O filtro deve rodar em todos os campos onde o jogador produz texto livre que outros jogadores possam ver:

  • Chat público e privado, inclusive canais abertos por habilidades (ver Chat).
  • Anotações compartilhadas após morte (ver Anotações).
  • Qualquer outro campo de texto livre futuro.

Cadastro de nome de jogador tem fluxo separado em Nome e Avatar.

Pendências (a definir em rodadas futuras)

  • Escolha concreta da biblioteca/serviço.
  • Definição da sub-lista de termos que disparam auto-report.
  • Onde o filtro executa (cliente, servidor, ou ambos) — afeta latência, custo e capacidade de auditoria.
  • Política para EN no momento de virar a chave de localização.
  • Como atualizar a whitelist de termos do jogo de forma operacional (data-driven vs. hard-coded).