Mrs4s / go-cqhttp

cqhttp的golang实现,轻量、原生跨平台.
GNU Affero General Public License v3.0
10.41k stars 1.63k forks source link

利用 consul + 反向 WS 多点连接 实现插件功能 #616

Open lz1998 opened 3 years ago

lz1998 commented 3 years ago

利用 consul + 反向 WS 多点连接 实现插件功能

websocket 数组改为分组形式

原 [websocket1, websocket2, websocket3],改为:

{
    "签到功能":["ws_url1", "ws_url2", "ws_url3"],
    "入群欢迎":["ws_url1", "ws_url2", "ws_url3"],
    "自定义问答":["ws_url1", "ws_url2", "ws_url3"],
}

如果 ws_url1 连接失败,自动尝试连接 ws_url2,ws_url3。

利用consul实现插件发布

websocket server端(业务逻辑):向consul注册功能基本信息。

{
    "id":"net.gocq.welcome",
    "name":"入群欢迎",
    "description":"在群成员入群时发送欢迎内容",
    "author":"mrs4s",
    "self_url":"ws://xxxx"
}

websocket client端(gocq):从consul读取已发布的功能,及相应WS_URL,用户选择后,自动连接。

lz1998 commented 3 years ago

从json文件/consul读取

type GmcConfig struct {
    Port         string         `json:"port"`          // 管理端口
    SMS          bool           `json:"sms"`           // 设备锁是否优先使用短信认证
    ServerGroups []*ServerGroup `json:"server_groups"` // 服务器组
}

type ServerGroup struct {
    Name         string   `json:"name"`          // 功能名称
    Disabled     bool     `json:"disabled"`      // 不填false默认启用
    Urls         []string `json:"urls"`          // 服务器列表
    EventFilter  []int32  `json:"event_filter"`  // 事件过滤
    RegexFilter  string   `json:"regex_filter"`  // 正则过滤
    RegexReplace string   `json:"regex_replace"` // 正则替换
    // TODO 自定义 websocket header,x-self-id除外
}

image