90 lines
2.7 KiB
Markdown
90 lines
2.7 KiB
Markdown
# Net Neutrality Discord Bot
|
|
|
|
A custom Discord bot written in Java. It uses [JDA](https://github.com/discord-jda/JDA) for Discord, a [Lavalink](https://github.com/lavalink-devs/Lavalink) node for music playback, MariaDB/MySQL for persistence, and exposes an HTTP API built with Javalin.
|
|
|
|
This is a personal project. No support is offered for building or running it.
|
|
|
|
## Table of Contents
|
|
|
|
- [Requirements](#requirements)
|
|
- [Configuration](#configuration)
|
|
- [Running with Docker Compose](#running-with-docker-compose)
|
|
- [Running Locally](#running-locally)
|
|
- [Testing](#testing)
|
|
- [License](#license)
|
|
|
|
## Requirements
|
|
|
|
- Docker and Docker Compose (recommended), or
|
|
- JDK 25 and Maven (the included `mvnw` wrapper works) for local runs
|
|
- A MariaDB/MySQL database
|
|
- A Lavalink node, version 4.2.0 or newer
|
|
- A Discord bot token
|
|
|
|
## Configuration
|
|
|
|
All settings are provided as environment variables. A template with every supported variable is available in [`bot.properties.example`](bot.properties.example).
|
|
|
|
Key variables:
|
|
|
|
| Variable | Description |
|
|
| --- | --- |
|
|
| `NETNEUTRALITY_BOT_TOKEN` | Discord bot token |
|
|
| `NETNEUTRALITY_BOT_PREFIX` | Command prefix |
|
|
| `NETNEUTRALITY_BOT_OWNER` | Discord user ID of the bot owner |
|
|
| `NETNEUTRALITY_API_PORT` | Port for the HTTP API (default `9000`) |
|
|
| `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_DATABASE` | Database connection settings |
|
|
| `NETNEUTRALITY_LAVALINK_URI`, `NETNEUTRALITY_LAVALINK_PASSWORD` | Lavalink connection settings |
|
|
| `NETNEUTRALITY_SENTRY_DSN` | Optional Sentry DSN for error reporting |
|
|
| `GITEA_HOST`, `GITEA_TOKEN`, `GITEA_OWNER`, `GITEA_REPO` | Optional Gitea settings for issue reporting |
|
|
|
|
## Running with Docker Compose
|
|
|
|
Docker Compose is the preferred way to run the bot. It starts the bot, the database, Lavalink, and the supporting YouTube cipher and PO token services.
|
|
|
|
1. Copy `bot.properties.example` and fill in the values (see [Configuration](#configuration)).
|
|
2. Build and start the stack:
|
|
|
|
```bash
|
|
docker compose build
|
|
docker compose up -d
|
|
```
|
|
|
|
3. View logs:
|
|
|
|
```bash
|
|
docker compose logs -f netneutrality-bot
|
|
```
|
|
|
|
Logs are also written to the `logs` directory.
|
|
|
|
## Running Locally
|
|
|
|
1. Copy `bot.properties.example` to `bot.properties` and fill in the values.
|
|
2. Make sure a database and a Lavalink node are reachable at the configured addresses.
|
|
3. Build the project:
|
|
|
|
```bash
|
|
./mvnw package
|
|
```
|
|
|
|
4. Run the bot:
|
|
|
|
```bash
|
|
java -jar target/netneutrality.jar
|
|
```
|
|
|
|
Dependencies are copied to `target/lib` during packaging and referenced by the jar manifest.
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
./mvnw test
|
|
```
|
|
|
|
Database tests use Testcontainers, so Docker must be running. Checkstyle runs during the `test` phase.
|
|
|
|
## License
|
|
|
|
See the [LICENSE](LICENSE) file.
|