Lazybot is configured entirely through a single file: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.
src/main/resources/application.yaml. This file is not committed to the repository — instead, a template (application.yaml.template) is provided that you copy and fill in before building or running the bot. Every credential, feature flag, thread pool size, and cache TTL is controlled from this file.
spring
Core Spring Boot settings including the datasource connection, Jackson serialization, and virtual thread configuration.
spring.datasource
JDBC driver class. Lazybot targets MySQL; keep this value unchanged unless you are using a different MySQL-compatible driver.
Full JDBC connection URL. Example:Adjust the host, port, and schema name to match your database server. Remove the leading
$ present in the template — it is a placeholder marker, not a valid character.MySQL user with read/write access to the
lazybot_schema database.Password for the MySQL user above.
Maximum lifetime (ms) of a HikariCP connection in the pool before it is retired and replaced. Default is 120 000 ms (2 minutes).
spring.jackson
Global date serialization format used by Jackson for all
Date fields.Timezone applied when formatting dates. Change to your server’s local timezone if needed.
spring.web
Disables Spring MVC’s default static resource handler. Lazybot is a bot backend, not a web application — keeping this
false prevents Spring from attempting to serve files from the classpath and avoids unexpected 404-handling conflicts.spring.threads
Enables Java 21 virtual threads for all Spring-managed thread pools. Strongly recommended — Lazybot is designed to run with virtual threads enabled and will fall back to platform threads if this is set to
false, reducing concurrency capacity.server
HTTP port Lazybot’s embedded Tomcat listens on. Used for the osu! OAuth callback endpoint and any HTTP-based integrations. Ensure this port is reachable from the internet if you are using OAuth redirects.
shiro
Settings for the Shiro framework, which provides QQ bot support over the OneBot v11 WebSocket protocol.
shiro.ws.server
When
true, Lazybot starts a WebSocket server that your OneBot-compatible QQ client (e.g. NapCatQQ, LiteLoaderQQNT) should connect to.WebSocket endpoint path. Your OneBot client should be configured to connect to
ws://<host>:<port>/lazybot.WebSocket idle timeout in seconds.
Maximum binary message buffer size in bytes (~5 MB). Increase if you experience truncated image messages.
Maximum text message buffer size in bytes (~500 KB).
shiro.limiter
Shiro’s built-in per-message rate limiter (token bucket).
Enables or disables Shiro’s internal rate limiter.
Number of tokens refilled per second.
Maximum token bucket capacity (burst limit).
When
true, tasks that exceed the rate limit will wait for a token instead of being dropped immediately.Maximum wait time (seconds) for a token when
awaitTask is true. Tasks waiting longer than this are dropped.discord
Discord bot credentials. All four values are required when lazybot.global.discord.enabled is true.
Discord bot public key, found on the application’s General Information page in the Developer Portal. Used for interaction endpoint verification.
Discord application/client ID. Found on the General Information page.
Discord OAuth2 client secret. Found on the OAuth2 page of the Developer Portal.
Discord bot token. Found on the Bot page of the Developer Portal. This is the credential JDA uses to connect to the Discord gateway. Treat it like a password.
lazybot
Core Lazybot settings: command behaviour, osu! API credentials, OAuth, caching, PP+, and feature flags.
Command & Prefix
The character(s) that prefix all bot commands. For example, with the default
/, users type /bp 1. You can change this to any string (e.g. ! or lb).osu! API
osu! OAuth application client ID. Register at osu.ppy.sh → Settings → OAuth.
osu! OAuth application client secret.
OAuth 2.0 response type. Do not change.
osu! API scopes requested during the user authorization flow.
OAuth 2.0 grant type. Do not change.
OAuth Callback
Publicly accessible URL that osu! redirects to after a user authorizes your application. Must be registered as a callback URL in your osu! OAuth application settings. Example:The path
/oauth/osu/callback is handled by Lazybot’s embedded HTTP server on server.port.Scopes included in the OAuth authorization URL sent to users during the
/link flow.Avatar Cache
Number of hours before a cached player avatar is considered stale and re-fetched from the osu! CDN. Reducing this value increases freshness but adds more outbound HTTP traffic.
PP+ Integration
Client ID for the PP+ service. Required if you want
/plus and /Pb commands to function. Contact the PP+ service operator for credentials.Password for the PP+ service client.
Platform Toggles
Set to
true to activate the Discord (JDA) bot. When false, the Discord gateway connection is not established and all Discord credentials are ignored.Set to
true to activate the QQ (Shiro/OneBot) bot. When false, the WebSocket server still starts (controlled by shiro.ws.server.enable) but no commands are processed.Command Limits
Maximum number of PP recalculations Lazybot will perform in a single
/bpif (what-if) request. Raising this limit increases response time and CPU load. Keep at 200 or lower for interactive use.Local Test Mode
Enables a local test mode that exposes HTTP endpoints for every command, useful for development without a connected chat platform.
Directory where test-mode rendered images are written. Example:
X:\lazybot-output (Windows) or /tmp/lazybot-output (Linux).Fake user identity string used in test mode to simulate a linked osu! account.
async
Configuration for Lazybot’s internal async thread pool, used for concurrent osu! API requests and image rendering tasks.
Number of threads kept alive in the pool even when idle.
Maximum number of threads allowed in the pool. Because
spring.threads.virtual.enabled is true by default, each “thread” in this pool is a virtual thread, so this limit is less critical than with platform threads.Size of the task queue. Tasks submitted when all threads are busy are queued here. If the queue is full, new submissions are rejected.
Name prefix for threads in this pool, useful for identifying Lazybot threads in thread dumps and profiler output.
rate-limit
Application-level token-bucket rate limiter (backed by Bucket4j) applied globally across all incoming commands.
Maximum token bucket capacity (burst limit). A user or group can send at most this many commands in rapid succession before being throttled.
Tokens added to the bucket per refill interval. Combined with the capacity, this controls the sustained request rate.
Globally enables or disables the application-level rate limiter. Set to
false only in development or testing environments.Full Annotated Example
The following is a complete, annotatedapplication.yaml based on the official template. Replace every your_* / $* placeholder with real values before running.
The
tencent.bot block present in the template (with id, secret, and token fields) is for an abandoned official Tencent bot API integration and is not actively used. QQ support is provided entirely through the Shiro / OneBot WebSocket path. You can safely leave that block with its placeholder values.