Description
Add a /remind slash command that lets humans schedule a one-shot delayed message to mention specific users or roles in the OAB channel. This brings lightweight scheduling directly into the Discord UX without requiring config file edits or redeployment.
Use Case
Server admins and team leads need to ping agents or team members after a delay — e.g. "remind the review team in 2 hours" or "wake up BotA in 30 minutes." Today this requires either an external scheduler, editing config.toml cron jobs, or manually remembering to come back later.
With /remind, a human can type:
/remind @超渡法師 @普渡法師 "Review PR #42" 2h
and walk away. The bot fires the reminder in-channel when the timer expires.
Proposed Solution
Command Signature
/remind <targets> <message> <delay>
| Parameter |
Type |
Description |
targets |
mentionable (multi) |
One or more @user or @ROLE mentions |
message |
string |
Reminder content |
delay |
string |
Duration: 1m to 30d (supports m, h, d) |
Constraints
- Permission: Only humans (non-bot users) can invoke
- Delay range: Minimum 1m, maximum 30d
- Mode: One-shot only (no recurring — see Related Issues for cron)
- Delivery: Posts in the same channel where
/remind was invoked
- Persistence: Reminders survive bot restarts (file or DB backed)
Architecture
┌─────────────────────────────────────────────────────────┐
│ Discord Guild │
└───────────────────────────┬─────────────────────────────┘
│ /remind @Bot "msg" 2h
▼
┌─────────────────────────────────────────────────────────┐
│ OpenAB (Rust) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ Slash Cmd │───▶│ Reminder │───▶│ Scheduler │ │
│ │ Handler │ │ Store (.json)│ │ (tokio) │ │
│ └──────────────┘ └──────────────┘ └─────┬─────┘ │
│ │ │ │
│ │ ephemeral ACK │ fires │
│ ▼ ▼ │
│ ┌──────────────┐ ┌─────────────┐ │
│ │ "⏰ Set! │ │ Channel msg │ │
│ │ fires in 2h"│ │ ⏰ Reminder │ │
│ └──────────────┘ │ from @user: │ │
│ │ "msg" │ │
│ │ cc @targets │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
Flow
Human ──/remind──▶ OpenAB
│
├─ 1. Validate: is_bot=false, parse delay (1m–30d)
├─ 2. Persist reminder to store (survives restart)
├─ 3. Schedule tokio::time::sleep(duration)
├─ 4. ACK ephemeral: "⏰ Reminder set! Fires in 2h"
│
│ ... time passes ...
│
└─ 5. Post to channel:
⏰ **Reminder** from <@sender>:
"Review PR #42"
cc <@超渡法師> <@普渡法師>
Persistence
Use a simple JSON file (reminders.json) in the working directory:
[
{
"id": "uuid",
"channel_id": "123456",
"sender_id": "845835...",
"targets": ["1490365...", "&1496247..."],
"message": "Review PR #42",
"fire_at": "2026-05-11T17:48:00Z",
"created_at": "2026-05-11T15:48:00Z"
}
]
On startup, load all pending reminders and re-schedule them.
Prior Art
| Project |
Approach |
Notes |
| Mayerch1/RemindmeBot |
Python Discord bot, /remind @user <time> <msg> |
Full-featured: intervals, rrules, timezone support. We take the simple /remind UX but skip recurring for v1. |
| Slack /remind |
Built-in slash command: /remind @someone "msg" in 2h |
Gold standard UX. Natural language parsing. We adopt the targets + message + delay pattern. |
| arifszn/reminder-mcp |
MCP server for Slack/Telegram reminders |
Shows the pattern of a scheduler service separate from the chat platform. Our approach is simpler — in-process with tokio. |
OpenAB [[cron.jobs]] |
Config-driven recurring scheduler (already in OAB) |
Existing infra uses cron + chrono crates. /remind complements this with ad-hoc one-shots that don't need config edits. |
Related Issues
Description
Add a
/remindslash command that lets humans schedule a one-shot delayed message to mention specific users or roles in the OAB channel. This brings lightweight scheduling directly into the Discord UX without requiring config file edits or redeployment.Use Case
Server admins and team leads need to ping agents or team members after a delay — e.g. "remind the review team in 2 hours" or "wake up BotA in 30 minutes." Today this requires either an external scheduler, editing
config.tomlcron jobs, or manually remembering to come back later.With
/remind, a human can type:and walk away. The bot fires the reminder in-channel when the timer expires.
Proposed Solution
Command Signature
targetsmessagedelay1mto30d(supportsm,h,d)Constraints
/remindwas invokedArchitecture
Flow
Persistence
Use a simple JSON file (
reminders.json) in the working directory:[ { "id": "uuid", "channel_id": "123456", "sender_id": "845835...", "targets": ["1490365...", "&1496247..."], "message": "Review PR #42", "fire_at": "2026-05-11T17:48:00Z", "created_at": "2026-05-11T15:48:00Z" } ]On startup, load all pending reminders and re-schedule them.
Prior Art
/remind @user <time> <msg>/remindUX but skip recurring for v1./remind @someone "msg" in 2htargets + message + delaypattern.[[cron.jobs]]cron+chronocrates./remindcomplements this with ad-hoc one-shots that don't need config edits.Related Issues
usercron: hot-reload cronjob.toml for agent-managed schedules (closed/incomplete)./remindis the simpler human-facing complement — no file editing needed.[[cron.jobs]]feature./remindextends this with interactive one-shots./leaveand/threadsslash commands (open). Same slash command registration pattern we'll follow./remindstays Discord-native for now but could extend to gateway platforms later.