Docs/Plugins/Auto Level
Auto Level
XP, levels, role rewards, rank cards, and a public web leaderboard.
Auto Level awards XP for activity, turns it into levels along a configurable curve, and hands out role rewards. Members get image rank cards; the server can publish a public web leaderboard.
plugins:
autolevel:
enabled: true
seconds_per_point: 60
levels:
1000: 669626417461289002 # 1,000 POINTS, not level 10
5000: 674638268135047186
public_leaderboard: true
Setup checklist
- Open Levels and enable Auto Level. Begin with one
maintrack and the default curve. - Choose message and voice sources. Exclude staff, bot channels, and other places where activity should not earn XP.
- Leave display delay and cooldown jitter at their defaults for normal use. Set them to zero only for a short private test if instant numbers are needed.
- Add one low test reward below the bot's highest role. Decide whether earlier
earned rewards stay with
keep_previous. - Choose an announcement destination or leave announcements off for the first test.
- Send qualifying messages as a regular member, respecting the message cooldown. Inspect the dashboard XP overview for live values.
- Cross the reward threshold and confirm the role plus announcement. Use an XP admin command to move back below it and confirm explicit adjustments reconcile rewards as intended.
- Enable the public leaderboard or rank-card customization only after checking the corresponding feature grants and privacy expectations.
How XP works
- Message and voice activity earn points (
weighttunes the mix,seconds_per_pointis the per-member cooldown between message awards). - Include/exclude lists scope earning by role, channel, and category
(
include_roles,exclude_channels,include_voice, and friends). multiplierandmultiplier_rolesboost earning globally or per role.- Multiple tracks (
tracks,category) let separate areas of your server level independently, each with its owndefault_curveor fullycustomcurve.
Keeping XP hard to game
Two built-in defenses stop members from reverse-engineering your XP rates and farming to them:
- Randomized awards and cooldowns. Each message earns a random amount in
your configured range, and the cooldown between awards is randomized too
(
cooldown_jitter_secondson a track's message source, default 15 - so the default window lands anywhere between 45 and 75 seconds). Neither the award nor the window can be timed. - Delayed readouts. Rank cards,
!ranktext,!leaderboardpages, and the public web leaderboard refresh on a randomized delay (display_delay_seconds, default 180) instead of live - so sending a message and re-checking a card never reveals the exact award. Level-ups always show immediately; only progress within a level lags. Set it to 0 if you prefer live numbers. The public web page also refreshes at most every five minutes, whichever of the two delays is longer.
Because of the delay, an xp give/xp take/xp set you issue can take a
few minutes to appear on the member's card - the dashboard's XP overview
always shows live values.
Rewards and announcements
levels maps a points threshold to a role, so 1000: <role id> grants
that role at 1,000 points rather than at level 10. (If you would rather work
in levels, the newer tracks.<id>.rewards form is keyed by level and the
dashboard's Levels page converts for you.) keep_previous controls whether earlier reward
roles stay on promotion. Reward roles also come OFF when the XP that earned
them goes away - xp take, xp set, or a reset below a threshold removes
the roles that threshold granted. Rewards you add after members already have
XP are settled automatically: anyone owed a role receives it the next time
they earn XP, so setting up rewards late (or importing levels first) just
works - no recheck command needed. Announcements go to the channel where it happened, a
fixed channel (announce_chan), or DM (announce_dm), with a templated
announce_msg. When announcing in the channel where it happened, turn on
the track's announce.reply option (also a toggle on the Levels page) and
the bot replies directly to the message that earned the level-up instead of
posting a loose line - if that message is gone by then, it posts normally.
Rank cards and the leaderboard
!rank renders an image card (server accent via card_theme, a default
background via background_url). Members can personalise their own card with
the rankcard commands - rankcard background takes a direct image upload
as well as a URL (static images: png, jpg, or webp);
card_background_min_level can gate custom backgrounds behind a level. card_full_numbers: true (also on the dashboard
Levels page) shows exact XP numbers on cards instead of the 12.3k shorthand.
Backgrounds you set are stored by the bot itself rather than as a link back
to your original upload, so they keep working long after the message you
uploaded them from is gone. Backgrounds set before this changed may have
already expired on Discord's side - if yours vanished, set it once more and
it will stick.
Card customizations are per server: the background, accent color, bio,
title, and level-up message a member sets in your server show only in your
server, and the rankcard commands change the server they are run in. Bio,
title, and custom level-up message text must pass your censor filter - a rank
card is not a way around the word list. The filter is enforced when a member
sets the text and again every time a card or level-up message renders, so text
that predates a filter addition is simply hidden. Mods can inspect any member's
card customizations (background included) with rankcard view, and wipe them
with rankcard modreset. public_leaderboard: true publishes a shareable
web leaderboard for your server at /leaderboard/<server id>, with the same
all-time, weekly, and monthly views as the command and a row of server
totals up top: ranked members, total XP, the top level, and how many members
earned XP this week. If your server publishes its richest-members or fishing
boards too, the pages link to each other.
Custom backgrounds (the server default and per-member ones) require the
LEVELS_PRO feature; image cards at all require RANK_CARDS - without it,
rank commands answer in text.
A member's own background beats the server default, so background_url is
the fallback rather than an override. Rank cards show up to six badge icons.
If a member holds any HepBoat badges (supporter tiers, staff and
community badges - the same ones !info lists), their icons render on the
rank card automatically, under the avatar. Badges are platform-wide, so the
same icons show on every server's cards.
The dashboard's Levels page (mod access to read, editor to change
anything) includes a full structured editor for tracks,
curves, XP sources and rewards, with live previews of the curve maths.
Troubleshooting
- Messages never award XP: check the track source, include and exclude lists, member role, channel, category, and randomized cooldown.
- The dashboard changed but
ranklooks old: member-facing readouts may be delayed bydisplay_delay_seconds; the dashboard overview is live. - A reward role does not grant: check role hierarchy and threshold units. The
legacy
levelsmap uses points, not displayed levels. - Rank is text instead of an image: the server needs
RANK_CARDS. - Custom backgrounds are refused: they need
LEVELS_PROand may be gated bycard_background_min_level. - The public page is unavailable: turn on
public_leaderboardand use the server's leaderboard URL.
Commands
Arguments in {curly braces} are required. Arguments in [square brackets] are optional.
Level is the built-in command level: 0 everyone, 10 trusted, 50 moderator, 100 admin. Your commands.overrides can change it - see Permissions.
| Command | Level | What it does |
|---|---|---|
/rank [user] [track] |
0 (everyone) | Show your level and rank card. |
/leaderboard [window] [track] [page] |
0 (everyone) | XP leaderboard - all-time, weekly, or monthly. |
/top [window] [track] [page] |
XP leaderboard (alias of leaderboard). | |
/rewards [track] |
0 (everyone) | List the level-up role rewards for a track. |
/rankcard background [url] [image] |
0 (everyone) | Set your rank-card background image (premium). |
/rankcard color [hex] |
0 (everyone) | Set your rank-card accent color. |
/rankcard bio [text] |
0 (everyone) | Set your rank-card bio. |
/rankcard title [text] |
0 (everyone) | Set your rank-card title. |
/rankcard message [text] |
0 (everyone) | Set your custom level-up message. |
/rankcard reset |
0 (everyone) | Reset your rank-card customizations. |
/rankcard modreset {user} [scope] |
50 (moderator) | Reset a member's rank-card background or all customizations (mod). |
/rankcard view {user} |
50 (moderator) | Inspect a member's rank-card customizations, background shown as an image (mod). |
/xp give {user} {points} [track] |
100 (admin) | Grant XP to a user (admin). |
/xp take {user} {points} [track] |
100 (admin) | Remove XP from a user (admin). |
/xp set {user} {points} [track] |
100 (admin) | Set a user's XP to an exact value (admin). |
/xp reset [user] [track] |
100 (admin) | Reset XP for a user or the whole guild (admin). |
/xp sync-roles {user} [track] |
100 (admin) | Re-apply a user's earned reward roles (admin). |
/xp show [user] |
50 (moderator) | Show a user's XP across all tracks (mod). |
/xp level {level} [track] |
0 (everyone) | Show the XP required to reach a level (mod). |