Voltar
Releases

Changelog

Atualizado em 2026-04-21

Acompanhe a evolucao da plataforma. Dividimos o changelog entre a Plataforma BrutusForge (o software self-hosted que você instala) e o Portal & Licensing (a experiencia de compra, minha conta e cobranca).

Plataformacliente self-hosted
v1.0.4511GitHub ↗
## [Comando agendado que roda, ponto que volta e painel que não mente] - 2026-09-23 Um mutirão em cima do painel, do robô do Discord e dos plugins do jogo. O ponto de partida foi o dino wipe agendado que não rodava. A causa foi achada e reproduzida, e o mesmo padrão apareceu em outros lugares. ### Comandos agendados e RCON - **O dino wipe agendado não rodava.** Eram dois defeitos somados. O módulo de comandos agendados só ligava se alguém tivesse salvo a tela dele pelo menos uma vez: o "Ativo" que vinha marcado por padrão não valia. E a lista de comandos permitidos recusava `cheat DestroyWildDinos` e qualquer comando digitado em minúsculas. Agora o padrão vale, a lista ignora maiúsculas e minúsculas e aceita o prefixo `cheat`/`admincheat`. - **O histórico mostra cada servidor.** Em Saúde & Manutenção → Comandos agendados, cada execução fica registrada por servidor, inclusive quando ele estava desligado. Antes, um servidor que falhava sumia do histórico. - **Um comando não é mais enviado duas vezes.** Quando a conexão caía depois do envio, o RCON tentava de novo e o comando rodava duas vezes. Agora só há nova tentativa se o comando ainda não tiver saído. - **O wipe agendado só anuncia "concluído" quando concluiu.** - **Um `|` no comando é recusado.** O caractere encadeava um segundo comando fora da lista de permitidos. ### Pontos no jogo - **Os comandos pagos do jogo cobram antes e devolvem se falharem.** Viagem rápida, utilidades de dino, achar corpo e pintar dino conferiam o saldo, executavam e só depois debitavam. Com dois comandos ao mesmo tempo, os dois passavam na conferência e o segundo saía de graça; se o débito se perdesse no caminho, nada era cobrado. Agora o débito vem primeiro e é devolvido sozinho quando o comando não se completa. A reserva fica gravada no banco, então a devolução acontece mesmo que o BrutusForge reinicie no meio, e nunca é paga duas vezes. - **Pontos por tempo online são configuráveis.** Uma nova seção, "Pontos por tempo online", fica na configuração do cluster. O padrão é 5 pontos a cada 60 minutos. Quando o ArkShop está ligado, quem credita o tempo online continua sendo ele. - **O prêmio por marco de voto vai para quem votou.** O comando rodava no primeiro jogador do mundo, e o item ia para outra pessoa. Agora roda no jogador que votou e falha, com aviso ao admin, quando ele não está online. O item do marco passa pela fila de entregas, com nova tentativa. - **Os pontos por voto seguiam sempre em 50**, qualquer que fosse o valor escolhido na tela. ### Entregas - **Item em dobro.** Quando o comando de entrega já tinha saído e a resposta se perdia, o pedido voltava para a fila e era entregue de novo. Agora vai para revisão manual. Vale para ARK, Rust e 7 Days to Die. - **Dino entregue pelo painel sem a sela aparece como entrega parcial no log**, em vez de passar como completo. - **O aviso de "falhou permanentemente" saía a cada tentativa**, e não só na última. ### Cada cluster com a sua configuração - **Mais leituras seguem o cluster do servidor.** A mesma família de defeitos da versão anterior aparecia em pontos que ela não tinha coberto: eventos, loteria, relay de logs de tribo, ponte de chat, backup, prêmio de voto e auditoria no Discord. - **O aviso de renovação de VIP ia para o canal público.** A DM falhava sempre, e o texto, com o link de pagamento, caía no webhook de notificações. Agora vai por DM, sem passar pelo canal. - **Eventos só passavam de agendado para ativo depois que alguém apertava Salvar na tela deles.** - **Kick pelo painel do mapa do Discord expulsa naquele mapa.** O mapa escolhido não chegava à API. ### Painel - **A tela de configuração perdia o que você tinha salvo.** Quando o carregamento falhava, o formulário aparecia preenchido com os padrões. Um "Salvar" apertado nessa hora sobrescrevia a configuração real. Agora a tela mostra o erro e um botão "Tentar novamente", sem formulário para salvar. - **Ações que falhavam apareciam como sucesso.** Ligar, desligar e reiniciar servidor, testar notificação e cancelar loteria mostravam o aviso verde mesmo quando o servidor recusava. Agora a tela mostra o motivo. - **Reiniciar pela lista de servidores ou pela paleta de comandos pede confirmação.** - **Os números do painel batem.** Os últimos 30 dias contam por data, os alertas de saúde só consideram servidores ligados e os indicadores não somam o que não devem. - **Limpar um campo de produto, evento ou sorteio limpa de verdade.** Antes o valor antigo voltava ao salvar. - **O painel cabe no celular.** Cabeçalhos e barras de ação quebram linha em vez de empurrar a página para o lado. - **Revisão de textos.** Cerca de 280 acentos foram corrigidos e uns 100 textos que estavam fixos no código passaram a seguir o idioma escolhido. ### Robô do Discord - **Um erro no meio de um comando não deixa mais o "pensando…" para sempre.** O robô responde com a mensagem de erro que a API devolveu. - **Listas longas respeitam os limites do Discord.** `/online`, `/player`, o cassino e os seletores de servidor quebravam com mais de 25 itens ou textos longos. - **`/script` mostra títulos e descrições longos sem ser recusado pelo Discord.** ### Plugins do jogo - **Entrega parcial é entrega parcial.** Quando o dino chegava e a sela não, o pedido era marcado como entregue por inteiro. Agora o plugin avisa que a entrega foi parcial e o pedido vai para revisão. - **Jogador morto ou sem personagem não perde a compra.** A entrega falhava de vez e o pedido era estornado. Agora conta como offline e a fila tenta de novo. - **Desbloqueio de engrama só confirma depois de conferir que o engrama foi desbloqueado.** - **Dino por id sem o caminho `/Game/...` é recusado**, em vez de confirmar sem saber se a criatura nasceu. O beacon continua aceitando o nome de classe. - **Com a licença pendente, o plugin respondia "licença inválida" também aos comandos de outros plugins.** Agora a verificação vale só para os comandos do BrutusForge. - **Desligar a ponte de chat, a lista de jogadores, o relay de logs de tribo ou o vínculo de contas agora desliga de fato.** - **Chat entre servidores no ASA**: mute, anti-spam, tags e imunidade de admin não funcionavam. O chat de tribo era roteado pelo nome e vazava para tribos com o mesmo nome. Agora a comparação é pelo id da tribo. - **A viagem rápida confere se a cama ainda existe antes de teleportar** e escolhe a mais próxima antes de cortar a lista em 30. - **Castrar dino respeita as criaturas que o jogo não deixa castrar** (ASA) e replica o efeito para os jogadores (ASE). - **O relay de logs de tribo pesa menos no servidor.** Com mais de mil tribos, ele descartava eventos de pontos e de vínculo. Agora só reenvia as tribos que mudaram e distribui o trabalho entre os ticks. ### O que muda para quem já usa - **Comandos agendados, eventos, loteria e relay de logs de tribo seguem o padrão "Ativo" mesmo sem nunca terem sido salvos.** Se você nunca abriu essas telas e esperava que estivessem desligadas, confira antes de atualizar. - **Um comando agendado que nunca rodou só executa depois de um intervalo completo após a atualização.** Não sai tudo de uma vez no primeiro minuto. - **Produto de dino cadastrado só com o nome da criatura precisa do caminho `/Game/...`.** - **Ordem de atualização: primeiro o BrutusForge (auto-updater), depois os plugins nos servidores.** O plugin novo usa a reserva de pontos da API nova. O plugin antigo continua funcionando com a API nova. A API antiga com o plugin novo também funciona, mas sem a devolução automática. ---
v1.0.4463GitHub ↗
## [Preço em português, tema que não pisca e instalador mais leve] - 2026-09-21 Fecha as pendências que ficaram de fora da versão anterior. ### Loja e pagamento - **Carrinho em moeda estrangeira cobrava valor de real como se fosse dólar.** O preço do produto é sempre em reais. Quando o carrinho vinha marcado em outra moeda, o valor seguia para o gateway com a etiqueta trocada — R$ 29,90 chegavam como US$ 29,90. O checkout agora recusa carrinho que não esteja em reais e explica que não há conversão de câmbio. - **Preço aparecia como "R$ 29.90"** — ponto no lugar da vírgula e sem separador de milhar. Passou a seguir a formatação do idioma de quem está vendo. ### Aparência - **Quem usa tema claro via um flash escuro em toda troca de página.** O tema só era aplicado depois que o JavaScript carregava, então cada navegação piscava escuro antes de clarear. Agora a página já nasce no tema escolhido, e o idioma também vale antes do JavaScript carregar. ### Segurança - **Os cinco comandos destrutivos do Discord passam a checar cargo.** `/ban`, `/kick`, `/mute`, `/unban` e `/rcon` dependiam apenas da permissão nativa do Discord, que o dono do servidor pode afrouxar nas Integrações sem perceber. Agora conferem o cargo configurado — e quem nunca configurou cargo nenhum continua entrando, em vez de ficar trancado para fora. ### Tamanho - **O instalador carregava 31 MB de código-fonte do site**, que nunca é executado, e o robô do Discord tinha deixado de ser compactado (12,6 MB onde bastam 5,9 MB). O download ficou 2 MB menor e a instalação ocupa cerca de 38 MB menos em disco. ---
v1.0.4453GitHub ↗
## [O que o jogador paga, o jogador recebe] - 2026-09-21 Um mês de auditoria completa do produto. A maior parte do que está aqui **não era pedido de feature** — eram coisas que já apareciam prontas na tela e não faziam o que diziam. Abaixo está agrupado por onde você sente. ### Loja, pagamentos e entrega - **Quatro tipos de produto cobravam e não entregavam nada.** Dino, Beacon, Experiência e Desbloqueio de Engrama debitavam o jogador e encerravam o pedido como concluído sem nunca mandar o comando ao servidor. Os quatro entregam agora, e só marcam o pedido como entregue depois que o plugin confirma. - **Quem comprava várias unidades recebia uma.** A quantidade era lida na hora de cobrar e ignorada na hora de entregar. - **Pagamento em PIX e boleto nunca virava pago.** O webhook do MercadoPago só reconhecia cartão; quem pagava por PIX ficava com o pedido pendente para sempre, esperando uma entrega que não vinha. - **Compra com pontos debitava e não entregava** — e tirava do saldo errado quando o jogador tinha conta em mais de um cluster. - **O reembolso não desfazia nada.** Estornar um pedido devolvia o dinheiro e deixava o jogador com o item, o VIP e os pontos. Agora o estorno reverte o que foi entregue. - **O estorno automático nunca disparava**, e quando uma entrega falhava o aviso de erro sobrescrevia o de sucesso no Discord — você via "falhou" em cima de uma compra que tinha dado certo. - **O pedido andava para trás.** Um segundo aviso de pagamento re-entregava tudo de novo e podia rebaixar o estado de um pedido já concluído. - **Dino entregue por ID vinha 50% acima do nível vendido.** O ARK aplica um multiplicador ao spawnar por ID de criatura que não existe quando você spawna por blueprint; a conta agora compensa isso. - **Limites de compra não somavam as linhas do mesmo produto** — dava para furar o limite comprando o mesmo item em pedidos separados. E as regras de compra (limite por jogador, produto inativo, estoque) só valiam num endpoint que o carrinho não usava. - **Jogador pagava e ficava sem nada e sem aviso.** Quando a entrega falhava com o jogador offline, o pedido ficava num limbo silencioso. Agora ele é retomado quando o jogador volta, e o jogador é avisado. ### Comandos e recompensas dentro do jogo - **Comandos cobravam mais de uma vez.** Alguns debitavam pontos a cada tentativa, inclusive quando o efeito não acontecia. A regra agora é uma só: **o comando só cobra depois de confirmar que o efeito aconteceu** — e a API do ARK quase não devolve confirmação, então cada caso foi verificado individualmente. - **`/imprint` cobrava e não aplicava imprint nenhum**, lia a porcentagem do lugar errado, e a opção de escolher a porcentagem — que o painel diz ser de administrador — estava aberta a qualquer jogador. - **Prêmio de evento, sorteio e loteria nunca chegava ao jogador.** O sorteio escolhia o ganhador, anunciava no Discord e parava ali. - **Seis comandos do Discord relatavam o oposto do que aconteceu** — diziam "feito" quando o servidor tinha recusado, e vice-versa. - **Comandos vazavam no chat público** em vez de responder só para quem executou. ### Plugins dentro do jogo (ARK) - **Dois comandos derrubavam o servidor.** `/sdc` (ver cores do dino) e `/track` liam ponteiro nulo em situações comuns — dino recém-spawnado, jogador dormindo. O plugin não caía: o **servidor inteiro** caía. - **A moderação de chat mutava e deixava a palavra passar.** Quem escrevia com evasão (`p.a.l.a.v.r.a`) era detectado e silenciado, mas a palavra aparecia inteira para todo mundo, sem censura. - **A imunidade de administrador no chat não fazia nada.** O campo existia no painel, era lido, atravessava cinco arquivos — e a decisão no fim era fixa. Desligar não tinha efeito. - **Toda mensagem do ArkShop virava uma compra falsa** no log e nos avisos do Discord: "saldo insuficiente" e mensagens de erro apareciam como compra do item "Unknown Item" por 0 pontos. - **`/viajar` dizia "-0 pontos"** em toda viagem gratuita, que é a configuração padrão. - **A proteção contra roubo de item caído aparecia ligada no ASA e não existia lá.** Agora o plugin avisa no log e se desliga, em vez de deixar você achar que está protegido. - **A loteria falava em inglês** para quem tinha o plugin de recompensas instalado, sobrescrevendo o texto em português. - **Três comandos deixavam a fila presa.** Quando a mensagem vinha vazia, o comando ficava pendurado cinco minutos no painel sem nunca ser marcado como terminado. ### Painéis e comandos do Discord - **O embed de status dos servidores parou de atualizar em 15/08 e ninguém foi avisado.** Com dois clusters, o painel passou a perguntar "esta seção está ligada?" para o cluster errado e desligava os dois de uma vez — em silêncio absoluto, porque o caminho não tinha nenhum log. O mesmo defeito estava na lista de jogadores. Agora cada cluster decide por si, e quando um painel é pulado por configuração desligada isso aparece no log. - **O Cluster Hub não publicava em cluster com 7 mapas ou mais.** O Discord recusa a mensagem acima de 40 componentes e o hub pedia 44. - **`/server start` não conseguia ligar servidor desligado** — o seletor só listava servidores online, justamente o contrário do que o comando precisa. - **Dois seletores estouravam o limite de 25 opções do Discord** em clusters grandes, e a mensagem inteira era recusada. - **Alerta de licença e de agendador nunca chegavam ao Discord.** - **Dois agendadores duplicados disputavam o mesmo recurso** — um deles sobrescrevia a presença do bot a cada 15 segundos, ignorando toda a configuração. - **`/watchlist listar` mostrava 15 entradas e escondia o resto** sem nenhuma forma de alcançá-las, enquanto o rodapé anunciava o total. Agora tem paginação. ### Chat entre o jogo e o Discord - **Chat de tribo, aliança e local agora saem do jogo.** A ponte existia inteira dos dois lados — a configuração tinha os rótulos, a API sabia tratar os quatro tipos, o plugin sabia entregar por tribo — e nada disso era alcançável, porque o jogo só encaminhava o chat global. - **Tribo atravessa os mapas por padrão.** Sua tribo espalhada pelo cluster passa a se falar. O mapa de origem fica de fora do repasse porque o chat nativo já entrega ali. - **O que vai para o Discord agora é uma escolha separada.** Antes, ligar um tipo de chat o mandava para os outros mapas **e** para o canal público do Discord de uma vez só — o que entregaria o planejamento das tribos a quem está fora delas. São dois campos independentes, e o espelho no Discord continua só no global. - **Cargo e ícone aparecem no Discord.** As cores e etiquetas por cargo já existiam no jogo; no Discord a mensagem saía crua. Os doze cargos padrão ganharam ícone. ### Servidores, manutenção e configuração - **A tela de configuração mostra só o que precisa de você.** Eram 319 campos abertos de uma vez; agora o que já tem padrão bom fica recolhido, e o topo mostra o que exige decisão sua. Visual alinhado ao padrão aprovado (Cinematic HUD). - **A instância do ASM passou a ser por servidor**, e a tela de Manutenção parou de salvar sem mostrar o que salvou. - **O interruptor do auto-restart passou a ser o do cluster do servidor**, não o de um cluster qualquer. - **Restaurar backup com o servidor online era permitido** e corrompia o mundo. Agora exige o servidor parado. - **Um preset podia sobrescrever a configuração da instalação inteira** — marca, loja, bot — ao ser aplicado "num cluster". - **A aba de Eventos trocava a página em vez de acumular** ao clicar em "Carregar mais", e o botão nunca sumia. ### VIP e assinaturas - **Carência antes de revogar o VIP quando a renovação falha.** Padrão de 3 dias, configurável de 0 a 30. Durante a carência o acesso continua; se o pagamento entrar, a assinatura volta sozinha. - **Assinatura de produto desativado agora expira**, em vez de continuar valendo para sempre. - **VIP restaurado na carência parou de mandar aviso de falha de hora em hora.** ### Segurança - Duas CVEs críticas do Next.js fechadas, `rustls` atualizado (RUSTSEC-2026-0285) e teto nas dependências defasadas. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores.
v1.0.4286GitHub ↗
## [O painel para de religar seus servidores sozinho] - 2026-08-23 - **Você não conseguia manter um servidor desligado.** Ao parar um servidor pelo ASM, o painel entendia aquilo como uma queda e subia de volta — dois a cada varredura. Na prática isso impedia o que mais importa: **atualizar plugins e editar configuração**, que exigem o servidor parado. Confirmado capturando a árvore de processos: quem estava subindo era o próprio painel. - **Agora o religamento é opcional e vem DESLIGADO.** O campo **"Religar servidor que cair"** está em Auto-Restart. Enquanto você não ligar, o painel não encosta nos seus servidores. Se quiser a recuperação automática de queda de volta — ela existe e tem valor, foi ela que pegou um servidor que ficou 10h fora do ar —, é só ligar ali. - **Marcar um servidor como parado agora dura.** Antes, no instante em que o servidor subia uma vez, o painel apagava sozinho essa marcação e voltava a considerá-lo "deve estar ligado". Sua decisão de mantê-lo parado era perdida sem aviso. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. --- ---
v1.0.4283GitHub ↗
## [Licença dos plugins, reinício agendado que respeita você e faxina no código] - 2026-08-23 - **Os plugins pararam de conseguir validar a licença, e ninguém percebeu.** Uma correção de segurança anterior passou a gerar uma chave separada para o bot — e, sem querer, a chave que os plugins usavam deixou de ser aceita justamente na verificação de licença. Os servidores continuaram funcionando porque cada um guarda o último resultado válido em cache, mas a verificação vinha falhando **desde 12 e 17 de agosto**. Um servidor novo, sem esse cache, teria comandos de chat e eventos desligados em silêncio. Corrigido. - **Reinício agendado ignorava o desligamento intencional.** Se você marcasse um servidor como parado no painel, o agendamento subia ele de volta na hora marcada assim mesmo. Agora o agendamento **pula** servidor que você desligou de propósito, e registra o motivo. - **Dá para pausar um reinício agendado sem apagá-lo.** A aba Restarts ganhou um interruptor por linha. Antes, o único jeito de parar um agendamento era excluir — perdendo o horário configurado e o histórico. - **Faxina interna:** removidas cerca de 2.000 linhas de comentário do código. Não muda nada no que você usa; serve para o próprio código parar de carregar explicações antigas que envelhecem e passam a induzir ao erro — foi exatamente o que aconteceu no caso da licença acima. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. --- ---
v1.0.4280GitHub ↗
## [Métricas dos servidores, mods do ASM e o site parando de errar sozinho] - 2026-08-22 - **As métricas de cada servidor apareciam como "-" e nunca funcionaram na sua frota.** Todos os servidores foram configurados para reportar métricas pela **mesma porta de rede**, e só um deles consegue ocupá-la — os outros nove ficavam mudos. O painel já sabia distribuir uma porta por servidor, mas três dos quatro caminhos de cadastro pulavam essa etapa, inclusive o import do ASM, que foi por onde a sua frota inteira entrou. Agora cada servidor ganha a porta dele automaticamente, e o botão **Instalar plugins** conserta os que já existem. - **A tela de mods estava vazia mesmo com 30 mods rodando em cada servidor.** O import do ASM lia os mods do perfil e os descartava. Agora a lista real é adotada assim que você abre a tela — sem precisar cadastrar nada. - **E havia um risco sério escondido nisso:** como o painel achava que não existia mod nenhum, uma ação de mods poderia reescrever a lista do servidor **vazia, apagando os 30**. Foi criada uma trava que distingue "o operador desligou tudo" de "o painel não sabe de nada", e o segundo caso agora é bloqueado. - **O site (loja e páginas públicas) errava cerca de 2.750 vezes por dia.** Um problema na forma de guardar o cache fazia páginas falharem ao serem entregues. Além de encher o registro de erros, o cache **nunca funcionava de verdade** — cada visita reconstruía a página do zero. Corrigido: o site fica mais rápido e o registro volta a ser útil para achar problemas reais. - **O medidor de memória do painel mostrava um valor muito menor que o real.** Ele media apenas o consumo interno do serviço, enquanto o de processador já media a máquina inteira. Os dois agora medem a máquina. - **Trocar a identidade de um servidor podia perder dados.** A renomeação não levava junto a fila de comandos pendentes nem o registro de quem já tinha acesso VIP. Agora leva tudo, de uma vez só. Também é possível corrigir a **pasta de instalação** de um servidor pela tela — antes não havia onde. - **Configuração do ArkShop abre sozinha** quando o servidor está online, sem precisar clicar em "Carregar". - **Menos ruído no Discord e nos registros.** Quando o bot não tem acesso a um canal, ele para de insistir de meia em meia hora indefinidamente e passa a espaçar as tentativas — o aviso continua, com o motivo e o que fazer. **Depois de atualizar:** clique em **Instalar plugins** em cada servidor e reinicie-os quando puder. É isso que entrega a porta de métricas nova para cada um — a atualização do painel sozinha não faz isso. --- ---
v1.0.4277GitHub ↗
## [O religamento automático de servidor nunca funcionou] - 2026-08-21 - **Servidor que caía ficava fora até alguém perceber.** O painel detecta corretamente quando um servidor para de responder e tenta religá-lo sozinho — mas a tentativa falhava **sempre**, por um erro interno de programação, desde que a funcionalidade existe. Em 40 horas de registro foram 2.161 detecções e 105 tentativas de religar, **nenhuma bem-sucedida**. Um servidor que travou às 10:50 ficou dez horas fora do ar. Agora o religamento funciona de verdade: servidor que cai volta sozinho, sem depender de alguém estar olhando. - **Por que passou despercebido tanto tempo.** Duas proteções falharam juntas: a verificação de tipos não alcançava esse trecho, e o teste automatizado reproduzia o mesmo engano do código — ficava verde enquanto a execução real falhava toda vez. As duas foram corrigidas, então uma volta do problema passa a ser barrada antes de chegar em você. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4275GitHub ↗
## [Campanha de cupom no Discord e na loja, boas-vindas que finalmente funcionam] - 2026-08-21 - **Cupom promocional agora se divulga sozinho.** Ao cadastrar um cupom em Comércio → Cupons, marque **"Divulgar como promoção"**: ele passa a aparecer numa faixa no topo da loja (com código, desconto, valor mínimo e quanto falta para expirar) e num painel fixo do Discord, num canal novo chamado **Promoções**. O painel se atualiza sozinho e **sai de cena** quando não há promoção — nada de "nenhuma promoção" parado num canal. A divulgação é opt-in por cupom: quem você criar para um cliente específico continua invisível. - **As boas-vindas do Discord nunca aconteciam do jeito configurado.** Havia dois sistemas: um simples, que rodava, e um completo — com mensagem personalizável, mensagem privada e avatar do membro — que estava **desligado por dentro** apesar de ter cinco campos configuráveis no painel. Você preenchia, salvava, e nada mudava. O completo passou a ser o que roda, e o campo de mensagem personalizada finalmente é usado. - **O painel de boas-vindas não é mais soterrado.** O mesmo canal recebia o painel fixo e uma mensagem por pessoa que entrava, empurrando o painel para cima a cada entrada. Agora só o painel fica lá. - **O bot deixou de insistir eternamente em painel sem permissão.** Quando falta permissão num canal, ele agora registra uma vez e espera 30 minutos antes de tentar de novo — antes eram dezenas de milhares de tentativas idênticas enchendo o registro. A proteção passou a valer para os nove painéis; antes existia só em um. - **Erro de canal do Discord deixou de ser apagado no caminho.** O código descartava a causa da falha ao buscar o canal, então "sem permissão" e "instabilidade momentânea" chegavam indistinguíveis — e o bot tratava as duas como se valesse a pena tentar de novo para sempre. É o que fazia a proteção acima não funcionar de verdade. - **Acabamento nos avisos do Discord.** Três embeds (enquete, estatísticas de servidor e sugestão) apareciam sem a identificação da comunidade que os outros dez já traziam. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4273GitHub ↗
## [Meio milhão de comandos desnecessários por dia contra os servidores] - 2026-08-21 - **O painel repetia as permissões de todo jogador nos servidores, a cada 5 minutos, para sempre.** A sincronização de cargos reenviava `Permissions.Add` de cada grupo que o jogador deve ter **e** `Permissions.Remove` de cada grupo que ele não deve ter — em todos os servidores ARK ligados — sem verificar o que já estava aplicado. Medido em 40 horas de registro: **518.392 comandos**, cerca de 14 mil por hora sem parar, dos quais **73% eram remoções de grupos que o jogador nunca teve**. Agora o painel guarda o que já aplicou e só envia o que mudou; a cada 6 horas reenvia mesmo sem mudança, para corrigir divergência criada por fora. Falha de conexão não é registrada como aplicada — o comando é retentado no ciclo seguinte. - **O site consultava a API a cada página aberta para saber se a instalação está configurada.** Um valor que muda uma vez na vida era buscado a cada requisição: **27.608 consultas** em 40 horas. Numa máquina que roda os servidores de jogo ao lado, é processamento gasto à toa. Passou a ser consultado uma vez e lembrado. - **A identidade visual era rebuscada a cada 5 segundos.** Cor, logo e nome mudam quando você os edita — não a cada 5 segundos. Eram **26.467 consultas**. A janela passou para 5 minutos. - **O gráfico de jogadores das últimas 6 horas era refeito a cada 30 segundos, um pedido por servidor.** Com a frota inteira ligada, cada visitante da página pública gerava uma dezena de consultas a cada meio minuto — **22.166** no período. O gráfico agora se atualiza a cada 5 minutos; a lista de servidores continua a cada 30 segundos. - **Duas falhas que apareciam como comportamento normal.** Se a API não respondesse, o site assumia "instalação completa" sem registrar nada — indistinguível de estar tudo certo. E, se a identidade visual não carregasse, o site caía na marca padrão em silêncio, aparecendo sem a sua marca sem nada explicando. As duas passam a ficar registradas. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4271GitHub ↗
## [Vincular a Steam agora libera o VIP na hora, e o que falha para de falhar calado] - 2026-08-21 - **Quem comprou VIP antes de vincular a Steam ficava esperando sem saber.** A liberação nos mapas VIP é endereçada pelo identificador do jogo (SteamID/EosID). Quem comprava sem tê-lo vinculado não tinha como ser alcançado — e vincular depois **não disparava nada**: só sincronizava os cargos do Discord. O acesso só chegava no próximo reinício de servidor, sem nada indicando que estava aguardando por isso. Agora o vínculo libera o acesso na hora. - **Compra sem identidade de jogo agora aparece no registro.** Quando o comprador não tem Steam vinculada, a liberação não tem como acontecer — mas isso acontecia em silêncio absoluto: o pedido ficava "pago", a lista de permissão vazia, e nenhuma linha explicando o motivo. Passa a registrar o caso e o que fazer. - **Aviso enganoso a cada servidor comum que subia.** O registro dizia "nenhum servidor está marcado como VIP" toda vez que um mapa **não-VIP** era iniciado — situação normal, tratada como problema. O aviso agora só aparece quando a frota inteira está sem marcação, que é o defeito de verdade. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
Portalv0.1.0 — licensing + checkout

v0.1.0 — Primeira venda (2026-04-21)

Portal público de licensing funcional com Stripe + MercadoPago Checkout Pro, admin interno (M2) e dashboard do cliente (M3).

Licensing

  • Emissão de JWT Ed25519 por compra, phone-home diario, HWID fingerprint, grace period de 7 dias.
  • Rate limit + HMAC-SHA256 em /api/licenses/* e webhooks MP.
  • 59 testes criticos (Ed25519, HMAC, subscription, webhook idempotency).

Checkout e renovacoes

  • Stripe subscription lifecycle: renovacao via invoice.paid, revogacao automática em customer.subscription.deleted.
  • MercadoPago Checkout Pro com BRL (PIX/boleto/cartao 12x).
  • Emails transacionais via Resend (confirmação, expiracao, revocacao, 2FA) com templates aplicados na marca.

Admin interno (portal)

  • Dashboard com MRR, gestao de licenses (revoke, estender, transferir HWID).
  • Visao de clientes e pedidos com filtros e paginacao.

Minha conta

  • Cliente acompanha licenses, transfere HWID self-service (1x/mês sem custo), abre Stripe Customer Portal.
  • Login por magic link (email) — em breve: Discord OAuth + email/senha.

Compliance e SEO

  • Páginas legais revisadas: Termos (CDC art. 49 — 7 dias arrependimento), Privacidade (LGPD art. 18 completo + DPO + transferência internacional), EULA (L1 + OFAC + indenizacao).
  • sitemap.xml, robots.txt e OpenGraph image com brand.

Proximos passos

  • Login Discord OAuth + email/senha (além do magic link).
  • Auditoria de acoes admin.
  • Reprocessamento manual de compras.
  • i18n completo (pt-BR + en-US).