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:
$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):
- Turn VC XP on, if you haven't already:
$vcxp toggle. - Create the role in Discord's own role settings (or reuse an existing one).
- 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.
| Command | Does |
|---|---|
$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 boosterxpboost | Toggle a 10% chance per minute of earning double XP for server boosters (roughly +10% on average, not a flat bonus every minute) |
$vcxp toplbpanel | UI 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 lasttoplbpanel | UI 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 / listexcludedchannels | Stop specific voice channels from earning XP |
$vcxp addxp/removexp/setxp <@member> <amount> | Directly adjust one member's XP |
$vcxp autolb <#channel> [period] / autolbremove | A 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}.