---
summary: "反应通知、存在事件和配置、配置写入、代理和 PluralKit"
read_when:
- "在 Discord 反应或状态变化时唤醒代理"
- "设置机器人存在、网关代理或 PluralKit 支持"
title: "Discord 事件和操作"
sidebarTitle: "事件和操作"
---
操作 Discord 表面:反应和存在唤醒、机器人存在、网关代理、配置写入和 PluralKit。
## 事件和操作
每个 guild 的反应通知模式(`guilds..reactionNotifications`):
- `off`
- `own`(默认)
- `all`
- `allowlist`(使用 `guilds..users`)
反应事件会被转换为系统事件并附加到路由到的 Discord 会话中。
当某个人类成员从离线切换到在线时,可将某个 guild 纳入路由后的代理唤醒:
```json5
{
channels: {
discord: {
intents: { presence: true },
guilds: {
"111111111111111111": {
presenceEvents: {
channelId: "222222222222222222",
users: ["333333333333333333"], // optional; further narrow channel viewers
reconnectSuppressSeconds: 300, // optional; new-session quiet window (0 disables)
burstLimit: 8, // optional; max events per burst window
burstWindowSeconds: 60, // optional; sliding burst-detection window
},
},
},
},
},
}
```
`presenceEvents` 需要为路由代理启用心跳以及 Discord 开发人员门户中应用程序的 Bot 页面上的特权 **Presence Intent**。 OpenClaw 从每个完整的 `GUILD_CREATE` 快照中播种当前在线成员,路由观察到的离线到在线转换,并将未见过的成员的稍后首次在线信号视为新可用。该成员可能在快照之后上线或加入,因此该事件不会断言确切的先前状态。只有可以查看 `channelId` 的人员才有资格:通道和公共线程需要通道或父级上的 **View Channel**,而专用线程还需要成员资格或 **Manage Threads**。 `users` 可以进一步缩小受众范围。 OpenClaw 忽略机器人和未更改的在线状态,并在网关重新启动时保持每用户八小时的冷却时间。当Discord建立新的网关会话并发送`READY`时,OpenClaw会在重建公会存在状态时抑制`reconnectSuppressSeconds`的存在衍生事件(默认300,`0`禁用),因此重新观察的成员无法一一唤醒代理。它还将每个公会成功排队的事件速率限制为每个 `burstWindowSeconds` 滑动窗口(默认 60)的 `burstLimit` 事件(默认 8),记录每个公会的压制事件一次。恢复的会话不被视为新会话。 Discord 限制75000名以上成员的公会快照;在那里,OpenClaw 需要在问候之前进行显式离线更新。系统事件携带不可变的用户、行会和频道 ID,而不嵌入可变的显示名称。智能体决定是否以及如何打招呼。
当你设置状态或活动字段,或者启用自动状态时,会应用状态更新。
仅状态:
```json5
{
channels: {
discord: {
status: "idle",
},
},
}
```
活动(当设置了 `activity` 时,自定义状态是默认活动类型):
```json5
{
channels: {
discord: {
activity: "Focus time",
activityType: 4,
},
},
}
```
流媒体:
```json5
{
channels: {
discord: {
activity: "Live coding",
activityType: 1,
activityUrl: "https://twitch.tv/openclaw",
},
},
}
```
活动类型映射:
- 0:游玩
- 1:直播(需要 `activityUrl`;而 `activityUrl` 又要求 `activityType: 1`)
- 2:听歌
- 3:观看
- 4:自定义(将活动文本作为状态值;表情可选)
- 5:竞技
自动状态(运行时健康信号):
```json5
{
channels: {
discord: {
autoPresence: {
enabled: true,
intervalMs: 30000,
minUpdateIntervalMs: 15000,
},
},
},
}
```
自动状态会将运行时可用性映射为 Discord 状态:健康 ⇒ 在线,降级或未知 ⇒ 闲置,耗尽或不可用 ⇒ 请勿打扰。默认值:`intervalMs` 为 30000,`minUpdateIntervalMs` 为 15000(必须小于或等于 `intervalMs`)。
默认启用由频道发起的配置写入。这会影响 `/config set|unset` 流程(当命令功能启用时)。
禁用:
```json5
{
channels: {
discord: {
configWrites: false,
},
},
}
```
通过 `channels.discord.proxy` 将 Discord 网关 WebSocket 流量和启动时 REST 查询(应用 ID + 允许列表解析)路由到 HTTP(S) 代理。 Discord 网关 WebSocket 代理是显式的;WebSocket 连接不会从 Gateway 进程继承环境中的代理变量。配置了 `channels.discord.proxy` 时,启动时 REST 查询会使用此代理。
```json5
{
channels: {
discord: {
proxy: "http://proxy.example:8080",
},
},
}
```
每个帐户覆盖:
```json5
{
channels: {
discord: {
accounts: {
primary: {
proxy: "http://proxy.example:8080",
},
},
},
},
}
```
启用 PluralKit 解析以将代理消息映射到系统成员身份:
```json5
{
channels: {
discord: {
pluralkit: {
enabled: true,
token: "pk_live_...", // optional; needed for private systems
},
},
},
}
```
注意:
- 允许列表可以使用 `pk:`
- 仅当 `channels.discord.dangerouslyAllowNameMatching: true` 时, 成员显示名称才与 name/slug 匹配
- lookups 使用原始消息 ID 查询 PluralKit API
- 如果查找失败,代理消息会被视为机器人消息并丢弃,除非 `allowBots` 允许其通过