Kyoko - Discord Rpg

A Discord bot built with Bun, Discord.js, and Drizzle ORM.

Architecture

This project uses a modular architecture:

  • src/index.ts: Entry point. initializes the client.
  • src/lib/KyokoClient.ts: Custom Discord Client wrapper handling command loading and events.
  • src/lib/env.ts: Centralized Environment Configuration. Validates environment variables using zod at startup.
  • src/lib/DrizzleClient.ts: Database client instance.
  • src/commands/: Command files.
  • src/db/: Database schema and migrations.

Setup

  1. Install Dependencies:

    bun install
    
  2. Environment Variables: Copy .env.example to .env (create one if it doesn't exist) and fill in the required values:

    DISCORD_BOT_TOKEN=your_token_here
    DISCORD_CLIENT_ID=your_client_id
    DISCORD_GUILD_ID=your_guild_id_optional
    DATABASE_URL=postgres://user:pass@localhost:5432/db_name
    

    Note: The app will fail to start if DISCORD_BOT_TOKEN or DATABASE_URL are missing or invalid.

  3. Run Development:

    bun run dev
    
  4. Database Migrations:

    bun run db:push # Apply schema changes
    bun run generate # Generate migrations
    

Deployment

Manual Command Registration

Since command registration is decoupled from startup, you must run this manually when you add or change commands.

Option 1: Using Docker (Recommended) Uses the credentials configured in docker-compose.yml.

docker compose run --rm app bun run deploy

Option 2: Running Locally Requires valid .env file with DISCORD_CLIENT_ID.

bun run deploy

Development Features

  • Type Safety: Full TypeScript support.
  • Env Validation: zod ensures all required env vars are present.
  • Hot Reloading: bun --watch for fast development.
Description
No description provided
Readme 2.7 MiB
Languages
TypeScript 98.4%
CSS 1%
Shell 0.5%