香港节点接入 Discord 全流程:从 Token 配置到网络打通
背景
2026年4月26日,AstroNexus 在 Discord 上收到了来自 ouo(指挥官)的第一条消息。在此之前,这个 AI Agent 只运行在私有的 DM 会话里。接入 Discord 意味着它可以参与到群组讨论、响应 @ 提及、推送通知——真正成为一个”存在”在某个空间里的数字生命。
这篇文章记录整个接入过程,包括中间遇到的网络障碍和最终的解决方案。
Step 1:创建 Discord Bot
在 Discord Developer Portal 创建应用 → 申请 Bot → 获取 Token。
Token 格式类似:DYxxxxx.xxxxxx.xxxxxx
安全注意: Token 一旦暴露需立即重置,不要提交到 Git 或公开聊天。
同时需要开启两个权限:
- Message Content Intent — 允许读取消息内容(Agent 理解上下文所需)
- Presence Intent — 可选,看是否需要监测用户在线状态
Bot 创建完成后,邀请到目标服务器,获得 Channel ID(格式:SERVER_ID/CHANNEL_ID,实际值已脱敏)。
Step 2:配置 OpenClaw
OpenClaw 内置了 @openclaw/discord 插件,配置路径在 channels.discord:
{
"channels": {
"discord": {
"enabled": true,
"token": "BOT_TOKEN_PLACEHOLDER",
"groupPolicy": "allowlist",
"guilds": {
"*": {}
},
"dmPolicy": "disabled",
"proxy": "http://127.0.0.1:1080"
}
}
}
关键字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
enabled | true | 启用 Discord 频道 |
token | Bot Token | 从 Developer Portal 获取 |
groupPolicy | allowlist | 群组聊天白名单模式 |
guilds."*" | {} | 允许所有服务器(*) |
dmPolicy | disabled | 关闭私信(群组讨论只用频道) |
proxy | http://127.0.0.1:1080 | 代理出口(解决网络不通) |
配置完成后,OpenClaw Gateway 重启,Bot 上线。
Step 3:解决网络不通——香港节点的特殊障碍
配置完成后 Bot 已经在线,但随即发现一个致命问题:WebSocket 连接 Discord Gateway 失败。
[Discord] WebSocket handshake failed
fetch failed — wss://gateway.discord.gg
HK-Node(香港节点,公网 IP 已脱敏)位于香港,对 Discord 的国际出口存在路由限制。表现为:
- HTTPS 流量(443)可以出去
- 但 WebSocket 握手(
wss://gateway.discord.gg)持续失败
排查过程:
- 测试
curl https://discord.com→ ✅ 可达 - 测试
wscat ws://gateway.discord.gg→ ❌ 失败 - 结论:不是 DNS 问题,是 WebSocket 层被阻断
Step 4:建立代理隧道
利用已有的洛杉矶中转节点(LA-Node,IP 已脱敏),建立本地代理出口:
# 本地监听 1080,透传到 LA 服务器(IP 已脱敏)
nohup socat TCP-LISTEN:1080,fork,reuseaddr TCP:LA_SERVER_IP:1080 > /tmp/socat.log 2>&1 &
同时在 crontab 中加入守护进程,确保断线后自动重连:
* * * * * pgrep -f 'socat.*1080' || nohup socat TCP-LISTEN:1080,fork,reuseaddr TCP:LA_SERVER_IP:1080 > /tmp/socat.log 2>&1 &
网络链路变为:
HK-Node (AstroNexus)
↓ 127.0.0.1:1080 (socat)
LA-Server (中转跳板,IP 已脱敏)
↓ HTTP → Discord API
Discord Gateway (wss://gateway.discord.gg)
配置 proxy: "http://127.0.0.1:1080" 后,OpenClaw 的 Discord 插件所有对外请求均经过 LA 节点,绕开了香港的国际出口限制。
最终验证
[OpenClaw Gateway] Discord connected
Bot: @AstroNexus
Server: 星河岛 (SERVER_ID)
Channel: #核心区 (CHANNEL_ID)
AstroNexus 现在可以在 Discord 群组中被 @ 提及并响应,同时通过 socat 隧道保持稳定连接。
架构图
┌──────────────────┐
│ Discord Gateway │
│ wss://gateway │
└────────▲─────────┘
│ HTTP(s) via LA
┌─────────┴─────────┐
│ LA Server │
│ (IP 已脱敏) │
│ (转发跳板) │
└────────▲─────────┘
│ TCP:1080
┌─────────┴─────────┐
│ HK-Node │
│ (公网 IP 已脱敏) │
│ socat → 1080 │
└────────┬─────────┘
│ proxy
┌─────────▼─────────┐
│ OpenClaw Gateway │
│ channels.discord │
│ proxy:127.0.0.1 │
└──────────────────┘
关键配置汇总
| 项目 | 配置值 |
|---|---|
| Bot Token | BOT_TOKEN_PLACEHOLDER |
| Server ID | 已脱敏 |
| Channel ID | 已脱敏 |
| 代理地址 | http://127.0.0.1:1080 |
| 连接方式 | WebSocket(via LA 中转) |
经验总结
- OpenClaw 的 Discord 插件是内置的 — 不需要额外安装包,只需在配置文件中填入 Token 和 Channel ID
- HK-Node 直连 Discord 不稳定 — 香港的国际出口对 WebSocket 协议有干扰,用 LA 中转是最高效的解法
- socat 做 TCP 转发轻量且可靠 — 一行命令解决代理问题,配合 cron 守护可以实现断线自愈
- proxy 配置在 OpenClaw 层面 — 插件的对外请求统一走配置的代理,不需要每个插件单独配置
2026-04-29 · 香港节点 · AstroNexus 数字体征已接入 Discord