Case study
Brasa Bot
Bot de Discord serverless para organizar churrascos: cria o evento, controla quem vai e gera o código Pix para cada participante pagar.

Contexto e problema
Organizar um churrasco em grupo envolve lista de quem vai, valor por pessoa e cobrança.
A ideia era resolver tudo dentro do próprio servidor do Discord, sem servidor próprio para manter ligado.
Solução
- O comando /brasa novo cria o evento com título, data e, opcionalmente, valor e chave Pix.
- Botões para participar, sair e pagar; o organizador gerencia a lista e confirma os pagamentos.
- O código Pix copia e cola (BR Code, com CRC16) é gerado pelo próprio bot.
- Painel web em Next.js com login pelo Discord.
- Respostas em português e em inglês, conforme o idioma de quem usa.
Decisões técnicas
Tudo em um Cloudflare Worker, via Discord Interactions por HTTP
- Por quê
- Sem conexão WebSocket nem processo ligado o tempo todo: o Discord chama o Worker, que verifica a assinatura Ed25519 e responde.
- Trade-off
- O Discord exige resposta em 3 segundos; o Worker responde com uma mensagem adiada e termina o trabalho em segundo plano (ctx.waitUntil).
Login do Discord convertido em sessão do Firebase
- Por quê
- O Worker faz o OAuth do Discord e assina um custom token (JWT RS256 com jose) para o Firebase Auth. Assim, o painel usa as regras de segurança do Firestore normalmente.
- Trade-off
- A chave da service account do Firebase fica nos secrets do Worker e passa a ser um ponto sensível.
Pix gerado no bot, sem intermediário de pagamento
- Por quê
- O código copia e cola segue o padrão EMV do Banco Central e não depende de conta em intermediário nem de taxas.
- Trade-off
- Não há confirmação automática: o organizador marca quem pagou.
Stack
- Bot
- Cloudflare Workers
- discord-interactions
- itty-router
- JavaScript
- Dados e login
- Firestore
- Firebase Auth (custom token)
- jose (JWT)
- Painel
- Next.js
- React
Estado atual
- Comando /brasa novo e botões de presença e pagamento implementados.
- Ainda sem testes automatizados.
- Confirmação automática de pagamento por API de Pix está no roadmap do repositório.
Imagens e diagrama
Um comando ou botão no Discord gera uma requisição HTTP para o Cloudflare Worker. O Worker verifica a assinatura, responde em menos de 3 segundos com uma mensagem adiada e grava o evento no Firestore. O painel web em Next.js faz login pelo Discord por meio do Worker, que devolve um custom token do Firebase.