build(docker): add Dockerfile, Docker Compose config, and update README

This commit is contained in:
2025-04-23 21:55:40 +08:00
parent 47de3823f3
commit 6daf1993d1
3 changed files with 93 additions and 34 deletions

View File

@@ -1,57 +1,69 @@
# discord-music-bot
Discord music bot template written in Rust using `serenity` and `lavalink-rs`.
Discord music bot template written in NodeJS using `discord.js` and `erela.js`, with Lavalink support.
## Features
- Slash commands: `/ping`, `/join`, `/play`, `/leave`
- LavaLink integration for audio playback
- Modular command handler structure
- Slash commands: `/ping`, `/join`, `/play`, `/leave`
- Lavalink integration for audio playback
- Modular command handler structure
## Prerequisites
- Rust (stable toolchain)
- A Discord application with bot token
- LavaLink server running (see [LavaLink](https://github.com/freyacodes/Lavalink))
- Node.js (>=14)
- pnpm or npm
- A Discord application with bot token
- LavaLink server for audio streaming
## Setup
1. Copy `.env.example` to `.env` and fill in your credentials:
```
```env
DISCORD_TOKEN=your_discord_bot_token
CLIENT_ID=your_discord_application_id
LAVALINK_HOST=127.0.0.1
LAVALINK_PORT=2333
LAVALINK_PASSWORD=your_lavalink_password
```
2. Build the project:
2. Install dependencies:
```sh
cargo build --release
pnpm install
```
3. Run tests:
```sh
npm test
```
4. Register slash commands:
```sh
npm start # or node deploy-commands.js
```
5. Start the bot:
```sh
npm start
```
3. Run the bot:
```sh
cargo run --release
```
## Docker
A `Dockerfile` and `docker-compose.yml` are provided for containerized deployment.
- Build and run with Docker Compose:
```sh
docker-compose up --build
```
- Environment variables are loaded from `.env`.
- Lavalink service is configured in `docker-compose.yml` alongside the bot.
## Project Structure
- `src/main.rs` - Bot entry point, initializes Serenity and LavaLink clients
- `src/handler.rs` - Serenity event handlers (ready, interaction, voice updates)
- `src/lavalink_handler.rs` - LavaLink event handlers
- `src/state.rs` - TypeMap keys for shared state
- `src/utils.rs` - Utility functions (env management)
- `src/commands/` - Modular slash command definitions and handlers
## Commands
- `/ping` - Replies with "Pong!"
- `/join` - Bot joins your voice channel
- `/play url:<URL>` - Plays audio from the given URL
- `/leave` - Bot leaves the voice channel
## TODO
- Implement actual command logic in `src/commands/*.rs`
- Add error handling and command concurrency management
- Expand LavaLink event handlers
- `src/index.js` — Entry point
- `src/commands/` Slash command modules
- `src/events/` — Discord event handlers
- `src/structures/` — Erela.js (Lavalink) event wiring
- `src/utils/logger.js` — Logging setup
- `deploy-commands.js` — Slash command registration script
- `Dockerfile` — Bot container image
- `docker-compose.yml` — Multi-service setup (bot + Lavalink)
## License
MIT
MIT