Chat Roblox Seguro com Filtro, UI e Comandos
Este prompt gera um sistema de chat customizado para Roblox com arquitetura cliente-servidor segura. Ele abrange interface de chat própria, envio e recebimento de mensagens, filtragem obrigatória pelo TextService e limitação de spam para proteger a experiência multiplayer.
Também inclui uma base extensível de comandos de chat, como /help, /me, /mute e comandos administrativos condicionados a UserIds ou cargos configuráveis. O resultado é indicado para desenvolvedores que precisam substituir ou complementar o chat padrão com controle total de layout, regras e moderação.
O prompt solicita que a IA adapte o código à estrutura real do projeto, incluindo nomes de RemoteEvents, objetos de interface e permissões existentes. A implementação prioriza servidor autoritativo, validação de dados e instruções práticas de teste no Roblox Studio.
Atue como um desenvolvedor Roblox sênior, especialista em Luau, TextChatService, TextService, segurança cliente-servidor e sistemas multiplayer escaláveis. Crie um sistema completo de chat customizado com interface própria, filtragem obrigatória de mensagens e comandos de chat processados com autoridade no servidor. Antes de escrever o código, use o contexto do meu projeto abaixo para adaptar nomes, caminhos e integrações. CONTEXTO DO MEU JOGO (vou preencher antes de enviar): - Nome da ScreenGui de chat e caminho no Explorer: [EX.: StarterGui/CustomChatGui] - Nome e caminho do TextBox de entrada: [EX.: CustomChatGui/Main/InputBox] - Nome e caminho do container de mensagens: [EX.: CustomChatGui/Main/MessageList] - Template visual de mensagem existente e seus filhos: [EX.: MessageTemplate com Username, Body e Timestamp] - RemoteEvents/RemoteFunctions existentes e respectivos caminhos: [EX.: ReplicatedStorage/Remotes/ChatMessageEvent] - Comandos desejados e regras: [EX.: /help, /me texto, /mute jogador, /unmute jogador, /clear] - UserIds, cargos ou sistema de permissões administrativo existente: [PREENCHER] - Limite de caracteres, cooldown, máximo de mensagens visíveis e alcance das mensagens: [PREENCHER] - Desejo manter ou desativar a janela padrão do chat Roblox: [PREENCHER] - Outras integrações, como DataStore de mutes, sistema de equipes ou logs: [PREENCHER] Caso alguma informação esteja ausente, adote nomes padrão claros, declare as suposições antes do código e faça o sistema funcionar sem depender de assets externos. Não faça perguntas adicionais: entregue uma implementação funcional e explique como alterar os pontos configuráveis. A solução deve ser composta obrigatoriamente por DOIS scripts completos e coordenados: 1. Um Script de servidor em ServerScriptService, por exemplo `CustomChatServer`. Ele é a fonte de verdade para validação, filtro, rate limit, permissões, mutes, interpretação de comandos e distribuição das mensagens. 2. Um LocalScript em StarterPlayer > StarterPlayerScripts, por exemplo `CustomChatClient`. Ele controla apenas a UI local: captura do TextBox, renderização das mensagens recebidas, scroll automático e feedback visual. Ele nunca decide se uma mensagem, comando, dano, moeda, mute ou privilégio é válido. Use um RemoteEvent em ReplicatedStorage, preferencialmente dentro de uma pasta `Remotes`, para envio de tentativas de mensagem do cliente ao servidor e para entrega de mensagens aprovadas aos clientes. Se o RemoteEvent não existir, o Script de servidor deve criá-lo de forma segura com `FindFirstChild` antes de instanciar, sem duplicar objetos. Informe exatamente o nome escolhido e o caminho final no Explorer. Não use RemoteFunction para envio normal de mensagens, salvo se houver uma justificativa técnica concreta. Requisitos obrigatórios de segurança e funcionamento: - O servidor deve validar rigorosamente tipo, comprimento, conteúdo vazio, excesso de espaços, frequência de envio e estado do jogador antes de processar qualquer dado recebido pelo RemoteEvent. - Implemente rate limiting server-side por jogador, com cooldown configurável e limite de mensagens por janela de tempo. Mensagens em excesso devem ser recusadas sem replicação. - Filtre toda mensagem comum e todo texto livre usado por comandos com `TextService:FilterStringAsync`, usando o UserId do autor, e converta a saída com `GetChatForUserAsync` para CADA jogador destinatário. Nunca envie texto não filtrado a outros jogadores e trate falhas do TextService com `pcall`, recusando a mensagem de modo seguro quando o filtro falhar. - Comandos devem começar com `/`, ter parser previsível, comparação case-insensitive e tabela configurável de permissões. Implemente ao menos `/help`, `/me <texto>`, `/mute <jogador>` e `/unmute <jogador>`. Apenas administradores autorizados podem mutar ou desmutar; jogadores mutados não podem enviar mensagens nem comandos comuns, exceto se você documentar uma exceção segura. - Para busca de jogador em comandos, trate nome parcial ambíguo, jogador inexistente e tentativa de ação sobre si mesmo quando aplicável. Não confie em nome ou UserId fornecido pelo cliente: determine o remetente exclusivamente pelo parâmetro `Player` do evento no servidor. - Preserve o autor da mensagem, UserId, tipo da mensagem (normal, ação ou sistema), horário e texto já filtrado no payload entregue ao cliente. O cliente deve validar superficialmente o payload recebido antes de renderizar e escapar/tratar texto de modo apropriado para não quebrar a UI. - Use `TextChatService` apenas quando for compatível com a estratégia escolhida. Como esta é uma UI própria, não dependa do chat padrão para segurança. Se a desativação do chat padrão exigir configuração manual de propriedades, explique isso claramente sem usar APIs obsoletas ou comportamento inseguro. - Evite loops de espera desnecessários, `wait()` legado, APIs depreciadas e referências frágeis. Use `WaitForChild` com cuidado e constantes configuráveis no topo dos scripts. Entregue a resposta nesta ordem: (1) resumo da arquitetura e premissas adotadas; (2) árvore exata de objetos no Explorer, incluindo RemoteEvent e elementos mínimos da UI; (3) código integral do Script de servidor em um bloco markdown ` ```lua `; (4) código integral do LocalScript em outro bloco markdown ` ```lua `; (5) instruções objetivas de instalação e teste com dois jogadores usando Start Server no Roblox Studio; (6) checklist de segurança e pontos para expandir, como persistência de mute via DataStore, logs de moderação e canais por equipe. Os códigos devem estar completos, prontos para colar, fortemente comentados em português do Brasil, sem pseudocódigo, sem trechos omitidos e sem depender de módulos não fornecidos. Priorize compatibilidade com Roblox atual e explique qualquer limitação inevitável do filtro oficial.