@@ -78,7 +78,7 @@ func ConnectUniversal(cli *client.QQClient) {
7878 }
7979 log .Infof ("连接Websocket服务器成功 [%s](%s)" , serverGroup .Name , serverUrl )
8080 closeChan := make (chan int , 1 )
81- safeWs := safe_ws .NewSafeWebSocket (conn , OnWsRecvMessage (cli ), func () {
81+ safeWs := safe_ws .NewSafeWebSocket (conn , OnWsRecvMessage (cli , & serverGroup ), func () {
8282 defer func () {
8383 _ = recover () // 可能多次触发
8484 }()
@@ -116,7 +116,18 @@ func ConnectUniversal(cli *client.QQClient) {
116116 }
117117}
118118
119- func OnWsRecvMessage (cli * client.QQClient ) func (ws * safe_ws.SafeWebSocket , messageType int , data []byte ) {
119+ func OnWsRecvMessage (cli * client.QQClient , plugin * config.Plugin ) func (ws * safe_ws.SafeWebSocket , messageType int , data []byte ) {
120+ apiFilter := map [onebot.Frame_FrameType ]bool {}
121+ for _ , apiType := range plugin .ApiFilter {
122+ apiFilter [onebot .Frame_FrameType (apiType )] = true
123+ }
124+ isApiAllow := func (frameType onebot.Frame_FrameType ) bool {
125+ if len (apiFilter ) == 0 {
126+ return true
127+ }
128+ return apiFilter [frameType ]
129+ }
130+
120131 return func (ws * safe_ws.SafeWebSocket , messageType int , data []byte ) {
121132 if ! IsClientExist (cli .Uin ) {
122133 ws .Close ()
@@ -147,7 +158,7 @@ func OnWsRecvMessage(cli *client.QQClient) func(ws *safe_ws.SafeWebSocket, messa
147158
148159 log .Debugf ("收到 apiReq 信息, %+v" , util .MustMarshal (apiReq ))
149160
150- apiResp := handleApiFrame (cli , & apiReq )
161+ apiResp := handleApiFrame (cli , & apiReq , isApiAllow )
151162 var (
152163 respBytes []byte
153164 err error
@@ -170,125 +181,194 @@ func OnWsRecvMessage(cli *client.QQClient) func(ws *safe_ws.SafeWebSocket, messa
170181 }
171182}
172183
173- func handleApiFrame (cli * client.QQClient , req * onebot.Frame ) * onebot.Frame {
174- var resp = & onebot.Frame {
184+ func handleApiFrame (cli * client.QQClient , req * onebot.Frame , isApiAllow func (onebot. Frame_FrameType ) bool ) ( resp * onebot.Frame ) {
185+ resp = & onebot.Frame {
175186 BotId : cli .Uin ,
176187 Echo : req .Echo ,
177188 Ok : true ,
178189 }
179190 switch data := req .Data .(type ) {
180191 case * onebot.Frame_SendPrivateMsgReq :
181192 resp .FrameType = onebot .Frame_TSendPrivateMsgResp
193+ if resp .Ok = isApiAllow (onebot .Frame_TSendPrivateMsgReq ); ! resp .Ok {
194+ return
195+ }
182196 resp .Data = & onebot.Frame_SendPrivateMsgResp {
183197 SendPrivateMsgResp : HandleSendPrivateMsg (cli , data .SendPrivateMsgReq ),
184198 }
185199 case * onebot.Frame_SendGroupMsgReq :
186200 resp .FrameType = onebot .Frame_TSendGroupMsgResp
201+ if resp .Ok = isApiAllow (onebot .Frame_TSendGroupMsgReq ); ! resp .Ok {
202+ return
203+ }
187204 resp .Data = & onebot.Frame_SendGroupMsgResp {
188205 SendGroupMsgResp : HandleSendGroupMsg (cli , data .SendGroupMsgReq ),
189206 }
190207 case * onebot.Frame_SendMsgReq :
191208 resp .FrameType = onebot .Frame_TSendMsgResp
209+ if resp .Ok = isApiAllow (onebot .Frame_TSendMsgReq ); ! resp .Ok {
210+ return
211+ }
192212 resp .Data = & onebot.Frame_SendMsgResp {
193213 SendMsgResp : HandleSendMsg (cli , data .SendMsgReq ),
194214 }
195215 case * onebot.Frame_DeleteMsgReq :
196216 resp .FrameType = onebot .Frame_TDeleteMsgResp
217+ if resp .Ok = isApiAllow (onebot .Frame_TDeleteMsgReq ); ! resp .Ok {
218+ return
219+ }
197220 resp .Data = & onebot.Frame_DeleteMsgResp {
198221 DeleteMsgResp : HandleDeleteMsg (cli , data .DeleteMsgReq ),
199222 }
200223 case * onebot.Frame_GetMsgReq :
201224 resp .FrameType = onebot .Frame_TGetMsgResp
225+ if resp .Ok = isApiAllow (onebot .Frame_TGetMsgReq ); ! resp .Ok {
226+ return
227+ }
202228 resp .Data = & onebot.Frame_GetMsgResp {
203229 GetMsgResp : HandleGetMsg (cli , data .GetMsgReq ),
204230 }
205231 case * onebot.Frame_SetGroupKickReq :
206232 resp .FrameType = onebot .Frame_TSetGroupKickResp
233+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupKickReq ); ! resp .Ok {
234+ return
235+ }
207236 resp .Data = & onebot.Frame_SetGroupKickResp {
208237 SetGroupKickResp : HandleSetGroupKick (cli , data .SetGroupKickReq ),
209238 }
210239 case * onebot.Frame_SetGroupBanReq :
211240 resp .FrameType = onebot .Frame_TSetGroupBanResp
241+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupBanReq ); ! resp .Ok {
242+ return
243+ }
212244 resp .Data = & onebot.Frame_SetGroupBanResp {
213245 SetGroupBanResp : HandleSetGroupBan (cli , data .SetGroupBanReq ),
214246 }
215247 case * onebot.Frame_SetGroupWholeBanReq :
216248 resp .FrameType = onebot .Frame_TSetGroupWholeBanResp
249+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupWholeBanReq ); ! resp .Ok {
250+ return
251+ }
217252 resp .Data = & onebot.Frame_SetGroupWholeBanResp {
218253 SetGroupWholeBanResp : HandleSetGroupWholeBan (cli , data .SetGroupWholeBanReq ),
219254 }
220255 case * onebot.Frame_SetGroupCardReq :
221256 resp .FrameType = onebot .Frame_TSetGroupCardResp
257+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupCardReq ); ! resp .Ok {
258+ return
259+ }
222260 resp .Data = & onebot.Frame_SetGroupCardResp {
223261 SetGroupCardResp : HandleSetGroupCard (cli , data .SetGroupCardReq ),
224262 }
225263 case * onebot.Frame_SetGroupNameReq :
226264 resp .FrameType = onebot .Frame_TSetGroupNameResp
265+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupNameReq ); ! resp .Ok {
266+ return
267+ }
227268 resp .Data = & onebot.Frame_SetGroupNameResp {
228269 SetGroupNameResp : HandleSetGroupName (cli , data .SetGroupNameReq ),
229270 }
230271 case * onebot.Frame_SetGroupLeaveReq :
231272 resp .FrameType = onebot .Frame_TSetGroupLeaveResp
273+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupLeaveReq ); ! resp .Ok {
274+ return
275+ }
232276 resp .Data = & onebot.Frame_SetGroupLeaveResp {
233277 SetGroupLeaveResp : HandleSetGroupLeave (cli , data .SetGroupLeaveReq ),
234278 }
235279 case * onebot.Frame_SetGroupSpecialTitleReq :
236280 resp .FrameType = onebot .Frame_TSetGroupSpecialTitleResp
281+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupSpecialTitleReq ); ! resp .Ok {
282+ return
283+ }
237284 resp .Data = & onebot.Frame_SetGroupSpecialTitleResp {
238285 SetGroupSpecialTitleResp : HandleSetGroupSpecialTitle (cli , data .SetGroupSpecialTitleReq ),
239286 }
240287 case * onebot.Frame_SetFriendAddRequestReq :
241288 resp .FrameType = onebot .Frame_TSetFriendAddRequestResp
289+ if resp .Ok = isApiAllow (onebot .Frame_TSetFriendAddRequestReq ); ! resp .Ok {
290+ return
291+ }
242292 resp .Data = & onebot.Frame_SetFriendAddRequestResp {
243293 SetFriendAddRequestResp : HandleSetFriendAddRequest (cli , data .SetFriendAddRequestReq ),
244294 }
245295 case * onebot.Frame_SetGroupAddRequestReq :
246296 resp .FrameType = onebot .Frame_TSetGroupAddRequestResp
297+ if resp .Ok = isApiAllow (onebot .Frame_TSetGroupAddRequestReq ); ! resp .Ok {
298+ return
299+ }
247300 resp .Data = & onebot.Frame_SetGroupAddRequestResp {
248301 SetGroupAddRequestResp : HandleSetGroupAddRequest (cli , data .SetGroupAddRequestReq ),
249302 }
250303 case * onebot.Frame_GetLoginInfoReq :
251304 resp .FrameType = onebot .Frame_TGetLoginInfoResp
305+ if resp .Ok = isApiAllow (onebot .Frame_TGetLoginInfoReq ); ! resp .Ok {
306+ return
307+ }
252308 resp .Data = & onebot.Frame_GetLoginInfoResp {
253309 GetLoginInfoResp : HandleGetLoginInfo (cli , data .GetLoginInfoReq ),
254310 }
255311 case * onebot.Frame_GetFriendListReq :
256312 resp .FrameType = onebot .Frame_TGetFriendListResp
313+ if resp .Ok = isApiAllow (onebot .Frame_TGetFriendListReq ); ! resp .Ok {
314+ return
315+ }
257316 resp .Data = & onebot.Frame_GetFriendListResp {
258317 GetFriendListResp : HandleGetFriendList (cli , data .GetFriendListReq ),
259318 }
260319 case * onebot.Frame_GetGroupInfoReq :
261320 resp .FrameType = onebot .Frame_TGetGroupInfoResp
321+ if resp .Ok = isApiAllow (onebot .Frame_TGetGroupInfoReq ); ! resp .Ok {
322+ return
323+ }
262324 resp .Data = & onebot.Frame_GetGroupInfoResp {
263325 GetGroupInfoResp : HandleGetGroupInfo (cli , data .GetGroupInfoReq ),
264326 }
265327 case * onebot.Frame_GetGroupListReq :
266328 resp .FrameType = onebot .Frame_TGetGroupListResp
329+ if resp .Ok = isApiAllow (onebot .Frame_TGetGroupListReq ); ! resp .Ok {
330+ return
331+ }
267332 resp .Data = & onebot.Frame_GetGroupListResp {
268333 GetGroupListResp : HandleGetGroupList (cli , data .GetGroupListReq ),
269334 }
270335 case * onebot.Frame_GetGroupMemberInfoReq :
271336 resp .FrameType = onebot .Frame_TGetGroupMemberInfoResp
337+ if resp .Ok = isApiAllow (onebot .Frame_TGetGroupMemberInfoReq ); ! resp .Ok {
338+ return
339+ }
272340 resp .Data = & onebot.Frame_GetGroupMemberInfoResp {
273341 GetGroupMemberInfoResp : HandleGetGroupMemberInfo (cli , data .GetGroupMemberInfoReq ),
274342 }
275343 case * onebot.Frame_GetGroupMemberListReq :
276344 resp .FrameType = onebot .Frame_TGetGroupMemberListResp
345+ if resp .Ok = isApiAllow (onebot .Frame_TGetGroupMemberListReq ); ! resp .Ok {
346+ return
347+ }
277348 resp .Data = & onebot.Frame_GetGroupMemberListResp {
278349 GetGroupMemberListResp : HandleGetGroupMemberList (cli , data .GetGroupMemberListReq ),
279350 }
280351 case * onebot.Frame_GetStrangerInfoReq :
281352 resp .FrameType = onebot .Frame_TGetStrangerInfoResp
353+ if resp .Ok = isApiAllow (onebot .Frame_TGetStrangerInfoReq ); ! resp .Ok {
354+ return
355+ }
282356 resp .Data = & onebot.Frame_GetStrangerInfoResp {
283357 GetStrangerInfoResp : HandleGetStrangerInfo (cli , data .GetStrangerInfoReq ),
284358 }
285359 case * onebot.Frame_GetCookiesReq :
286360 resp .FrameType = onebot .Frame_TGetCookiesResp
361+ if resp .Ok = isApiAllow (onebot .Frame_TGetCookiesReq ); ! resp .Ok {
362+ return
363+ }
287364 resp .Data = & onebot.Frame_GetCookiesResp {
288365 GetCookiesResp : HandleGetCookies (cli , data .GetCookiesReq ),
289366 }
290367 case * onebot.Frame_GetCsrfTokenReq :
291368 resp .FrameType = onebot .Frame_TGetCsrfTokenResp
369+ if resp .Ok = isApiAllow (onebot .Frame_TGetCsrfTokenReq ); ! resp .Ok {
370+ return
371+ }
292372 resp .Data = & onebot.Frame_GetCsrfTokenResp {
293373 GetCsrfTokenResp : HandleGetCSRFToken (cli , data .GetCsrfTokenReq ),
294374 }
0 commit comments