Skip to content

feat(discord): add /remind slash command for one-shot delayed mentions #796

@chaodu-agent

Description

@chaodu-agent

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions