Joyit 1 сар өмнө
parent
commit
da79cc48eb
1 өөрчлөгдсөн 20 нэмэгдсэн , 7 устгасан
  1. 20 7
      filter.go

+ 20 - 7
filter.go

@@ -30,6 +30,18 @@ func StrChannelFilter(channel string) FilterFunc {
 	}
 }
 
+// 字符串包含支名称的频道过滤器
+// 为了避免重复匹配,将频道值截断再匹配支名称
+func StrChannelSubFilter(channel string, substr string) FilterFunc {
+	return func(conn *Line) (ok bool) {
+		index := strings.Index(conn.channel, channel)
+		if index < 0 {
+			return false
+		}
+		return strings.Contains(conn.channel[index+len(channel):], substr)
+	}
+}
+
 // 开始字符串频道过滤器
 func StrPrefixFilter(channel string) FilterFunc {
 	return func(conn *Line) (ok bool) {
@@ -37,18 +49,19 @@ func StrPrefixFilter(channel string) FilterFunc {
 	}
 }
 
-// 包括名称的频道过滤器
-func NamePrefixFilter(name string, channel string) FilterFunc {
-	c := name + "@" + channel
+// 开始字符串包含支名称的频道过滤器
+// 为了避免重复匹配,将频道值截断再匹配支名称
+func StrPrefixSubFilter(channel string, substr string) FilterFunc {
 	return func(conn *Line) (ok bool) {
-		return strings.HasPrefix(conn.channel, c)
+		return strings.HasPrefix(conn.channel, channel) && strings.Contains(conn.channel[len(channel):], substr)
 	}
 }
 
-// 包含支名称的频道过滤器
-func StrPrefixSubFilter(channel string, substr string) FilterFunc {
+// 包括名称的频道过滤器
+func NamePrefixFilter(name string, channel string) FilterFunc {
+	c := name + "@" + channel
 	return func(conn *Line) (ok bool) {
-		return strings.HasPrefix(conn.channel, channel) && strings.Contains(conn.channel, substr)
+		return strings.HasPrefix(conn.channel, c)
 	}
 }