Chat mais limpo: filtragem de palavrões e links
Tanto o chat do lobby quanto o do jogo agora bloqueiam palavrões de uma lista de 40.000 termos e rejeitam links antes mesmo de uma mensagem ser armazenada.

Em palavras simples
O chat deve ser acolhedor e seguro, em qualquer idioma. Toda mensagem que você envia — no lobby e dentro de uma partida — agora é verificada antes de ser publicada. Palavrões são bloqueados e links não são permitidos, para que o chat continue sendo sobre o jogo.
As verificações são cuidadosas, não desajeitadas: elas casam palavras e frases inteiras, então uma palavra inocente que apenas contém uma subcadeia bloqueada ainda passa. As figurinhas são um conjunto fixo e seguro, então nunca são afetadas.
Para os mais técnicos
Um novo pacote @opolyx/moderation (baseado no pacote logger) faz correspondência exata de palavras e frases inteiras, conforme as próprias notas de uso da lista de bloqueio: «pain in the ass» é bloqueado, mas «assassin» e «horde» passam — não há varredura de subcadeias, e a lista já enumera de antemão ofuscações como h0rny, então nenhuma normalização difusa é necessária. Ela passa para minúsculas, tokeniza por espaços em branco, testa variantes brutas e sem pontuação nas bordas contra um Set e depois verifica n-gramas de frases de 2 a 11 palavras.
Os 40.917 termos vivem em um módulo gerado de literais de string (~420 KB) que é apenas do lado do servidor — os chunks do cliente foram verificados como limpos. Ambas as vias de escrita do chat rejeitam uma mensagem ruim antes da inserção, porque o Realtime transmite as linhas armazenadas na íntegra, então a verificação precisa preceder a escrita.
// link filter: schemed URLs (https?|ftp|wss?://, hxxp), www., and bare
// label.tld against a curated ~65-TLD set — so Node.js / e.g. / "gg wp" pass,
// but discord.gg / t.me/x / mysite.com / emails are blocked. Light dot-de-obfuscation
// folds example[.]com and "site dot net" first.Uma lacuna aceita (decisão do dono): uma inserção direta no banco de dados contorna esses filtros no nível da ação — o candidato a reforço é uma tabela de termos banidos mais um gatilho antes da inserção. A filtragem de apelidos e uma string de erro totalmente localizada ficaram adiadas.
