How XP works
Messages. A random amount betweenmin_xp_per_message and max_xp_per_message (default 15–25) per message, with a cooldown (default 60s) to prevent spam-farming. Configurable per server.
Voice. XP per minute spent in a voice channel. Muted users optionally skip XP (default on).
No-XP zones. Block XP in specific channels or for specific roles. Useful for bots, off-topic channels, or staff-only spaces.
Levels
The XP-to-level curve uses the industry-standard quadratic formula: levelN requires 5 * N² + 50 * N + 100 XP. This means:
- Level 1: 155 XP
- Level 5: 475 XP
- Level 10: 1 100 XP
- Level 25: 4 475 XP
- Level 50: 15 100 XP
max_level (default 500). The curve is the same across all Kovra servers — we don’t let servers tune it because it breaks cross-server expectations.
Role rewards
From Rise → Rewards, map levels to roles:| Level | Role |
|---|---|
| 5 | @Active |
| 15 | @Regular |
| 30 | @Veteran |
| 50 | @Elder |
Level-up notifications
Four modes:- Current channel — post in whichever channel triggered the level-up.
- Designated channel — always post in one channel (
#level-ups). - DM — DM the user privately.
- Disabled — silent level-ups.
Leaderboard
Dashboard leaderboard shows top 25 / 100 / 500 by XP. Rank, user, level, XP, message count. Per-server. Public leaderboard page available to all members atrise.kovra.xyz/<guild-id> (Premium gates the “Powered by Kovra” header removal via the Agency add-on).
Rank cards
/rank slash command renders a card with the user’s avatar, level, rank, XP progress bar, and message count. Premium: Kovra Custom lets you pick the accent color and replace the “Powered by” footer per server. Agency add-on strips the footer entirely.
Voice hubs
Temp voice channels. Create a “hub” voice channel. When a user joins, Desk spins up a private channel for them (auto-deleted when empty). They can rename, set a user limit, and kick others from their own channel. Free: 1 hub per server. Premium: 5.Birthdays
/birthday set MM/DD to opt in. On the day, Rise posts a message in the configured channel and temporarily assigns a @Birthday role. Respects timezones.