Skip to content

Commit 7318c07

Browse files
committed
regex filter
1 parent 11bbcec commit 7318c07

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

config/config.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ var (
1212
Port: "9000",
1313
ServerGroups: []*ServerGroup{
1414
{
15-
Name: "default",
16-
Disabled: false,
17-
Urls: []string{"ws://localhost:8081/ws/cq/"},
18-
EventFilter: []int32{},
19-
PrefixFilter: []string{},
15+
Name: "default",
16+
Disabled: false,
17+
Urls: []string{"ws://localhost:8081/ws/cq/"},
18+
EventFilter: []int32{},
19+
RegexFilter: "",
2020
},
2121
},
2222
}
@@ -29,11 +29,11 @@ type GmcConfig struct {
2929
}
3030

3131
type ServerGroup struct {
32-
Name string `json:"name"` // 功能名称
33-
Disabled bool `json:"disabled"` // 不填false默认启用
34-
Urls []string `json:"urls"` // 服务器列表
35-
EventFilter []int32 `json:"event_filter"` // 事件过滤
36-
PrefixFilter []string `json:"prefix_filter"` // 前缀过滤
32+
Name string `json:"name"` // 功能名称
33+
Disabled bool `json:"disabled"` // 不填false默认启用
34+
Urls []string `json:"urls"` // 服务器列表
35+
EventFilter []int32 `json:"event_filter"` // 事件过滤
36+
RegexFilter string `json:"regex_filter"` // 正则过滤
3737
// TODO event filter, msg filter, regex filter, prefix filter, suffix filter
3838
}
3939

service/bot/remote.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package bot
33
import (
44
"math/rand"
55
"net/http"
6+
"regexp"
67
"strconv"
7-
"strings"
88
"time"
99

1010
"github.com/Mrs4s/MiraiGo/client"
@@ -25,6 +25,7 @@ type WsServer struct {
2525
*safe_ws.SafeWebSocket // 线程安全的ws
2626
*config.ServerGroup // 服务器组配置
2727
wsUrl string // 随机抽中的url
28+
regexp *regexp.Regexp
2829
}
2930

3031
func ConnectUniversal(cli *client.QQClient) {
@@ -60,6 +61,14 @@ func ConnectUniversal(cli *client.QQClient) {
6061
SafeWebSocket: safeWs,
6162
ServerGroup: &serverGroup,
6263
wsUrl: serverUrl,
64+
regexp: nil,
65+
}
66+
if serverGroup.RegexFilter != "" {
67+
if regex, err := regexp.Compile(serverGroup.RegexFilter); err != nil {
68+
log.Errorf("failed to compile [%s], regex_filter: %s", serverGroup.Name, serverGroup.RegexFilter)
69+
} else {
70+
WsServers[serverGroup.Name].regexp = regex
71+
}
6372
}
6473
util.SafeGo(func() {
6574
for {
@@ -221,11 +230,6 @@ func handleApiFrame(cli *client.QQClient, req *onebot.Frame) *onebot.Frame {
221230
func HandleEventFrame(cli *client.QQClient, eventFrame *onebot.Frame) {
222231
eventFrame.Ok = true
223232
eventFrame.BotId = cli.Uin
224-
eventBytes, err := eventFrame.Marshal()
225-
if err != nil {
226-
log.Errorf("event 序列化错误 %v", err)
227-
return
228-
}
229233

230234
for _, ws := range WsServers {
231235
if ws.EventFilter != nil && len(ws.EventFilter) > 0 { // 有event filter
@@ -237,30 +241,31 @@ func HandleEventFrame(cli *client.QQClient, eventFrame *onebot.Frame) {
237241

238242
report := true // 是否上报event
239243

240-
if ws.PrefixFilter != nil && len(ws.PrefixFilter) > 0 { // 有prefix filter
244+
if ws.regexp != nil { // 有prefix filter
241245
if e, ok := eventFrame.Data.(*onebot.Frame_PrivateMessageEvent); ok {
242-
reportMessage := false
243-
for _, prefix := range ws.PrefixFilter {
244-
if strings.HasPrefix(e.PrivateMessageEvent.RawMessage, prefix) {
245-
reportMessage = true
246-
break
247-
}
246+
b := ws.regexp.Find([]byte(e.PrivateMessageEvent.RawMessage))
247+
if b == nil {
248+
report = false
249+
} else {
250+
e.PrivateMessageEvent.RawMessage = string(b)
248251
}
249-
report = report && reportMessage
250252
}
251253
if e, ok := eventFrame.Data.(*onebot.Frame_GroupMessageEvent); ok {
252-
reportMessage := false
253-
for _, prefix := range ws.PrefixFilter {
254-
if strings.HasPrefix(e.GroupMessageEvent.RawMessage, prefix) {
255-
reportMessage = true
256-
break
257-
}
254+
b := ws.regexp.Find([]byte(e.GroupMessageEvent.RawMessage))
255+
if b == nil {
256+
report = false
257+
} else {
258+
e.GroupMessageEvent.RawMessage = string(b)
258259
}
259-
report = report && reportMessage
260260
}
261261
}
262262

263263
if report {
264+
eventBytes, err := eventFrame.Marshal()
265+
if err != nil {
266+
log.Errorf("event 序列化错误 %v", err)
267+
return
268+
}
264269
log.Debugf("上报 event 给 [%s](%s)", ws.Name, ws.wsUrl)
265270
_ = ws.Send(websocket.BinaryMessage, eventBytes)
266271
}

0 commit comments

Comments
 (0)