=== Experience tracking

This feature contains the ability to track experience of users on the server and award roles based on the level they reach.
The experience is awarded once per minute and is calculated by asciimath:[`\text{rand}(\text{minExp}, \text{maxExp}) * \text{expScale}`].
Only one role is awarded at a time and the past unlocked roles are not given to the members.

==== Necessary bot permissions
`MANAGE_ROLES` in order to award members with roles

==== Relevant system configuration
`minExp` The lower bound of the awarded base experience. Default: 10.

`maxExp` The upper bound of the awarded base experience Default: 25.

`expScale` The multiplier applied after the experience amount was determined. Default: 1.0.

==== Commands
Changing the experience scale of the server::
* Usage: `expScale <value>`
* Description: Changes the value of `expScale` on this server to `value`.

Showing the leader board of the server::
* Usage: `leaderboard [page]`
* Description: Shows the leader board of the server in a paginated format. This does not use the interactive pagination.
If no parameter is provided, it will show the top 10 members and their message count, level, experience and rank.
Additionally the same information for the user executing is shown, regardless whether or not the user is already shown on the given leader board page.
If a `page` is provided, it will display the leader board of the ranks `page * 10` until  `(page + 1) * 10` instead. If `page` is beyond the member count, the last members are shown.


Setting a role to be awarded at a certain level::
* Usage: `setExpRole <level> <role>`
* Description: Sets `role` to be awarded at the given `level`. If the role was previously assigned,
this will cause to remove this assignment and recalculate the roles for all users previously having this role.
This command will provide a status message indicating this process.
This will not award this role to users which qualify for this, a `syncRoles` is necessary for this.
* Example: `setExpRole 50 @HighLevel` in order to award the role `HighLevel` at level `50` (the @HighLevel is a role mention)

Syncing the roles of the members with the configuration::
* Usage: `syncRoles`
* Description: Recalculates the appropriate levels for all users on the server and awards the roles appropriate for the level.
There will be a message indicating the current status of the progress and it is highly advised to not execute this command while another instance is still processing.
This command can run for a longer period of time, depending on the amount of members in the guild.

Remove a role from being awarded at a certain level::
* Usage: `unSetExpRole <role>`
* Description: Removes this role from the experience tracking, removes the role from all members previously owning it and recalculates their new role according to the configuration.
This will provide a status update message displaying the process.

Disable experience gain for a certain role::
* Usage: `disableExpForRole <role>`
* Description: Disables any experience gain for members with this role. They will not gain any experience until the role is removed or it is possible for the role to gain experience again.
If a member has *any* role of the ones for which experience is disabled, the member will not gain experience.

Enable experience gain for a certain role::
* Usage: `enableExpForRole <role>`
* Description: Enables experience gain for members with this role again.

List roles for which experience gain is disabled::
* Usage: `listDisabledExperienceRoles`
* Description: Lists the roles for which experience gain is disabled on this server.
* Aliases: `lsDisEpRoles`

Disable experience gain for specific member::
* Usage: `disableExpGain <member>`
* Description: Disables the ability to gain experience for this certain member.

Enable experience gain for specific member::
* Usage: `enableExpGain <member>`
* Description: Enables the ability to gain experience for this certain member.