🪄 Pixie Docs
Overview Commands Blog Status Invite
Engagement & Rewards

VC XP

Members earn XP for time spent in voice channels (1 XP = 1 minute), with optional role rewards at XP thresholds.

How it actually works

Every 60 seconds, Pixie checks every voice channel and gives 1 XP to each non-bot member currently sitting in one - so 1 XP really does mean roughly 1 minute of VC time. It doesn't matter whether they're muted, deafened, streaming, or the only person in the channel - all of that still counts, with two exceptions: time in the server's AFK channel never counts, and staff can manually exclude specific channels (see the table below). Unlike Chat Leveling, this is a flat running total, not a level curve - rewards just check "has this member's total crossed X yet."

The commands you'll actually use

Same shape as chat leveling - these five cover almost every server:

Manage Guild for the first one
$vcxp toggle
$vcxp [@member]
$vclb [week|month]
$vcxp addreward <xp> <@role>
$vcxp rewardremove <@role>

Also $vcxp enable/disable as direct shortcuts to toggle, $vcxplb as an alias for $vclb, and /vcxp for all of these. $vcxp status (also overview) shows current settings and every reward at a glance.

Setting up your first reward

Say you want a @VC Regular role for anyone who reaches 600 XP (10 hours in voice):

  1. Turn VC XP on, if you haven't already: $vcxp toggle.
  2. Create the role in Discord's own role settings (or reuse an existing one).
  3. Link it to an XP amount: $vcxp addreward 600 @VC Regular.

Pixie hands out the role automatically the next time that member's XP is checked (every 60s while they're in a counted voice channel) - no need to run anything else. $vcxp editreward @VC Regular 1200 changes the requirement later without deleting and re-adding the rule, and $vcxp rewardremove @VC Regular removes the rule entirely (existing holders keep the role - this only stops it being granted to anyone new).

Everything else

Every command below needs Manage Guild.

CommandDoes
$vcxp editreward <@role> [new xp]Change a reward's XP requirement (asks in chat if you omit the amount)
$vcxp setmsg [message]Customize the reward-role announcement (<user>/<role>/<xp>, or a full script) - omit to just view the current one, reset to go back to the default
$vcxp previewreward [@role] / testreward [@role]Preview (nothing sent) or actually send the reward message to this channel, as if you'd just earned it. (/vcxp testreward [role] [send] combines both - send:false, the default, previews privately; send:true sends for real)
$vcxp boosterxpboostToggle a 10% chance per minute of earning double XP for server boosters (roughly +10% on average, not a flat bonus every minute)
$vcxp toplbpanelUI for giving a role to whoever currently leads the week/month/alltime leaderboard, live - role picker plus a separate Shoutout Settings screen (channel + message) if you want an announcement when the lead changes. Off by default - most servers won't want one here since a live lead can flip often. (addtoplbreward/removetoplbreward both still work as aliases straight into this panel)
$vcxp lasttoplbpanelUI for giving a role to last week's/month's #1 VC XP holder once that period fully ends, held for the whole next period - decided once, unlike the live version above. Role, a re-earn cooldown (e.g. 30d/1mo), and its own separate Shoutout Settings screen. (leaderpanel/setlastperiodleader/removelastperiodleader all still work as aliases straight into this panel)
$vcxp excludechannel <#vc> / removeexcludechannel / listexcludedchannelsStop specific voice channels from earning XP
$vcxp addxp/removexp/setxp <@member> <amount>Directly adjust one member's XP
$vcxp autolb <#channel> [period] / autolbremoveA leaderboard message that refreshes itself every 10 minutes
$vcxp lbhistory [week|month]Browse a past week/month's leaderboard (last 12 kept)

The reward-role message can be a full script instead of the plain <user>/<role>/<xp> template - see the Scripting page's extra variables section for {reward.role}/ {reward.xp}/{reward.role_name}.