Before you install Lazybot, confirm that every dependency listed here is in place. Lazybot is a Spring Boot 4 application that runs on Java 21 with preview features enabled, talks to a MySQL-compatible database, calls the osu! v2 API, and optionally connects to Discord via JDA and to QQ via a Shiro-compatible OneBot endpoint. Two native JNI libraries — rosu-jni and resvg-jni — are distributed outside of Maven Central and must be installed into your local Maven repository before the project will compile.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Apeuriox/lazybot-renewal/llms.txt
Use this file to discover all available pages before exploring further.
Runtime Platform
Java 21
Lazybot targets Java 21 and is compiled with--enable-preview. The same flag, along with --enable-native-access=ALL-UNNAMED, is required at runtime to load the JNI libraries and use preview language features.
pom.xml for the Spring Boot Maven plugin and the Surefire test runner, so they are applied automatically when you use ./mvnw during development. You must pass them manually when launching the JAR directly or writing a systemd unit file.
Required Services
MySQL (or compatible)
Lazybot stores user bindings, badge data, card points, and other persistent state in a relational database. The default schema name used in the configuration template islazybot_schema. MariaDB is a compatible drop-in replacement.
| Setting | Default |
|---|---|
| Driver | com.mysql.cj.jdbc.Driver |
| Schema | lazybot_schema |
| Connection pool max lifetime | 120000 ms (2 minutes) |
script.sql before starting Lazybot for the first time (see Setup).
API Credentials
osu! API (Required)
Register an OAuth application at https://osu.ppy.sh/home/account/edit to obtain a client ID and client secret. The application’s callback URL must match thelazybot.oauth.redirect-uri value in your application.yaml.
| Config key | Description |
|---|---|
lazybot.client_id | OAuth application client ID |
lazybot.client_secret | OAuth application client secret |
lazybot.oauth.redirect-uri | Redirect URI registered with osu! |
lazybot.scopes | friends.read identify public |
The scopes required by Lazybot are
friends.read identify public. Make sure your osu! OAuth application is configured to allow all three when registering.Discord Bot (Conditional)
If you intend to run Lazybot on Discord, create a bot application at the Discord Developer Portal and obtain the bot token, application ID, and OAuth2 secret. These map to thediscord.bot.* keys in application.yaml.
Discord integration is disabled by default (lazybot.global.discord.enabled: false). Enable it explicitly in your configuration.
QQ / OneBot (Conditional)
QQ integration uses Shiro, a Spring Boot starter for the OneBot protocol. You need a Shiro-compatible QQ bot (such as Lagrange or similar) configured to connect to Lazybot’s WebSocket endpoint at the path defined byshiro.ws.server.url (default: /lazybot).
Tencent integration is enabled by default (lazybot.global.tencent.enabled: true).
Discord and QQ/Tencent can be independently enabled or disabled via the
lazybot.global.discord.enabled and lazybot.global.tencent.enabled configuration keys. You do not need to deploy both platforms simultaneously.Native Maven Libraries
Two JNI libraries are used by Lazybot but are not published to Maven Central. They must be installed into your local Maven repository usingmvn install:install-file before running ./mvnw clean package.
The library JARs are included in the lib/ directory of the repository.
rosu-jni
Rosu-JNI by HollisMeynell provides osu! difficulty and performance-point calculation via a Rust-backed JNI binding..so/.dll library using the ROSU_LIB_PATH environment variable. Set this to the directory that contains the extracted native library file.
resvg-jni
Resvg-JNI by Zh_jk wraps the resvg SVG renderer, which Lazybot uses to convert SVG score card templates into PNG images significantly faster than the Apache Batik fallback.RESVG_DIR environment variable points to the directory where the resvg render-process library cache is written. If unset, Lazybot creates a temporary directory automatically.
Environment Variables Summary
| Variable | Purpose | Required |
|---|---|---|
LAZYBOT_DIR | Working directory for Lazybot cache files (avatars, map backgrounds, static assets) | No — falls back to a system temp directory |
RESVG_DIR | Directory for the resvg render-process library cache | No — falls back to a system temp directory |
ROSU_LIB_PATH | Path to the directory containing the Rosu native library | Recommended |
Next Steps
Build & Configure
Clone the repo, install libraries, configure
application.yaml, and build the JAR.systemd Service
Run Lazybot as a managed Linux service with automatic restart and journal logging.