Bots que não falam todos igual
Toda frase que os frequentadores já haviam escrito era uma de seis. Agora são centenas, cada personagem escreve no seu próprio registro e nada se repete enquanto ainda está na tela.

Em palavras simples
Dois dias depois de os frequentadores chegarem ao saguão, a queixa ficou evidente para quem olhasse: todos diziam as mesmas coisas. Um deles escreveu "quick game anyone", "lets play", "quick game anyone", "need one more", "need one more" numa única noite. Outro disse "anyone up for a game" três vezes em noventa minutos.
O banco de dados foi direto: cada frase que qualquer um deles já havia escrito era uma de seis. Dentro do jogo era a mesma coisa — um apelido disse "had to have it" nove vezes. E havia um terceiro sinal que ninguém tinha relatado: os doze escreviam exatamente no mesmo registro — minúsculas, frases cortadas, sem pontuação — enquanto os humanos na mesma sala digitavam "Hi guys!", "Someone wanne play?" e "Let’s goooooooooo!".
Agora cada frequentador tem uma voz própria, derivada de quem ele é em vez de sorteada a cada vez. No conjunto, isso significa:
- uns escrevem em minúsculas, outros em frases completas — e continuam assim;
- uns pontuam muito, outros nunca;
- cada um tem dois ou três emojis que realmente usa, em vez de um repertório comum;
- uns alongam palavras, outros abreviam, alguns cometem um erro de digitação de vez em quando;
- e o que dizem combina com a sala: ninguém pede "mais um" com quatro lugares livres.
Escrevem somente em inglês, em qualquer lugar, seguindo a mesma decisão que vale para todo o comportamento dos bots.
Para os mais técnicos
O corpus é organizado por intenção — cumprimentar, procurar partida, precisar de mais um, ter acabado de entrar, comentar o modo, esperar, brincar, incentivar, pedir revanche — e duas dessas intenções são preenchidas com dados da sala ao vivo, de modo que a frase não pode contradizer o que o jogador está vendo.
A voz de um personagem é derivada do apelido em vez de armazenada, então não exige nenhum campo novo e sobrevive intacta a um reinício do processo:
// botChat.voice.ts — the voice is a pure function of the nickname
const rng = createRng(`voice:${persona.nickname}`);
return {
sentenceCase: rng.float() < 0.34,
punctuation: pick(rng, ['none', 'light', 'heavy']),
emoji: pickN(rng, EMOJI_POOL, rng.int(2, 3)), // habitual, not shared
elongation: rng.float() * 0.2,
typoRate: rng.float() * 0.06,
};A repetição é resolvida por uma pequena memória cujo escopo é ao mesmo tempo a sala e o personagem, então a mesma frase não pode voltar enquanto ainda está na tela, e dois personagens numa sala não podem ecoar um ao outro.
O bug interessante estava na transformação que insere erros de digitação. O chat dos bots é escrito com a função de serviço, que passa direto pelo filtro de palavrões pelo qual as mensagens humanas passam — então um erro "realista" podia soletrar uma palavra bloqueada ("and" digitado como "nad" está na lista). Um teste com 2.600 amostras passou tranquilamente; foram necessários cerca de 68.000 sorteios para o problema aparecer. Agora o teste enumera exaustivamente cerca de 260.000 strings possíveis em 1,4 segundo e chama os mesmos geradores usados pela camada de chat, em vez de reimplementá-los: a primeira tentativa reimplementou e divergiu na hora.
