Skip to content

XP & levels ​

Reward members for chatting. SnowstormBot awards XP for messages, tracks levels, can announce level-ups, hand out role rewards, and shows a leaderboard.

The XP & levels feature is off by default. Turn it on from the Features page, then expand its row to configure the settings below.

How XP is earned ​

  • Members earn a random amount of XP per message, at most once per cooldown window (so fast chatting does not farm XP).
  • Messages in excluded channels, or from members holding an excluded role, never earn.
  • Bots never earn, and members who run /xp optout stop earning (their existing XP is kept).

Earning settings ​

SettingDefaultRangeNotes
Cooldown (seconds)601 to 3600Minimum time between earning messages per member.
Min XP per message151 to 1000Low end of the random award.
Max XP per message251 to 1000High end of the random award.
Excluded channelsnoneany text channelsMessages here never earn.
Excluded rolesnoneany rolesMembers with any of these never earn.

The level curve ​

XP needed to go from level n to level n + 1 is 5 × n² + 50 × n + 100. Levels come quickly at first and slow down as members climb. A few total-XP milestones:

LevelTotal XP to reach it
1100
51,150
104,675

Members never lose a level they have earned, even with decay on.

Level-up announcements ​

Choose what happens when a member levels up:

  • Don't announce (default): nothing is posted.
  • Post in the channel they were chatting in: a reply where the level-up happened.
  • Post in a dedicated channel: pick one channel for all level-up notices.

When announcements are on, you can customise the message. Two tokens are supported:

  • {user.mention} mentions the member.
  • {xp.level} is their new level.

The default message is: GG {user.mention}, you reached level {xp.level}! Leave the field blank to use it. Messages can be up to 500 characters. The editor's placeholder menu lists everything available; see the placeholders reference.

Level reward roles ​

Grant one or more roles when a member reaches a level (for example a "Regular" role at level 10).

  1. Under Level rewards, click Add level reward.
  2. Set the Level and pick the Roles to grant for that tier.
  3. Repeat for as many tiers as you like (up to 50 tiers, each granting up to 5 roles).
  4. Save. Rewards apply as members level up and retroactively to members who are already at or above a tier.

Stacking ​

When you have more than one tier, choose how rewards behave as a member climbs:

  • Keep all earned reward roles (stack) (default): badges accumulate; a member keeps every reward role at or below their level.
  • Keep only the highest tier (replace lower): only the single highest reward role they qualify for is kept; lower reward roles are removed.

Two things to watch

  • The bot can only assign roles below its own highest role. If a reward role sits at or above the bot's role, Discord refuses to assign it and the dashboard warns you. Move SnowstormBot's role above the reward roles in Server Settings → Roles.
  • Reward roles are applied silently: granting or removing them does not trigger your role-add / role-remove automations. Any other role a member gains or loses is unaffected. This prevents a single rollout from flooding your channels or mass-pinging members.

XP decay ​

Optionally erode the XP of members who stop chatting, so consistently active members rise on the leaderboard.

  1. Switch on Enable XP decay.
  2. Set Idle days before decay (default 14, minimum 1): how long a member must be inactive before any XP is lost.
  3. Set Decay per idle day (%) (default 2%, range 0.1 to 100): how much of the member's progress toward the next level is removed for each idle day past the grace window.

Decay only removes progress within the current level. A member never drops below a level they have already reached, and members who opted out are left untouched.

Member commands ​

These work for everyone once the feature is on. All replies are private (ephemeral), so they never spam a channel.

CommandWhat it does
/rank [user]Shows a member's XP, level, progress to the next level, and leaderboard position. Defaults to you.
/leaderboard [count]Shows the top earners. count is 1 to 25 (default 10).
/xp optoutStop earning XP here. Your existing XP is kept.
/xp optinResume earning XP.

The dashboard leaderboard ​

Open Leaderboard in the sidebar (it appears only when the feature is on). It lists members ranked by XP, with their level, total XP, and message count. Members who opted out are marked.

As the owner, each row has two actions:

  • Block / allow earning: force a member to opt out (or let them earn again).
  • Reset XP: set a member's XP back to zero.

Activity score (for the weekly reward) ​

Alongside raw XP, the bot tracks a recent activity score for each member. Each earning message adds about 1 point, and the score fades with a roughly 3.5-day half-life, so it reflects how active someone has been lately. This score powers the weekly activity reward scheduled job, which hands a role to your most active members.

Tagging roles, members and channels ​

In the level-up Message box you can type @ to tag a role or member, or # to link a channel, the same way as on Send a message. Each role and member tag gets a Ping switch underneath. Ping means Discord sends those people a notification, and Tag only shows the tag without notifying anyone. @everyone and @here start on Tag only, so nobody pings the whole server by accident.

If a member leaves, or a role or channel is deleted, the tag keeps showing its old name when you edit the message, but you can no longer pick it again. In Discord it then shows as a broken tag.