Plugins

Scheduled Messages

Premium
Post a message once, on an interval or on a cron schedule — to up to 25 channels at a time, with a start and end window.

A scheduled message is text, an embed, or both, posted on a rhythm you define — a weekly event reminder, a daily bump nag, a one-off announcement at midnight on New Year's Eve.

LicensePremium
Configureddashboard only — there are no slash commands
Channels per scheduleup to 25
Resolutionone minute

Content

Each schedule carries a text message, an embed, or both together. The embed is built with the same embed builder used everywhere else in Cloudy, and placeholders work in both.

Channels

A schedule posts to one or many channels — pick up to 25. The same message goes to every one of them in the same minute.

If Cloudy gets a hard "this channel no longer exists" from Discord, it removes that channel from the schedule by itself. A channel it merely cannot post in — missing permissions — is never removed, because that is something you fix with a permission tick rather than something that is gone. When the last channel disappears, the schedule switches itself off.

Recurrence

Three modes. Picking one blanks the settings of the other two, so switching back and forth cannot resurrect an old rhythm.

Once

Fires a single time at the date and time you set, then stops.

Interval

Fires every n minutes, counted from the previous run. Simple and drift-free, but it does not line up with the clock — an interval of 1440 minutes started at 09:13 keeps firing at 09:13.

Cron

A five-field cron expression, evaluated in the timezone you choose (IANA, e.g. Europe/Berlin). This is the mode to use for anything that should sit at a real time of day.

0 20 * * 5      Fridays at 20:00
30 9 * * 1-5    Weekdays at 09:30
0 0 1 * *       First day of every month, midnight
*/15 * * * *    Every fifteen minutes
Pick your own timezone, not UTC. Cloudy handles daylight saving for you — a cron set to 20:00 in Europe/Berlin stays at 20:00 in both summer and winter, which an equivalent UTC expression would not.

The dashboard shows the next run for every schedule. An empty value means the schedule will not fire again — usually because its end date has passed or its run limit is used up.

Window

Three optional limits on top of the recurrence:

SettingEffect
Starts atNothing fires before this moment
Ends atNothing fires after it; the schedule then switches itself off
Max runsStop after this many sends

A schedule that can never fire again is disabled automatically rather than being checked forever.

Options

Allow @everyone

Off by default. When off, the message can still ping roles and users — only @everyone and @here are stripped.

The asymmetry is deliberate. A human who mass-pings by accident does it once; a schedule does it on every single run until somebody notices. Turn this on only for a schedule you have watched fire at least once.

Delete previous

When on, Cloudy deletes its last copy before posting the next one. Ideal for a recurring reminder that should exist exactly once in a channel — rules, bump nags, "read the pins".

It is best-effort: a copy Cloudy can no longer see or delete is left in place rather than blocking the new message. Deleting the schedule itself does not remove the last posted copy.

Missed occurrences

If Cloudy is restarted or briefly offline, a missed occurrence is caught up for up to one hour. Anything older is recorded as handled but not sent, so the schedule rejoins its rhythm instead of suddenly firing yesterday's announcement.

This is why a late delivery does not shift the schedule: Cloudy remembers which occurrence it handled, not the moment it happened to send.

Permissions

In every target channel Cloudy needs View Channel, Send Messages and — for embeds and attachments — Embed Links and Attach Files. Mention Everyone is only needed if you enabled the @everyone option, and Manage Messages only for Delete previous.