Dreamliner server configuration is written in YAML. Each server has its own config stored in the database after upload.
#File format
emojis:
success: "<:blurplecheck:1533947878668763278>"
error: "<:redcheck:1533947951481749504>"
neutral: "<:greycheck:1533948078615298148>"
warning: "<:warning:1533948583995244734>"
unchecked: "<:greycheck:1533948078615298148>"
levels:
"ROLE_OR_USER_SNOWFLAKE": 100 # Admin
"ROLE_OR_USER_SNOWFLAKE": 50 # Mod
# Server events: joins, leaves, edits, deletes, voice activity, role/nickname changes
server_log_channel_id: "1111111111111111111"
# Moderation: infractions, automod, censor, /clean, voice mod, cases, expirations
moderation_log_channel_id: "1111111111111111111"
# Deprecated - use moderation_log_channel_id instead
# log_channel_id: "1234567890123456789"
# When true, command replies are only visible to the user who ran the command.
ephemeral_responses: false
plugins:
utility:
config:
jumbo_size: 128
autojoin_threads: true
info_on_single_result: true
overrides:
- level: ">=50"
config:
can_search: true
can_clean: true
#Emojis
The emojis block sets the icons used on command response embed titles:
emojis:
success: "<:blurplecheck:1533947878668763278>"
error: "<:redcheck:1533947951481749504>"
neutral: "<:greycheck:1533948078615298148>"
warning: "<:warning:1533948583995244734>"
unchecked: "<:greycheck:1533948078615298148>"
- success - positive outcomes (saved, updated, reloaded, etc.)
- error - permission denied, invalid input, not found, etc.
- neutral - general information and commands
- warning - soft failures and advisories (not configured, already exists, etc.)
- unchecked - disabled or off states
Embed author always shows Dreamliner with the bot avatar. The title shows the emoji plus command title (e.g. success emoji + Configuration saved).
Custom Discord emojis use the <:name:id> form and must be available to the bot.
#Response visibility
ephemeral_responses: false
When false (default), command replies are public in the channel. Set to true to make all responses ephemeral (only visible to the user who ran the command).
#Permission levels
The template ships with an empty map: levels: {}.
Replace that with indented role/user ID entries (do not keep the {} braces when adding IDs):
levels:
"ROLE_OR_USER_SNOWFLAKE": 100 # Admin
"ROLE_OR_USER_SNOWFLAKE": 50 # Mod
A member's level is the highest level from their roles and their user ID. Overrides use level syntax like ">=50" to grant plugin permissions to mods without listing every user.
For a complete setup guide with examples, see Permissions setup.
#Log channels
server_log_channel_id: "1234567890123456789"
moderation_log_channel_id: "1234567890123456789"
| Channel | Events |
|---|---|
server_log_channel_id | Joins, leaves, message edits/deletes, voice activity, nickname/role changes |
moderation_log_channel_id | Infractions, automod, censor, /clean, voice mod commands, case updates, expirations |
The legacy log_channel_id still works as a fallback for moderation logs. See Logs plugin for the full event list and log format.
#Plugin sections
Each plugin is configured under plugins.<name>:
| Field | Description |
|---|---|
enabled | Set false to disable (utility is enabled when section exists) |
config | Direct config values |
overrides | Context-specific overrides |
replaceDefaultOverrides | If true, ignore built-in default overrides |
#Override criteria
| Key | Matches |
|---|---|
level | Member level (">=50", ">100", etc.) |
channel | Specific channel ID |
category | Category channel ID |
user | Specific user ID |
role | Members who have this role ID |
For everyday grants (user / role / everyone) and level assignment, prefer /permissions instead of editing YAML. See Permissions.
#Merge behavior
On upload, your YAML is deep-merged with config/default.server.yaml. You only need to include keys you want to change.
See also: Autorole, Logs, Starboard.
#Config commands
| Command | Description |
|---|---|
/config template | Default template from bot operator |
/config download | Current effective config for this server |
/config upload | Validate and save a config file |
/config validate | Dry-run validation |
/config update | Apply new Dreamliner defaults while keeping your customizations |
/permissions ... | Grant commands / set levels without re-uploading YAML |
/plugin toggle | Enable or disable a plugin (plugin + state: Enable / Disable) |
/plugin list | Show which plugins are enabled or disabled |
#Workflow
- Run
/config template(new server) or/config download(existing server). - Edit the YAML file locally, or use the website config editor (loads the schema from this repo).
- Run
/config validateto check for errors (optional). - Run
/config uploadto apply.
Machine-readable schema for the editor is generated with npm run schema:export into schema/guild-config.schema.json (also run during prebuild).
#/config update
When Dreamliner ships new default settings, run /config update to pick up changes you did not customize. Your overrides are preserved using the raw YAML from your last upload.
If your config was saved before this feature existed, the bot uses diff detection against the stored defaults snapshot. Re-uploading via /config upload improves future updates.
#Reloading
Admins with can_reload_guild can run /reload to re-read the config from the database without re-uploading.
#Plugin index
Dreamliner is organized into plugins under the plugins: key. Each plugin has its own config, optional overrides, and enabled flag.
| Category | Plugins |
|---|---|
| Core | utility, infractions |
| Moderation | automod, censor, admin, persist, slowmode |
| Roles | roles, reaction_roles, role_buttons, self_grantable_roles, pingable_roles, role_manager, autorole |
| Automation | welcome_message, tags, post, autodelete, autoreactions, reminders, counters, companion_channels |
| Tracking | name_history, username_saver, locate_user, stats |
| Customization | custom_events, command_aliases |
| Background | starboard, logs |
See Documentation index for setup guides per plugin. The default template (/config template) includes all configurable fields.