Events and operations
Reaction notifications
Reaction notifications
Per-guild reaction notification mode (
guilds.<id>.reactionNotifications):offown(default)allallowlist(usesguilds.<id>.users)
Online presence events
Online presence events
Opt a guild into routed agent wakes when a human member transitions from offline to online:
presenceEvents requires an enabled heartbeat for the routed agent and the privileged Presence Intent on the application’s Bot page in the Discord Developer Portal. OpenClaw seeds current online members from each complete GUILD_CREATE snapshot, routes observed offline-to-online transitions, and also treats a later first online signal for an unseen member as newly available. That member may have come online or joined after the snapshot, so the event does not assert an exact prior status. Only humans who can view channelId are eligible: channels and public threads require View Channel on the channel or parent, while private threads additionally require membership or Manage Threads. users can further narrow that audience. OpenClaw ignores bots and unchanged online states and persists an eight-hour per-user cooldown across Gateway restarts. When Discord establishes a new Gateway session and sends READY, OpenClaw suppresses presence-derived events for reconnectSuppressSeconds (default 300, 0 disables) while guild presence state is rebuilt, so re-observed members cannot wake the agent one by one. It additionally rate-limits successfully queued events per guild to burstLimit events (default 8) per burstWindowSeconds sliding window (default 60), logging each guild’s suppression episode once. A resumed session is not treated as a new session. Discord limits snapshots for guilds above 75,000 members; there, OpenClaw requires an explicit offline update before greeting. The system event carries immutable user, guild, and channel IDs without embedding mutable display names. The agent decides whether and how to greet.Presence configuration
Presence configuration
Presence updates are applied when you set a status or activity field, or when you enable auto presence.Status only:Activity (custom status is the default activity type when Streaming:Activity type map:Auto presence maps runtime availability to Discord status: healthy => online, degraded or unknown => idle, exhausted or unavailable => dnd. Defaults:
activity is set):- 0: Playing
- 1: Streaming (requires
activityUrl;activityUrlin turn requiresactivityType: 1) - 2: Listening
- 3: Watching
- 4: Custom (uses the activity text as the status state; emoji is optional)
- 5: Competing
intervalMs 30000, minUpdateIntervalMs 15000 (must be less than or equal to intervalMs).Config writes
Config writes
Channel-initiated config writes are enabled by default. This affects
/config set|unset flows (when command features are enabled).Disable:Gateway proxy
Gateway proxy
Route Discord gateway WebSocket traffic and startup REST lookups (application ID + allowlist resolution) through an HTTP(S) proxy with Per-account override:
channels.discord.proxy.
Discord gateway WebSocket proxying is explicit; WebSocket connections do not inherit ambient proxy environment variables from the Gateway process. Startup REST lookups use this proxy when channels.discord.proxy is configured.PluralKit support
PluralKit support
Enable PluralKit resolution to map proxied messages to system member identity:Notes:
- allowlists can use
pk:<memberId> - member display names are matched by name/slug only when
channels.discord.dangerouslyAllowNameMatching: true - lookups query the PluralKit API with the original message ID
- if lookup fails, proxied messages are treated as bot messages and dropped unless
allowBotslets them through