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ível | Tratamento |
|---|---|
| Termo na biblioteca de profanidade | A 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:
- Nomes de habilidades (ver Habilidades).
- Nomes de funções (ver Funções).
- Nomes de condutas (ver Condutas).
- Nomes de times (ver Times).
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).