11package bot
22
33import (
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 (
2224var (
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
2736type 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}
0 commit comments