Discord bot built with Carbon on Cloudflare Workers.
@buape/carbon- Cloudflare Workers (
@buape/carbon/adapters/fetch) - Gateway plugin:
CloudflareGatewayPlugin+CloudflareGatewayDurableObject - Cloudflare D1 + Drizzle ORM
- Install deps:
bun install- Create
.envfrom.env.example.
Required:
BASE_URL=
DEPLOY_SECRET=
DISCORD_CLIENT_ID=
DISCORD_PUBLIC_KEY=
DISCORD_BOT_TOKEN=Optional:
DISCORD_DEV_GUILDS=
ANSWER_OVERFLOW_API_KEY=
HELPER_THREAD_WELCOME_PARENT_ID=
HELPER_THREAD_WELCOME_TEMPLATE=
THREAD_LENGTH_CHECK_INTERVAL_HOURS=- Configure
wrangler.jsoncD1 binding:
- set
d1_databases[0].database_idto your real D1 database id - keep
binding = "DB"
- Apply D1 migrations:
bun run db:apply:local
# or
bun run db:apply:remote- Run locally:
bun run devbun run dev→wrangler dev --env-file .envbun run deploy→ deploy workerbun run cf-typegen→ regenerateworker-configuration.d.tsbun run typecheck→ TypeScript checkbun run db:generate→ generate Drizzle SQLbun run db:apply:local/db:apply:remote→ apply D1 migrations
- Answer Overflow base URL is hardcoded to
https://www.answeroverflow.com. - Helper thread monitor runs via Worker cron (
wrangler.jsonctriggers.crons).