# Joel Discord Bot A Discord bot with AI-powered responses and message tracking. ## Quick Start ```bash # Install dependencies bun install # Set environment variables cp .env.example .env # Edit .env with your tokens # Run in development mode bun run dev # Run in production bun run start ``` ## Project Structure See [src/README.md](src/README.md) for detailed architecture documentation. ``` src/ ├── core/ # Bot client, config, logging ├── commands/ # Slash commands ├── events/ # Discord event handlers ├── features/ # Feature modules (Joel AI, message logging) ├── services/ # External services (AI providers) ├── database/ # Database schema and repositories └── utils/ # Shared utilities ``` ## Environment Variables | Variable | Description | | ----------------------- | --------------------------------------- | | `DISCORD_TOKEN` | Discord bot token | | `DISCORD_CLIENT_ID` | Discord application client ID | | `DISCORD_CLIENT_SECRET` | Discord application client secret | | `OPENROUTER_API_KEY` | OpenRouter API key for AI | | `AI_CLASSIFICATION_FALLBACK_MODELS` | Comma-separated fallback model IDs for classification requests | | `KLIPY_API_KEY` | Klipy API key for GIF search (optional) | | `ELEVENLABS_API_KEY` | ElevenLabs API key for voiceover | | `ELEVENLABS_VOICE_ID` | Default ElevenLabs voice ID (optional) | | `ELEVENLABS_MODEL` | ElevenLabs model ID (default: `eleven_multilingual_v2`) | | `WEB_PORT` | Port for web dashboard (default: 3000) | | `WEB_BASE_URL` | Base URL for web dashboard | | `SESSION_SECRET` | Secret for session encryption | ## Scripts | Script | Description | | --------------------- | --------------------------- | | `bun run dev` | Development with hot reload | | `bun run start` | Production start | | `bun run build` | Build for production | | `bun run db:generate` | Generate DB migrations | | `bun run db:migrate` | Run DB migrations | | `bun run db:studio` | Open Drizzle Studio | | `bun run typecheck` | Type check without emit |