Skip to content

Server settings

The Management center gathers the server’s cross-cutting settings: the channels and roles several modules share, and each staff role’s access rights to the dashboard.

Three sections, each addressable by URL: Overview, Channels & Roles and Role access. A Modules link points to the module catalogue, where enabling happens.


Three figures sum the configuration up: Active Modules, Restricted modules and Config Health.

When a cross-cutting channel is missing, an Incomplete configuration notice names it and points to the Channels & Roles tab.

The Feature status block lists the modules with their state, Active or Inactive, and flags those whose access is Restricted to certain roles.

The Language and time zone block sets the language Kotbo answers in and the time it uses on this server.

  • Kotbo’s language: Automatic follows the Discord server’s language; an explicit choice, French or English, takes priority. Changing the language republishes already-published panels in the new language.
  • Time zone: the server’s reference time, used for meetings, calls, reminders, scheduled triggers and the weekly raid opening.

These channels act as the default for modules that do not declare one of their own:

SettingPurpose
Log ChannelMain channel for bot logs.
Rules ChannelWhere the rules are published.
Meeting AnnouncementsStaff meeting announcements.
Meeting VoiceDefault voice channel for meetings.
Digest ChannelWhere the news digest is published.
Public ChannelGeneral public channel.
Config ChannelInternal configuration channel.
News channelWhere patch notes and staff news are published.
Daily Algo channelChannel where daily challenges are published.
  • Moderator Role: the base role for moderation.
  • Base Staff Role: the team’s base role.
  • Trial Staff Role: the role for members on trial.

These roles are what the Staff directory and Tutoring rely on.

  • GitHub Releases: release notifications.
  • Cross-server record: share and view sanctions from the other servers of the instance.

Every module can have its Main Channel, its Notification Role and its alert methods:

  • Discord Channel: sent to the configured channel.
  • Direct Messages: sent via Discord DM.
  • Discord webhook link: relays a copy of the alert to an external webhook.

A search field filters the list.


The Access Matrix defines, staff role by staff role, what is open in the dashboard. It reads either By module or By role.

Only declared staff roles appear there: link a Discord role to a rank under Hierarchy & roles first, or the matrix stays empty.

The matrix now lists every module of the catalogue, in the same category and the same order as it, and each page draws its rights from the module it is named after. Seasons, Reputation, Clans and Drops therefore no longer follow Leveling’s rights, nor Marketplace and Quests those of Economy: each is set on its own.

RightWhat it allows
ViewOpen the section and read its data. Without it, the page leaves the navigation and the API refuses even reads.
ModerateAct on what the section holds day to day - handle, decide, answer - without touching its settings.
ConfigureChange the section settings. This is the right that allows saving.
DeleteErase within the section: meetings, automations, staff ranks and warnings, quests, ticket macros and blacklist. A role that configures a section may still not erase from it.

A feature with no rule at all stays visible to the whole staff. As soon as one role is granted View, the section becomes an allowlist: it closes to every other role.

Discord administrators are never filtered out by this matrix.

Three preset setups rewrite every access right in one go: General community, Gaming / Esports and Dev / Tech. They ask for confirmation, since current access rules will be overwritten, and pending changes lost, and apply immediately rather than waiting for the save bar.


A single save bar covers all three sections: a change made under Channels & Roles is not lost when you move to Role access. Kotbo confirms with Changes saved.

After saving, the page is read back from the server: the server normalises what it receives, and a module may switch another one back on if it depends on it.