Arcane DemoBot is a modern Java 21 Discord bot built on JDA 5 with slash-only commands, multi-guild support, TOML config, local JSON persistence, ticketing workflows, and CI quality gates.
- Slash-only command architecture (
/ping,/links,/logguide,/setup,/notify,/ticket) - Multi-guild settings with managed resources per guild
- Idempotent setup provisioning (safe, non-destructive)
- One-open-ticket-per-user policy with transcript export
- TOML-only configuration (
config/bot.toml) - Live TOML hot-reload on file change (
config/*.toml) - Java 21, Gradle 8, Spotless, Checkstyle, JaCoCo, JUnit 5
- Supports local JAR runs and Docker deployment
- Java 21
- Internet access for Discord + dependency download
- Discord bot token and application
- Copy config template:
cp config/bot.toml.example config/bot.toml
- Set
[runtime].discord_tokeninconfig/bot.toml. - Build and run:
./gradlew clean shadowJarjava -jar build/libs/ArcaneDemoBot-2.0.0.jar
Or use helper scripts:
- macOS/Linux:
./scripts/run-dev.sh - Windows:
scripts\\run-dev.bat
- Standard run:
./gradlew runBot
- Run with token override (without editing TOML):
./gradlew runBot -PdiscordToken=YOUR_TOKEN
- Run with custom config path:
./gradlew runBot -PbotConfig=/absolute/path/to/bot.toml
- Debug profile (attach debugger on port 5005):
./gradlew runBotDebug -PdiscordToken=YOUR_TOKEN
- If
runtime.discord_tokenis missing or invalid, the bot no longer exits immediately. - It shows a clear startup status screen and stays running in watch mode.
- Once you fix
config/bot.tomland save, it auto-connects (no restart needed).
- Build local copy target:
./gradlew buildLocal- Output:
build/targets/local/ArcaneDemoBot.jar
- Build to any path:
./gradlew buildTarget -PtargetDir=/absolute/path/to/plugins- Optional custom file name:
./gradlew buildTarget -PtargetDir=/path -PtargetName=DemoBot.jar
- Named machine target (defined in
build.gradle):./gradlew buildPsychoLT(Unix)./gradlew buildPsycho(Windows)
/ping/links/logguide/setup provision/setup audit/notify/ticket create/ticket list/ticket claim [ticket_id]/ticket panel/ticket close [ticket_id]/ticket transcript <ticket_id>/ticket setup
- Config file:
config/bot.toml- Includes runtime values under
[runtime]
- Includes runtime values under
See docs/config.md for full details.
- Build image:
docker compose build
- Run:
docker compose up -d
See docs/deployment.md.
- Format check:
./gradlew spotlessCheck - Full validation:
./gradlew clean test check
CI workflow runs these checks automatically on pushes/PRs.
This project remains under GPLv3. See LICENSE.md.