2026-02-05 14:07:58 +01:00
2026-01-29 12:26:13 +01:00
2026-02-23 23:12:06 +01:00
2026-02-05 14:07:58 +01:00
2026-02-23 17:32:19 +01:00
2026-02-23 22:58:54 +01:00
2026-02-23 23:12:06 +01:00
2026-02-23 17:32:19 +01:00
2026-02-23 22:58:54 +01:00
2026-02-05 14:07:58 +01:00
2026-02-05 14:07:58 +01:00
2026-02-05 14:07:58 +01:00
2026-02-23 22:58:54 +01:00
2026-02-23 17:32:19 +01:00
2026-01-29 12:26:13 +01:00

Joel Discord Bot

A Discord bot with AI-powered responses and message tracking.

Quick Start

# 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 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)
DATABASE_PATH SQLite file path (default: ./data/db.sqlite3)
WEB_PORT Port for web dashboard (default: 3000)
WEB_BASE_URL Base URL for web dashboard
SESSION_SECRET Secret for session encryption

Data Persistence

  • Bot options and other runtime state are stored in SQLite.
  • Keep DATABASE_PATH on persistent storage so updates/redeploys do not reset settings.
  • Backward compatibility: if DATABASE_PATH is unset and src/database/db.sqlite3 exists, it is used automatically.
  • Recommended one-time migration:
mkdir -p data && cp src/database/db.sqlite3 data/db.sqlite3
  • Docker example:
docker run -d \
	--name joel-discord \
	-v joel_data:/data \
	--env-file .env \
	your-image:latest

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
Description
No description provided
Readme Unlicense 1.5 MiB
Languages
TypeScript 82.1%
CSS 11%
JavaScript 6%
Nix 0.4%
Dockerfile 0.3%
Other 0.2%