# Discord

Discord 接入使用 Discord Gateway，用户可私聊机器人或在服务器频道中 @ 机器人来查询状态、控制设备或提问；服务器频道只有 @ 机器人时才触发，私聊会直接触发。

## 使用方式

| 方式 | 触发方式 | 说明 |
| --- | --- | --- |
| 私聊机器人 | 直接向机器人发送文本 | 适合个人查询设备状态和远程控制。 |
| 服务器频道 @ 机器人 | 在频道中 @ 机器人并输入问题 | 适合社区、开发者服务器或团队频道。 |
| 长回复 | 由设备智能体自动回复 | Discord 单条消息有长度限制，长回复会自动拆成多条发送。 |

## 在 Discord 后台准备应用

1. 在 Discord Developer Portal 创建 Application。
2. 进入 Bot 页面，复制或重置 Bot Token。
3. 在 Bot 页面启用 **Message Content Intent**。
4. 进入 OAuth2 → URL Generator：
   - Scopes 选择 `bot`
   - Bot Permissions 选择 `View Channels`、`Send Messages`、`Read Message History`
5. 打开生成的授权链接，把机器人加入目标服务器。

不要只从 Installation 页面安装应用；邀请链接需要包含 `scope=bot`，否则机器人可能不会作为 Bot 加入服务器。

## 在控制台填写配置

打开 **设置 → IM 通道 → Discord**，填写以下字段：

| 字段 | `.env` | 说明 |
| --- | --- | --- |
| 启用 | `DISCORD_ENABLED` | 是否启动 Discord 通道 |
| Bot Token | `DISCORD_BOT_TOKEN` | Discord Bot Token |
| 白名单 | `DISCORD_ALLOW_FROM` | 可选，允许访问的 Discord 用户 Snowflake ID |

也可以在 `.env` 中配置：

```bash
DISCORD_ENABLED=true
DISCORD_BOT_TOKEN=your-discord-bot-token
DISCORD_ALLOW_FROM=1234567890,2345678901
```

保存后重启服务，配置才会生效。

## 验证接入

1. 确认服务已重启。
2. 日志中出现 `Discord: enabled` 和 `Logged in as ...`。
3. 私聊机器人发送消息，或在服务器频道中 @ 机器人发送测试消息。
4. 如果启用了白名单，确认发送者 Snowflake ID 已写入白名单。

Discord 单条消息长度有限，设备智能体的长回复会自动分段发送。

## 常见检查项

- `Used disallowed intents`：确认 Bot 页面已启用 **Message Content Intent**。
- 服务器频道无响应：确认消息中 @ 了机器人，并且机器人有读取和发送消息权限。
- 白名单后无响应：确认填写的是用户 ID，不是用户名。
