Cloudy stages your edits and sends them in one go. Understanding that model explains the save bar, the "unsaved changes" prompt, and why some changes appear in Discord instantly while others take half a minute.
Change any field and a bar appears at the bottom of the page:
3 changes unsaved [ Discard ] [ Save ]
The counter is the number of fields that differ from the last saved state — not the number of keystrokes. Type in a field and undo your typing, and the count drops back down again.
Only dirty fields are sent. If you change one channel on a page with fifteen settings, the request contains one field. That keeps concurrent edits from two admins from overwriting each other's untouched settings.
Navigating away — sidebar, server switcher, browser back — with a dirty form asks for confirmation. Closing or reloading the tab triggers the browser's native "leave site?" prompt. Both exist because there is no autosave: unsaved is unsaved.
Different plugins take different routes, and the difference is visible:
| Change | Reaches Discord |
|---|---|
| Plugin settings (channels, messages, thresholds) | Next event the bot handles — effectively immediate |
| Enable / disable a plugin | Immediate; slash commands follow Discord's own registration delay (1–2 min) |
| Creating a panel (ticket, verification, reaction roles, custom games, embed message) | Within about 30 seconds — the bot posts the message |
| Editing a posted panel | Within about 30 seconds — the bot edits the existing message in place |
| Deleting a panel | Within about a minute — the bot removes the Discord message, then the entry |
| Sticky messages | Immediate |
Nothing here waits on a timer you have to sit out — a saved setting is picked up on the bot's next action.
A panel is a real Discord message, and only the bot can post one. Saving marks it as pending and the bot takes it from there; the list shows a posting… badge while that is happening.
| What you see | What it means | What to do |
|---|---|---|
| A red toast, changes stay dirty | Validation rejected the payload | Check the field the message names — every limit is listed in Limits |
| "Could not load configuration" instead of the form | The settings could not be read | Use Try again. The form deliberately refuses to render defaults here, because saving them would overwrite your real configuration with blanks |
| The premium lock bar | The server has no active license | See Premium |
| Nothing happens, no toast | Session expired | Reload the page and sign in again |
The dashboard validates the same rules the bot enforces, so a value the dashboard accepts is a value the bot can use. That is why some inputs refuse impossible combinations outright — a maximum below its minimum, for example, is rejected rather than saved and quietly ignored later.