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.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. ---
v1.0.4269GitHub ↗
## [Pagamentos do MercadoPago que nunca chegavam, acesso VIP que nunca era liberado e o formulário de configuração] - 2026-08-21 - **Pagamento aprovado, pedido parado, nada entregue.** O aviso que o MercadoPago envia ao painel quando um pagamento é aprovado vinha sendo **recusado** por uma proteção contra requisição forjada. Como esse aviso é servidor-para-servidor, ele não traz a identificação de navegador que a proteção esperava — e era barrado antes de qualquer verificação. O efeito: o dinheiro entrava, o pedido continuava "Pendente", nada era entregue, e o painel mostrava receita zerada mesmo com vendas. Nenhum erro aparecia em lugar nenhum; o pedido apenas parecia abandonado. **Se você usa MercadoPago, confira seus pedidos pendentes depois de atualizar** — os que foram pagos podem ser recuperados. - **Botão "Sincronizar Pagamento" e verificação automática.** Todo pedido pendente agora tem um botão que pergunta ao gateway o que aconteceu e conclui o pedido se o pagamento foi aprovado. Além disso, o painel passa a varrer sozinho os pedidos pendentes quatro vezes por dia. Aviso de pagamento é entrega de terceiro e pode se perder por queda de rede ou instabilidade do gateway — agora não fica dependendo só dele. - **"Acesso a mapas VIP" não liberava ninguém.** Servidores trazidos pela importação do ARK Server Manager não eram marcados como VIP, e a liberação depende dessa marcação — então nenhuma compra de acesso jamais chegou à lista de permissão do servidor. A importação agora marca os mapas VIP pelo nome, e a liberação passa a valer para a frota inteira, não só para o cluster do último servidor jogado. Quem comprava sem nunca ter jogado ficava permanentemente de fora, sem conseguir entrar para se corrigir. - **Servidor desligado deixava de receber e de perder o VIP.** A liberação é feita com o servidor no ar; se o mapa VIP estivesse fora quando alguém comprava, aquela compra nunca alcançava esse mapa. E, pior, quem tinha o acesso vencido enquanto o servidor estava fora ficava com ele **para sempre**. Agora, quando um servidor sobe, a lista é reconciliada nos dois sentidos: libera quem tem direito e remove quem perdeu. - **Renovar antes de vencer queimava os dias restantes.** Comprar de novo um VIP ainda ativo criava uma segunda assinatura em paralelo começando do zero, em vez de somar. Quem renovava com 20 dias restantes perdia esses 20 dias — e passava a receber avisos de vencimento duplicados. Agora os dias são somados ao prazo atual. - **Venda para quem não tinha como receber.** A trava que exige Steam vinculada só valia para produtos que entregam por comando no jogo. Acesso a mapa não usa comando — usa lista de permissão, que também precisa saber quem é o jogador — então a trava não o alcançava e a compra passava. Agora qualquer produto que dependa da identidade no jogo exige o vínculo. - **O formulário de configuração nunca funcionou no programa instalado.** Nos cinco jogos, ao abrir a configuração de um servidor a tela sempre caía no editor de texto puro, porque a descrição dos campos não era encontrada no pacote. Agora ela vai embutida no programa. Junto, a configuração de ARK passou de 56 para 121 opções, com busca por palavra-chave, unidade e limites em cada campo. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4266GitHub ↗
## [Chave do bot realmente separada, importação do ASM visível e envs que enganavam] - 2026-08-17 - **A chave do bot não separava nada de verdade.** O painel já gerava uma chave própria para o bot, mas a API continuava aceitando *também* o segredo do plugin do jogo como senha de administrador. Como esse plugin roda na máquina do servidor de ARK, mais exposta que a do painel, quem o comprometesse ganhava acesso administrativo completo — exatamente o que a chave separada existia para impedir. Agora, quando a chave do bot está configurada, só ela vale. O plugin continua funcionando normalmente: ele se autentica por outro caminho. - **A importação do ARK Server Manager estava pronta e escondida.** Ela só era alcançável por "Varrer pasta base", um nome que não menciona o ASM — então quem procurava acabava no assistente de instalar do zero, que pergunta tudo à mão. Agora, com o ASM detectado, "Importar do ARK Server Manager" aparece como primeira opção do menu Adicionar servidor, já com a quantidade de servidores encontrados. - **Não dava para sair do assistente de novo servidor.** O botão "Voltar" só andava entre os passos; quem entrava por engano ficava preso na tela. Agora há um caminho de volta para a lista. - **O assistente sugeria nomes de ARK para qualquer jogo.** Com Palworld escolhido, os exemplos de nome e identificador continuavam falando de ARK. Passaram a refletir o jogo selecionado. - **Busca de mods falhava para quem seguia o manual.** A chave da Steam era lida com dois nomes diferentes em partes diferentes do sistema, e o manual documentava só um deles — quem preenchia o documentado via a busca de mods do painel falhar sem explicação. Os dois nomes passaram a valer. - **O modelo de configuração de produção levava a um painel que não subia.** Ele descrevia uma forma de instalação que saiu do projeto em abril e omitia três configurações obrigatórias. Reescrito para a instalação atual. Também saíram do modelo os ajustes de limite de requisições, que nunca tiveram efeito nenhum apesar de documentados. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4263GitHub ↗
## [Chave do bot realmente separada, importação do ASM visível e envs que enganavam] - 2026-08-17 - **A chave do bot não separava nada de verdade.** O painel já gerava uma chave própria para o bot, mas a API continuava aceitando *também* o segredo do plugin do jogo como senha de administrador. Como esse plugin roda na máquina do servidor de ARK, mais exposta que a do painel, quem o comprometesse ganhava acesso administrativo completo — exatamente o que a chave separada existia para impedir. Agora, quando a chave do bot está configurada, só ela vale. O plugin continua funcionando normalmente: ele se autentica por outro caminho. - **A importação do ARK Server Manager estava pronta e escondida.** Ela só era alcançável por "Varrer pasta base", um nome que não menciona o ASM — então quem procurava acabava no assistente de instalar do zero, que pergunta tudo à mão. Agora, com o ASM detectado, "Importar do ARK Server Manager" aparece como primeira opção do menu Adicionar servidor, já com a quantidade de servidores encontrados. - **Não dava para sair do assistente de novo servidor.** O botão "Voltar" só andava entre os passos; quem entrava por engano ficava preso na tela. Agora há um caminho de volta para a lista. - **O assistente sugeria nomes de ARK para qualquer jogo.** Com Palworld escolhido, os exemplos de nome e identificador continuavam falando de ARK. Passaram a refletir o jogo selecionado. - **Busca de mods falhava para quem seguia o manual.** A chave da Steam era lida com dois nomes diferentes em partes diferentes do sistema, e o manual documentava só um deles — quem preenchia o documentado via a busca de mods do painel falhar sem explicação. Os dois nomes passaram a valer. - **O modelo de configuração de produção levava a um painel que não subia.** Ele descrevia uma forma de instalação que saiu do projeto em abril e omitia três configurações obrigatórias. Reescrito para a instalação atual. Também saíram do modelo os ajustes de limite de requisições, que nunca tiveram efeito nenhum apesar de documentados. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4257GitHub ↗
## [Perfil do jogador com números reais, avisos que não saíam e correção crítica de segurança] - 2026-08-16 - **Correção crítica de segurança na restauração de backup.** A biblioteca que descompacta os arquivos de backup tinha uma falha conhecida: um arquivo `.bfbackup` adulterado — inclusive um baixado da nuvem — podia travar o painel ao ser restaurado. Atualizada. Junto com ela foram outras seis bibliotecas com falhas conhecidas; o total de alertas de segurança caiu de 94 para 61, e nenhum crítico permanece. - **O perfil do jogador mostrava tudo zerado.** Abates, mortes e tempo de jogo apareciam como zero na aba do administrador, na página pública do jogador e nos embeds do Discord. Os números eram lidos de campos que nada preenchia, enquanto os valores reais viviam em outro lugar. Agora vêm da fonte certa, e o tempo total é a soma do que o jogador jogou em cada servidor. A aba do administrador também passou a listar os números por servidor. - **O aviso de Blood Moon (7 Days to Die) nunca chegava ao Discord.** Faltava o canal para onde o aviso deveria ir, então ele era descartado em silêncio. Além disso, a verificação rodava só de hora em hora, o que fazia os avisos de 30 e de 10 minutos quase nunca acontecerem. Corrigido: a verificação passou para a cada 5 minutos e o aviso chega no canal de status. - **Três interruptores do painel não faziam nada.** "Notificar entrada" e "Notificar saída" não desligavam os avisos do Discord; "Concluir evento automaticamente" não tinha como ser desligado; e o "Máximo de bilhetes por jogador" era salvo mas ignorado nas loterias criadas automaticamente. Os três passaram a funcionar. - **Falha de conexão aparecia como "vazio" ou "não configurado".** Se a rede oscilasse, o cartão de pagamentos dizia "Não configurado" — e ainda desabilitava o botão de testar, justamente o que ajudaria a diagnosticar. Os feeds de atividade mostravam "sem atividade recente" tanto carregando quanto falhando. Agora cada tela distingue os três estados e oferece "tentar de novo". - **Renomear um servidor não atualizava o painel inteiro.** O nome novo aparecia numa tela e continuava velho em outra até recarregar. O mesmo valia para salvar um arquivo: a lista não refletia o novo tamanho e data. - **Importar do ARK Server Manager virou marcar e confirmar.** A tela reconhece o ASM instalado e agora lista os servidores que ele gerencia um a um, já com mapa, porta, slots e versão lidos do perfil. Você marca os que quiser e confirma — não precisa mais varrer o disco nem redigitar nome, portas e senha de RCON servidor por servidor. A senha nunca passa pelo navegador: quem lê o perfil é o painel, no próprio computador. O agrupamento também vem de lá — servidores que o ASM tem no mesmo cluster entram no mesmo cluster aqui, criado sozinho. Servidor cujo perfil não tem senha de RCON gravada aparece marcado como tal e não bloqueia a importação dos outros; servidor que já existe não é sobrescrito. - **Botão para reler as portas do disco.** Servidores importados antes de uma correção anterior ficaram com a porta de consulta errada, o que gera regra de firewall na porta errada e alarme falso. O cartão de portas ganhou um botão que relê a configuração do servidor e corrige. - **Regras de transferência entre mapas saíram do diálogo.** Agora ficam na própria página do cluster, junto do resto da configuração dele. - **Falha de segurança na instalação de plugins.** O caminho de destino não era validado, então o arquivo de configuração do plugin — que carrega a chave de comunicação com o painel — podia ser gravado em qualquer pasta do computador. Agora precisa estar dentro da pasta do servidor. - **Busca global (Ctrl+K) mais leve.** Abria listando tudo: todas as páginas, todos os servidores e todos os clusters de uma vez. Agora abre com os atalhos principais e busca o resto conforme você digita. - **Rankings de doma removidos.** Essa informação não é coletada por nenhuma parte do sistema, então o ranking aparecia sempre vazio. Foi retirado do painel e do bot em vez de continuar oferecendo uma lista que nunca teria conteúdo. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4208GitHub ↗
## [Pontos em dobro e o painel reiniciando sozinho] - 2026-08-14 - **Pontos por tempo de jogo podiam ser creditados duas vezes.** A tarefa que dá pontos por tempo online roda a cada minuto. Quando ela demorava mais que um minuto para terminar — o que acontece com muitos jogadores conectados, ou quando a loja ArkShop está lenta para responder —, a rodada seguinte começava antes da anterior marcar quem já tinha recebido, e o mesmo jogador ganhava de novo. Agora uma rodada espera a anterior terminar. - **O painel parou de reiniciar sozinho sob carga.** O verificador que pergunta "a API está viva?" media também o tamanho do banco a cada 5 segundos — uma consulta que percorre os arquivos do banco e fica mais lenta conforme ele cresce. Em momentos de disco ocupado, ela demorava tanto que a verificação concluía que a API estava travada e a reiniciava, sem que houvesse problema nenhum. O tamanho passou a ser medido uma vez por minuto; a checagem de que o banco responde continua a cada 5 segundos. - **A construção dos plugins do ARK voltou a funcionar fora de uma máquina específica.** O script exigia uma versão do Visual Studio que nem o manual do projeto recomenda. Só afeta quem compila os plugins do zero. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4196GitHub ↗
## [Chave de atualização protegida por senha] - 2026-08-13 - **A chave que assina as atualizações passou a ser protegida por senha.** É ela que garante que uma atualização veio mesmo de nós: o painel só instala um pacote se a assinatura conferir. A chave anterior não tinha senha, então bastava ter acesso ao arquivo para assinar um instalador que qualquer painel aceitaria e executaria. Esta versão é a ponte da troca — ela ainda é validada pela chave antiga e já traz a nova, então **instale-a antes das próximas**: sem ela, o painel não vai reconhecer as atualizações seguintes e você precisará reinstalar à mão. - **A construção dos plugins do ARK voltou a funcionar fora de uma máquina específica.** O script exigia uma versão do Visual Studio que nem o manual do projeto recomenda, e falhava antes de compilar qualquer coisa. Agora ele usa o Visual Studio que estiver instalado. Só afeta quem compila os plugins do zero. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
v1.0.4188GitHub ↗
## [Painéis do Discord parando de duplicar, whitelist VIP e portas no roteador] - 2026-08-13 - **O bot parou de repostar os painéis fixos.** A cada atualização do painel, os embeds fixos do Discord (loja, servidores, regras) apareciam de novo, deixando o canal cheio de cópias e as mensagens antigas órfãs. O bot pergunta ao painel se a mensagem já existe antes de postar — e, quando não conseguia essa resposta porque a API estava reiniciando, entendia "não existe" e postava outra. Agora ele sabe diferenciar "não existe" de "não consegui perguntar", e no segundo caso não faz nada. A mensagem também só é enviada depois que dá para registrá-la; se o registro falhar, a mensagem é apagada em vez de virar órfã. - **O ASM parou de reclamar do arquivo de whitelist ao subir os servidores.** O erro *"o processo não pode acessar o arquivo PlayersJoinNoCheckList.txt porque ele está sendo usado por outro processo"* aparecia justamente na hora de ligar os servidores. Quem escrevia no arquivo era o próprio ARK, ao receber a liberação de acesso VIP que o painel reenviava a cada reinício da API — dezenas de comandos de uma vez. O painel passou a lembrar o que já aplicou, então reenvia só quando o VIP realmente muda. - **Abrir as portas no roteador, pelo painel.** Na tela do servidor, ao lado de "abrir portas no firewall", agora existe "abrir portas no roteador". O firewall resolve para quem joga na mesma rede; quem entra pela internet precisa que o roteador encaminhe as portas. Roteador sem UPnP (ou com ele desligado) avisa o que fazer, em vez de dar erro. - **O número de jogadores online no site deixou de ser inventado.** O contador da página inicial somava uma variação aleatória ao valor real "para dar movimento" — mostrava gente que não existia e, com o cluster vazio, chegava a exibir número negativo. Agora mostra a contagem verdadeira. - **Painel em inglês e espanhol.** Seis telas do detalhe do servidor mostravam o nome interno do campo em vez do texto traduzido para quem usava o painel nesses idiomas. E todos os formulários de cadastro tinham o título no plural ("Novo Metas", "Novo Loterias") — agora concordam. - **O webhook de auditoria configurado no painel volta a ser usado.** Ele era ignorado em silêncio e o sistema caía sempre no endereço do arquivo de configuração. Os alertas também voltam a sair assinados com o nome do seu cluster. - **Menos lixo no log.** O painel tentava gravar cache dentro da pasta de instalação, onde o Windows não deixa, e registrava o erro a cada acesso — um terço do log era isso, o arquivo enchia e apagava o histórico útil para diagnosticar problemas de verdade. - **O bot passou a usar uma chave própria para falar com o painel.** Antes ele reaproveitava a mesma chave dos plugins que rodam na máquina do servidor de jogo — uma máquina mais exposta que a do painel. Agora cada um tem a sua. A troca é automática: o painel gera a chave nova sozinho no primeiro arranque depois da atualização, sem reinstalar nem reconfigurar nada. Atualização in-place pelo auto-updater — não precisa reinstalar plugins nem reiniciar servidores. ---
Portalv0.1.0licensing + 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).