github.com/Mrs4s/go-cqhttp@v1.2.0/modules/filter/middlewares.go (about) 1 package filter 2 3 import ( 4 "os" 5 "sync" 6 7 "github.com/sirupsen/logrus" 8 "github.com/tidwall/gjson" 9 ) 10 11 var ( 12 filters = make(map[string]Filter) 13 filterMutex sync.RWMutex 14 ) 15 16 // Add adds a filter to the list of filters 17 func Add(file string) { 18 if file == "" { 19 return 20 } 21 bs, err := os.ReadFile(file) 22 if err != nil { 23 logrus.Error("init filter error: ", err) 24 return 25 } 26 defer func() { 27 if err := recover(); err != nil { 28 logrus.Error("init filter error: ", err) 29 } 30 }() 31 filter := Generate("and", gjson.ParseBytes(bs)) 32 filterMutex.Lock() 33 filters[file] = filter 34 filterMutex.Unlock() 35 } 36 37 // Find returns the filter for the given file 38 func Find(file string) Filter { 39 if file == "" { 40 return nil 41 } 42 filterMutex.RLock() 43 defer filterMutex.RUnlock() 44 return filters[file] 45 }