Skip to main content
Volvox.Bot uses a role-based permission system configured in the permissions section of config.json. Every slash command is mapped to one of three access tiers. Users whose Discord roles match the required tier (or higher) can run the command.

Permission tiers

everyone

Any member of the server can use the command. No special role is required.

moderator

Only members who hold at least one of the roles listed in permissions.moderatorRoleIds (or higher) can use the command.

admin

Only members who hold at least one of the roles listed in permissions.adminRoleIds (or higher) can use the command.
Tiers are hierarchical: admins can always run commands requiring moderator or everyone, and moderators can always run commands requiring everyone.

Bot owners

Bot owners bypass all permission checks unconditionally. A user is considered a bot owner if their Discord user ID appears in either:
  • The BOT_OWNER_IDS environment variable (comma-separated list), or
  • The permissions.botOwners array in config.json
The environment variable takes precedence when both are set. Bot owners can run any command regardless of their server roles.
Bot owner access is absolute. Only add user IDs you fully trust, as owners can read and change any configuration value including sensitive settings.

Configuring roles

Set the adminRoleIds and moderatorRoleIds arrays in config.json, or update them at runtime:
/config set path:permissions.adminRoleIds value:["123456789012345678"]
/config set path:permissions.moderatorRoleIds value:["987654321098765432","111222333444555666"]
To find a role ID in Discord: go to Server Settings → Roles, enable Developer Mode (User Settings → Advanced), then right-click the role and select Copy Role ID.

Default command permission levels

The permissions.allowedCommands map in config.json sets the required tier for every command. You can override any entry at runtime using /config set.

Everyone

These commands are available to all server members by default.
CommandDescription
pingCheck bot latency
memoryView your stored AI memories
tldrSummarize recent channel messages
afkSet an AFK status
githubGitHub integration commands
rankView your XP rank
leaderboardView the server leaderboard
profileView a member profile
remindSet a reminder
challengeView the daily coding challenge
reviewRequest a code review
showcaseSubmit a project to the showcase

Moderator

These commands require at least the moderator role.
CommandDescription
warnIssue a warning to a member
warningsList warnings for a member
editwarnEdit an existing warning
removewarnRemove a specific warning
clearwarningsClear all warnings for a member
modlogView the moderation log
announceSend an announcement

Admin

These commands require at least the admin role.
CommandDescription
configView and change bot configuration
kickKick a member from the server
timeoutTemporarily mute a member
untimeoutRemove a timeout
banPermanently ban a member
tempbanBan a member for a set duration
unbanLift a ban
softbanBan and immediately unban to delete messages
purgeBulk-delete messages
caseLook up a moderation case
historyView a member’s moderation history
lockLock a channel so members cannot send messages
unlockUnlock a channel
slowmodeSet channel slowmode
reloadHot-reload bot modules

Changing a command’s permission level

You can change any command’s required tier at runtime without restarting the bot:
/config set path:permissions.allowedCommands.announce value:admin
/config set path:permissions.allowedCommands.tldr value:moderator
Valid values are everyone, moderator, and admin.

Protected roles

The moderation.protectRoles setting prevents moderation commands from being used against certain members, regardless of who is running the command.
config.json (moderation.protectRoles)
{
  "protectRoles": {
    "enabled": true,
    "roleIds": [],
    "includeAdmins": true,
    "includeModerators": true,
    "includeServerOwner": true
  }
}
OptionDefaultDescription
enabledtrueEnable or disable role protection globally
roleIds[]Additional role IDs to protect (in addition to the options below)
includeAdminstrueAutomatically protect all admin-role holders
includeModeratorstrueAutomatically protect all moderator-role holders
includeServerOwnertrueAlways protect the Discord server owner
When a moderation command targets a protected member, the bot refuses the action and tells the acting user why.
Use roleIds to protect additional roles beyond admins and moderators — for example, a Trusted Member role that should never be accidentally muted or kicked.

Full permissions config reference

config.json (permissions section)
{
  "permissions": {
    "enabled": true,
    "adminRoleIds": [],
    "moderatorRoleIds": [],
    "botOwners": [],
    "usePermissions": true,
    "allowedCommands": {
      "ping": "everyone",
      "memory": "everyone",
      "config": "admin",
      "warn": "moderator",
      "warnings": "moderator",
      "editwarn": "moderator",
      "removewarn": "moderator",
      "clearwarnings": "moderator",
      "kick": "admin",
      "timeout": "admin",
      "untimeout": "admin",
      "ban": "admin",
      "tempban": "admin",
      "unban": "admin",
      "softban": "admin",
      "purge": "admin",
      "case": "admin",
      "history": "admin",
      "lock": "admin",
      "unlock": "admin",
      "slowmode": "admin",
      "modlog": "moderator",
      "announce": "moderator",
      "tldr": "everyone",
      "afk": "everyone",
      "github": "everyone",
      "rank": "everyone",
      "leaderboard": "everyone",
      "profile": "everyone",
      "remind": "everyone",
      "challenge": "everyone",
      "review": "everyone",
      "showcase": "everyone",
      "reload": "admin"
    }
  }
}

Build docs developers (and LLMs) love