FeaturesXP and leveling
Members earn XP as they chat and spend time in voice channels, and level up as it adds up. EllieBot shows their level, rank and XP and the server leaderboard, and can give or take roles when they reach the levels you choose.
Members earn XP for the messages they send, the images they post and every minute they spend in a voice channel. Text XP comes at most once per cooldown, so spamming the chat does not level anyone up faster. Voice XP only counts while at least two people in the channel aren't muted or deafened.
By default EllieBot gives 3 XP per message, at most once every 5 minutes, and 3 XP per minute in voice. Change the rates for your whole server or for one channel with .xprate, for example more XP in your main chat and less in a bot-spam channel.
Stop a role or a member from earning XP at all with .xpexclude, for example your bots or a muted role.

.xprate.xpratereset.xpexclude.xpexclusionMembers check their level, rank and XP with .xpt, which shows them as text: their level, their rank on the server, how close they are to the next level, their total XP and their club. .xp shows the same on an XP card image.
.xplb shows the members with the most XP on your server.
How much XP each level takes is set per server with .xpformula, as a * (level + 1) + c. With the default values (9 and 27), the first level takes 36 XP and every level after it takes 9 XP more. A bigger a makes high levels harder to reach.

.experiencetext.experience.xpleaderboard.xpformulaUse .xprolereward to give members a role when they reach a level, or to take one away. One level can add and remove several roles, so a member can move from Newbie to Member in one step.
.xprews lists every reward you have set, and .xprewsreset removes them all.
Ellie Cash as a level reward (.xpcurreward) is a Bot Owner Only command: only the person who runs the bot can set it.
Level-ups aren't announced until you turn that on. .servernotify levelup followed by your message sends it every time a member levels up, in the channel where it happened or in one you name.

.xprolereward.xprews.xprewsreset.xpcurreward.servernotifyMembers can create a club with .clubcreate and give it an icon, a banner and a description. Other members apply with .clubapply, and the club's owner or admins accept or reject them.
Clubs earn XP from their members' chatting, and .clublb ranks the clubs. A club is the same on every server EllieBot is in.

.clubcreate.clubapply.clubaccept.clubinfo.clublbAdmins can add XP to a member or to everyone with a role (.xpadd, and a negative number takes XP away), set a member's level (.xplevelset), or reset the XP of one member or the whole server (.xpreset, which cannot be undone).

.xpadd.xplevelset.xpreset.xprolereward and .xpexclude need the Administrator permission.
.xprolereward 5 add Member.xpexclude @BotsYes. Each level can add and remove roles: .xprolereward 5 add Member gives the Member role at level 5, and .xprolereward 5 rm Newbie takes Newbie away at the same level. .xprews shows every reward you have set.
Yes, for every minute they spend there, as long as at least two people in the channel aren't muted or deafened. .xprate can change how much, or turn it off, for example .xprate voice 5 1.
Yes. .xpt shows their level, rank, progress to the next level, total XP and club as text, which also works with screen readers. Add a mention to see another member's.
The channel may have an XP rate of 0, or the members may be excluded. .xprate on its own shows the rates for the server and each channel, and .xpexclusion lists the roles and members that earn no XP. A message only gives XP once every few minutes, too.
Use .servernotify levelup followed by your message. %event.level% is the level they reached and %user.mention% mentions them. Put a channel before the message to post every level-up there instead.
If the bot's owner has turned on the XP shop, members can buy backgrounds and frames with .xpshop and .xpshopbuy, then put them on with .xpshopuse.
A member is in one club at a time, and that club is the same on every server. To join another, leave the first with .clubleave.