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 emcustomer.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.txte 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).