Configuration
config.json
enabled to true to activate the feature. The /announce command is gated behind moderator permission.
Scheduling a one-time message
Use/announce once to send a message at a specific future time:
Supported time formats
| Format | Example | Description |
|---|---|---|
in Xh | in 2h | X hours from now |
in Xm | in 30m | X minutes from now |
in XhYm | in 1h30m | X hours and Y minutes from now |
tomorrow HH:MM | tomorrow 09:00 | Next day at the given 24-hour time |
YYYY-MM-DD HH:MM | 2026-04-01 14:00 | Absolute date and time |
Scheduling a recurring message
Use/announce recurring with a 5-field cron expression:
| Expression | Fires |
|---|---|
0 9 * * * | Every day at 9:00 AM |
0 9 * * 1 | Every Monday at 9:00 AM |
0 17 * * 5 | Every Friday at 5:00 PM |
0 12 1 * * | First of every month at noon |
Managing scheduled messages
/announce list
/announce list
Lists all active scheduled messages for the server, ordered by next run time. Shows the message ID, type (once or recurring with cron), target channel, next fire time, and a content preview.Requires moderator permission.
/announce cancel
/announce cancel
Cancels a scheduled message by ID. Sets
The original author can always cancel their own messages. Moderators can cancel any message.Requires moderator permission or ownership of the scheduled message.
enabled = false in the database — the message is not deleted, just disabled.| Option | Required | Description |
|---|---|---|
id | Yes | Scheduled message ID (shown in the /announce list output) |
Commands reference
/announce once
/announce once
Schedules a one-time message.
Requires moderator permission.
| Option | Required | Description |
|---|---|---|
time | Yes | When to send (see supported formats above) |
channel | Yes | Target text channel |
message | Yes | Message content |
/announce recurring
/announce recurring
Schedules a recurring message.
Requires moderator permission.
| Option | Required | Description |
|---|---|---|
cron | Yes | 5-field cron expression |
channel | Yes | Target text channel |
message | Yes | Message content |
How scheduling works
The scheduler polls thescheduled_messages table every minute looking for rows where next_run <= NOW() and enabled = true.
- One-time messages — sent once, then marked
enabled = false. - Recurring messages — sent, then
next_runis updated to the next cron fire time. The message keeps firing until cancelled.