Skip to content

Commit d214f79

Browse files
committed
api filter
1 parent 0d417c3 commit d214f79

File tree

5 files changed

+91
-9
lines changed

5 files changed

+91
-9
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/ProtobufBot/Go-Mirai-Client
33
go 1.17
44

55
require (
6-
github.com/Mrs4s/MiraiGo v0.0.0-20211217155030-6b5ba9f9c4ac
6+
github.com/Mrs4s/MiraiGo v0.0.0-20211218073652-950567e4b77a
77
github.com/fanliao/go-promise v0.0.0-20141029170127-1890db352a72
88
github.com/gin-gonic/gin v1.7.2
99
github.com/go-playground/validator/v10 v10.8.0 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/Mrs4s/MiraiGo v0.0.0-20211217155030-6b5ba9f9c4ac h1:fhUcbWq/pNjXk8duAYJXJNSWJisBWPpJ201wigNc80s=
2-
github.com/Mrs4s/MiraiGo v0.0.0-20211217155030-6b5ba9f9c4ac/go.mod h1:HI05ardsa5HE1Z2xTw69dytmaqqRWv4ajD5Jpnycqqw=
1+
github.com/Mrs4s/MiraiGo v0.0.0-20211218073652-950567e4b77a h1:luE4izN3BxycpMafSBY0HQHw66isocQCpIWyEBehb14=
2+
github.com/Mrs4s/MiraiGo v0.0.0-20211218073652-950567e4b77a/go.mod h1:HI05ardsa5HE1Z2xTw69dytmaqqRWv4ajD5Jpnycqqw=
33
github.com/RomiChan/protobuf v0.0.0-20211204042931-ff4f35848737 h1:p4o7/eSoP39jwnGZz08N1IpH/mNzg9SdCn7kPM9A9BE=
44
github.com/RomiChan/protobuf v0.0.0-20211204042931-ff4f35848737/go.mod h1:CKKOWC7mBxd36zxsCB1V8DTrwlTNRQvkSVbYqyUiGEE=
55
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

pkg/bot/remote.go

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

pkg/config/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func init() {
1717
Json: false,
1818
Urls: []string{"ws://localhost:8081/ws/cq/"},
1919
EventFilter: []int32{},
20+
ApiFilter: []int32{},
2021
RegexFilter: "",
2122
RegexReplace: "",
2223
ExtraHeader: map[string][]string{
@@ -38,6 +39,7 @@ type Plugin struct {
3839
Json bool `json:"json"` // json上报
3940
Urls []string `json:"urls"` // 服务器列表
4041
EventFilter []int32 `json:"event_filter"` // 事件过滤
42+
ApiFilter []int32 `json:"api_filter"` // API过滤
4143
RegexFilter string `json:"regex_filter"` // 正则过滤
4244
RegexReplace string `json:"regex_replace"` // 正则替换
4345
ExtraHeader map[string][]string `json:"extra_header"` // 自定义请求头

pkg/device/device.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func RandDevice(randGen *rand.Rand) *client.DeviceInfo {
4646
Incremental: []byte("5891938"),
4747
Release: []byte("10"),
4848
CodeName: []byte("REL"),
49-
Sdk: 29,
49+
SDK: 29,
5050
},
5151
}
5252
device.WifiBSSID = device.MacAddress

0 commit comments

Comments
 (0)