48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"regexp"
|
||
|
"sync"
|
||
|
|
||
|
"git.kirsle.net/apps/barertc/pkg/log"
|
||
|
)
|
||
|
|
||
|
// MessageFilter configures censored or auto-flagged messages in chat.
|
||
|
type MessageFilter struct {
|
||
|
Enabled bool
|
||
|
PublicChannels bool
|
||
|
PrivateChannels bool
|
||
|
KeywordPhrases []string
|
||
|
CensorMessage bool
|
||
|
ForwardMessage bool
|
||
|
ReportMessage bool
|
||
|
ChatServerResponse string
|
||
|
|
||
|
// Private use variables.
|
||
|
isRegexpCompiled bool
|
||
|
regexps []*regexp.Regexp
|
||
|
regexpMu sync.Mutex
|
||
|
}
|
||
|
|
||
|
// IterPhrases returns the keyword phrases as regular expressions.
|
||
|
func (mf *MessageFilter) IterPhrases() []*regexp.Regexp {
|
||
|
if mf.isRegexpCompiled {
|
||
|
return mf.regexps
|
||
|
}
|
||
|
|
||
|
// Compile and return the regexps.
|
||
|
mf.regexpMu.Lock()
|
||
|
defer mf.regexpMu.Unlock()
|
||
|
mf.regexps = []*regexp.Regexp{}
|
||
|
for _, phrase := range mf.KeywordPhrases {
|
||
|
re, err := regexp.Compile(phrase)
|
||
|
if err != nil {
|
||
|
log.Error("MessageFilter: phrase '%s' did not compile as a regexp: %s", phrase, err)
|
||
|
continue
|
||
|
}
|
||
|
mf.regexps = append(mf.regexps, re)
|
||
|
}
|
||
|
|
||
|
return mf.regexps
|
||
|
}
|