Bot Discord de economia (CD$ — Codify Money) feito com discord.js 14, Bun,
SQLite e Drizzle: conta com dinheiro limpo e sujo, banco, trabalho, quiz, crime
e roubo, prisão e fiança, investimentos, cassino (roleta, blackjack,
caça-níqueis e corrida de cavalos), notícias e eventos, temporadas e ranking.
Os imports internos usam o alias @/*, que aponta para src/*:
import { Color } from "@/shared-domain/messages";-
Crie uma aplicação no Discord Developer Portal.
-
Em Bot, crie o bot e copie o token; em General Information, copie o Application ID.
-
Ative o Developer Mode no Discord e copie o ID do servidor de teste.
-
Instale o bot no servidor com os scopes
boteapplications.commands. -
Copie
.env.examplepara.enve preencha:cp .env.example .env
DISCORD_TOKEN=seu-token DISCORD_CLIENT_ID=seu-application-id DISCORD_GUILD_ID=seu-server-id SQLITE_DATABASE_PATH=./storage/codiconomy.sqlite
O Bun carrega o .env automaticamente. Não faça commit do arquivo .env nem compartilhe o token.
bun install
bun run db:migrate # cria o banco (necessário antes do primeiro start)
bun run check
bun test
bun run devOs comandos slash são registrados em cada inicialização, somente no servidor
definido por DISCORD_GUILD_ID. Para executar sem watch, use bun run start.
O schema foi recriado do zero. Se você tem um banco local da versão anterior (carteiras/CDC), mova-o antes de migrar — veja
docs/DEVELOPMENT.md.
| Área | Comandos |
|---|---|
| Conta | /cadastrar, /perfil [usuario], /extrato |
| Banco | /depositar, /sacar, /pix |
| Ganhos | /trabalhar, /quiz, /investir, /investimentos |
| Mundo | /noticias, /ranking |
| Crime | /crime, /roubar, /fianca, /trabalhar voluntario:true |
| Cassino | /roleta, /blackjack, /cacaniqueis, `/cavalos abrir |
| Admin | `/admin parametro |
| Outros | /ping |
As regras completas estão em docs/RULES.md.
docs/RULES.md: regras funcionais e balanceamento inicial.docs/ARCHITECTURE.md: módulos, livro-razão, scheduler e modelo de dados.docs/DEVELOPMENT.md: setup, testes, como adicionar comandos e smoke test.docs/OPERATIONS.md: deploy, rollback e temporadas.docs/MILESTONE.md: plano de entrega e estado de cada milestone.
O SQLite é aberto pelo composition root com uma única conexão gerenciada pelo
Drizzle. Drizzle e bun:sqlite ficam restritos a src/database. O schema fica
em src/database/schema/index.ts e os modelos em src/database/models/. As
migrations recebem prefixos de timestamp:
bun run db:generate -- --name=nome-da-migration
bun run db:migratedb:migrate usa o migrator
oficial do Drizzle para Bun/SQLite; não é necessário criar DATABASE_URL.
bun run sim:casino # RTP de cada jogo e piso de 3% de vantagem da casa
bun run sim:economy # jogadores de vários perfis ao longo de uma temporada