@@ -230,15 +230,27 @@ func handleApiFrame(cli *client.QQClient, req *onebot.Frame) *onebot.Frame {
230230func HandleEventFrame (cli * client.QQClient , eventFrame * onebot.Frame ) {
231231 eventFrame .Ok = true
232232 eventFrame .BotId = cli .Uin
233+ eventBytes , err := eventFrame .Marshal () // 原消息
234+ if err != nil {
235+ log .Errorf ("event 序列化错误 %v" , err )
236+ return
237+ }
233238
234239 for _ , ws := range WsServers {
240+
235241 if ws .EventFilter != nil && len (ws .EventFilter ) > 0 { // 有event filter
236242 if ! int32SliceContains (ws .EventFilter , int32 (eventFrame .FrameType )) {
237243 log .Debugf ("EventFilter 跳过 [%s](%s)" , ws .Name , ws .wsUrl )
238244 continue
239245 }
240246 }
241247
248+ err := proto .Unmarshal (eventBytes , eventFrame ) // 每个serverGroup, eventFrame 恢复原消息,防止因正则匹配互相影响
249+ if err != nil {
250+ log .Errorf ("failed to unmarshal raw event frame, %+v" , err )
251+ return
252+ }
253+
242254 report := true // 是否上报event
243255
244256 if ws .regexp != nil { // 有prefix filter
@@ -261,13 +273,13 @@ func HandleEventFrame(cli *client.QQClient, eventFrame *onebot.Frame) {
261273 }
262274
263275 if report {
264- eventBytes , err := eventFrame .Marshal ()
276+ sendingBytes , err := eventFrame .Marshal () // 使用正则修改后的eventFrame
265277 if err != nil {
266278 log .Errorf ("event 序列化错误 %v" , err )
267- return
279+ continue
268280 }
269281 log .Debugf ("上报 event 给 [%s](%s)" , ws .Name , ws .wsUrl )
270- _ = ws .Send (websocket .BinaryMessage , eventBytes )
282+ _ = ws .Send (websocket .BinaryMessage , sendingBytes )
271283 }
272284 }
273285}
0 commit comments