Skip to content

Commit e3bbb58

Browse files
committed
json report
1 parent b6594a5 commit e3bbb58

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

pkg/bot/remote.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package bot
22

33
import (
4+
"bytes"
45
"math/rand"
56
"net/http"
67
"regexp"
@@ -13,6 +14,7 @@ import (
1314
"github.com/ProtobufBot/Go-Mirai-Client/proto_gen/onebot"
1415

1516
"github.com/Mrs4s/MiraiGo/client"
17+
"github.com/golang/protobuf/jsonpb"
1618
"github.com/golang/protobuf/proto"
1719
"github.com/gorilla/websocket"
1820
log "github.com/sirupsen/logrus"
@@ -22,6 +24,13 @@ import (
2224
var (
2325
// RemoteServers key是botId,value是map(key是serverName,value是server)
2426
RemoteServers RemoteMap
27+
jsonMarshaler = jsonpb.Marshaler{
28+
OrigName: true,
29+
EmitDefaults: true,
30+
}
31+
jsonUnmarshaler = jsonpb.Unmarshaler{
32+
AllowUnknownFields: true,
33+
}
2534
)
2635

2736
type WsServer struct {
@@ -114,11 +123,20 @@ func OnWsRecvMessage(cli *client.QQClient) func(ws *safe_ws.SafeWebSocket, messa
114123
return
115124
}
116125
var apiReq onebot.Frame
117-
err := proto.Unmarshal(data, &apiReq)
118-
if err != nil {
119-
log.Errorf("收到API buffer,解析错误 %v", err)
120-
return
126+
if messageType == websocket.BinaryMessage {
127+
err := proto.Unmarshal(data, &apiReq)
128+
if err != nil {
129+
log.Errorf("收到API binary,解析错误 %v", err)
130+
return
131+
}
132+
} else if messageType == websocket.TextMessage {
133+
err := jsonUnmarshaler.Unmarshal(bytes.NewReader(data), &apiReq)
134+
if err != nil {
135+
log.Errorf("收到API text,解析错误 %v", err)
136+
return
137+
}
121138
}
139+
122140
log.Debugf("收到 apiReq 信息, %+v", util.MustMarshal(apiReq))
123141

124142
apiResp := handleApiFrame(cli, &apiReq)
@@ -304,13 +322,24 @@ func HandleEventFrame(cli *client.QQClient, eventFrame *onebot.Frame) {
304322
}
305323

306324
if report {
307-
sendingBytes, err := eventFrame.Marshal() // 使用正则修改后的eventFrame
308-
if err != nil {
309-
log.Errorf("event 序列化错误 %v", err)
310-
continue
325+
if ws.Json {
326+
// 使用json上报
327+
sendingString, err := jsonMarshaler.MarshalToString(eventFrame)
328+
if err != nil {
329+
log.Errorf("event 序列化错误 %v", err)
330+
continue
331+
}
332+
_ = ws.Send(websocket.TextMessage, []byte(sendingString))
333+
} else {
334+
// 使用protobuf上报
335+
sendingBytes, err := eventFrame.Marshal() // 使用正则修改后的eventFrame
336+
if err != nil {
337+
log.Errorf("event 序列化错误 %v", err)
338+
continue
339+
}
340+
log.Debugf("上报 event 给 [%s](%s)", ws.Name, ws.wsUrl)
341+
_ = ws.Send(websocket.BinaryMessage, sendingBytes)
311342
}
312-
log.Debugf("上报 event 给 [%s](%s)", ws.Name, ws.wsUrl)
313-
_ = ws.Send(websocket.BinaryMessage, sendingBytes)
314343
}
315344
}
316345
}

pkg/config/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ var (
1818
{
1919
Name: "default",
2020
Disabled: false,
21+
Json: false,
2122
Urls: []string{"ws://localhost:8081/ws/cq/"},
2223
EventFilter: []int32{},
2324
RegexFilter: "",
@@ -40,6 +41,7 @@ type GmcConfig struct {
4041
type ServerGroup struct {
4142
Name string `json:"name"` // 功能名称
4243
Disabled bool `json:"disabled"` // 不填false默认启用
44+
Json bool `json:"json"` // json上报
4345
Urls []string `json:"urls"` // 服务器列表
4446
EventFilter []int32 `json:"event_filter"` // 事件过滤
4547
RegexFilter string `json:"regex_filter"` // 正则过滤

0 commit comments

Comments
 (0)