Skip to content

Latest commit

 

History

History
77 lines (61 loc) · 3.27 KB

OPERATIONS.md

File metadata and controls

77 lines (61 loc) · 3.27 KB

Operação

Runbook de produção do Codiconomy: um único processo Bun, um único arquivo SQLite em volume persistente. O bot é single-guild, então os comandos continuam registrados na guild (atualização imediata).

Ambiente

  • VPS ou container com Bun e volume persistente para o diretório de SQLITE_DATABASE_PATH.
  • Variáveis: DISCORD_TOKEN, DISCORD_CLIENT_ID, DISCORD_GUILD_ID e SQLITE_DATABASE_PATH (apontando para o volume). Injete-as pelo gerenciador de segredos da plataforma; nunca faça commit do .env.
  • Mantenha uma única instância em execução: o scheduler e as transações assumem um só processo escrevendo no SQLite.
  • Gerenciador de processo com reinício automático (systemd, Docker restart: unless-stopped). O bot trata SIGTERM e SIGINT com encerramento limpo.

Permissões do bot no servidor

Convide com os scopes bot e applications.commands e dê ao bot, no canal de anúncios: Ver canal, Enviar mensagens e Incorporar links. O bot usa somente o intent Guilds (não privilegiado). DMs de soltura e vencimento dependem de o membro aceitar mensagens do servidor; falhas são ignoradas e registradas como discord.notifier.dm_failed.

Deploy

git pull
bun install --frozen-lockfile
bun run check && bun test
bun run db:migrate      # o bot não mantém backups: copie o arquivo antes, se precisar
# reinicie o processo (systemctl restart codiconomy / docker compose up -d)

Confirme nos logs: discord.commands.registration.completed, discord.login.completed, discord.client.ready e ledger.reconcile.ok.

Rollback

  1. Pare o processo.
  2. Volte o código para a versão anterior (git checkout <tag>).
  3. Se a versão nova aplicou uma migration, restaure uma cópia do arquivo feita por você antes de migrar — migrations não têm down e o bot não cria backups.
  4. Suba o processo e confira os logs.

Verificações de integridade

A cada hora o bot roda reconcile() e escreve ledger.reconcile.ok ou ledger.reconcile.failed (com a lista problems). Se falhar: pare o bot, copie o arquivo, rode a suíte de testes localmente contra uma cópia e não corrija saldos manualmente — qualquer ajuste deve ser um lançamento pelo postTransaction.

Temporadas

  • A temporada 1 nasce no primeiro boot, com 14 dias.
  • Ao fim do prazo o job season.end encerra a temporada e anuncia o ranking no canal configurado. Nenhuma temporada nova começa sozinha.
  • Para iniciar a seguinte: /admin temporada iniciar [duracao] [evento] [zerar_dinheiro] [zerar_habilidades] [zerar_risco]. Os padrões zeram o dinheiro e o risco e copiam as habilidades.
  • Encerrar antes do prazo: /admin temporada encerrar.
  • Prêmios entre temporadas: /admin cofre saldo e /admin cofre transferir (depois que a nova temporada começou, pois o prêmio vai para o banco da temporada ativa).

Lançamento (temporada 1)

  1. bun run db:migrate no volume de produção.
  2. Suba o bot; no servidor, /admin canal noticias no canal de anúncios.
  3. Revise /admin parametro ver e as manchetes (/admin noticia listar).
  4. Crie as categorias e perguntas do quiz e publique.
  5. Acompanhe os primeiros dias e ajuste valores com /admin parametro definir, /admin evento criar e /admin dia duracao, sem deploy.