You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Auri eff762b131 Merge branch 'master' of 1 year ago
assets K9 is up again baybee 1 year ago
src Debug message when it fucks up 1 year ago
.gitignore K9 is up again baybee 1 year ago New assets for K9? 2 years ago Update 1 year ago
conf.example.toml Update conf.example.toml 1 year ago
nodemon.json New level algorithm, k9 level command, k9 setxp command. 1 year ago
package-lock.json Fix stuff 1 year ago
package.json Fix stuff 1 year ago
tsconfig.json WIP Big refactor, using Mongoose now, refactor Plugins & Commands. 1 year ago


A minimalist level-tracking Discord bot. Woof!

Releases Commit Activity Join Discord Support on Patreon

K9 is a self-hosted, minimalist level tracking Discord bot. It tracks post frequency in a persistent database, assigning experience to posts which contributes to a total user level. This user level is used to apply custom roles to award active users.

An example of this functionality can be seen in Auri's Den.


  • NodeJS 12+
  • NPM
  • MongoDB


  1. Clone this repository: git clone
  2. Install node dependencies: npm install
  3. Copy conf.example.toml to conf.toml
  4. Put a valid discord token and other configuration details in conf.toml.
  5. Run the bot: npm start


To allow the bot to start, track levels, and give role rewards, fill out conf.toml with the missing credentials. An example and explanation of all the variables are shown below.


# A Discord Bot token
discord = "token"
# MongoDB URL
mongo_url = "mongodb://host/database" 

# Custom status
status = "Hanging out"
# Command prefix
prefix = "/" 
# Delete commands after execution
delete_triggers = true  

# Bot responds to "good dog" after ranking up.
please_and_thank_you = false 

# Cooldown time
cooldown = 30 
# Minimum message length
min_length = 30

# First level XP offset.
a = 15 
# Larger values makes XP / level higher.
b = 6.5 
# Larger values make XP / level exponentially higher.
c = 1.5 

# Level to acquire role
level = 1 
role = "RoleID"
level = 2
role = "RoleID"
level = 5
role = "RoleID"


If you would like to contribute, please follow the code style used in the existing source files, and indent with tabs. Once you are done submit a pull request outlining what you have changed / added and why it should be implementing into the bot.

© Auri Collings, 2021. Made with <3

Licensed under the Apache License, Version 2.0.