- Add docker-compose.yml with volume mounts for config/sfx - Simplify npm scripts (up/down/build/restart/logs) - Update README.md and CLAUDE.md with new commands - Remove unused lib/ directory (migrated to src/) - Update package.json scripts to cleaner naming Benefits: - Update configs and sound effects without rebuilding image - Simplified Docker workflow management - Cleaner project structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
3.5 KiB
3.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a Discord bot built with discord.js v14 that provides sound effects (both prefix and slash commands), text commands, fun facts, and scheduled events functionality for Discord servers.
Development Commands
Running the Bot
# Install dependencies
pnpm install
# Direct Node.js execution (requires Node 22 LTS)
pnpm start # Production mode
pnpm dev # Development mode with auto-reload
# Docker Compose (recommended)
pnpm up # Start bot with Docker Compose
pnpm down # Stop bot
pnpm restart # Restart bot (useful after config changes)
pnpm logs # View logs
pnpm build # Rebuild image
# Direct Docker (alternative)
pnpm image:build # Build Docker image
pnpm image:run # Run Docker container with auto-restart
Docker Management
# Docker Compose approach (recommended)
pnpm up && pnpm logs # Start and follow logs
pnpm restart # Restart after config changes
pnpm build && pnpm up # Rebuild after code changes
# Direct Docker approach
docker stop discord-bot && docker rm discord-bot
docker logs discord-bot -f
pnpm image:build && pnpm image:run
Architecture & Key Components
Core Structure
- src/index.js: Main bot entry point with Discord.js v14 client
- src/config/: Configuration management
config.js: Config loader and validatorintents.js: Discord gateway intents
- src/commands/:
prefix/: Traditional prefix commands (!sfx, !funfact, etc.)slash/: Slash commands (/sfx with autocomplete)
- src/services/:
voiceService.js: Voice connections using @discordjs/voicecommandLoader.js: Static/Ankhbot command loadersfxManager.js: Sound effect file managementschedulerService.js: Scheduled events handler
- src/utils/: Helper functions
- config.json: Bot configuration (copy from config.json.example)
Command System
Commands are handled in priority order:
- Native commands (defined in index.js commands object)
- Static text commands (from conf/text_commands)
- Ankhbot imported commands (from conf/ghbot.abcomg)
Sound Effects System
- Sound files stored in
sfx/directory as .mp3 or .wav - Automatically discovered on startup and directory changes
- Requires voice channel connection and ffmpeg (included in Docker image)
- Volume and audio passes configurable per guild
Configuration Files
- conf/text_commands: Pipe-delimited text commands with alias support
- conf/funfacts & conf/hamfacts: Line-separated fact collections
- conf/snesgames.json: SNES game database (purpose unclear from current usage)
Scheduled Events
Configured per guild in config.json with cron-style scheduling using node-schedule. Events can:
- Send messages to specific channels
- Ping specific roles
- Run on cron schedules
Docker Setup
Uses Node 22-alpine base image with ffmpeg for audio processing. The Dockerfile installs all dependencies and runs the bot with node src/index.js.
Important Implementation Details
- Discord.js v14 with modern API patterns
- @discordjs/voice for audio playback
- Hybrid command system: prefix commands + slash command for SFX
- /sfx slash command with autocomplete for easy sound discovery
- Hot-reloads configuration files and commands without restart
- Supports multiple guilds with individual configurations
- Admin commands restricted by Discord user ID
- Blacklist system for blocking specific users
- Proper voice connection pooling and cleanup