From 4525fa31aa6ea595c93994b05a3a042965249100 Mon Sep 17 00:00:00 2001 From: Wim Date: Sun, 17 Feb 2019 21:49:28 +0100 Subject: Allow regexs in ignoreNicks. Closes #690 (#720) --- gateway/gateway.go | 54 +++++++++++++++++++------------------------------ gateway/gateway_test.go | 24 +++++++++++----------- 2 files changed, 33 insertions(+), 45 deletions(-) (limited to 'gateway') diff --git a/gateway/gateway.go b/gateway/gateway.go index 72d0831b..6ac0abe5 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -237,38 +237,6 @@ func (gw *Gateway) ignoreTextEmpty(msg *config.Message) bool { return true } -// ignoreTexts returns true if msg.Text matches any of the input regexes. -func (gw *Gateway) ignoreTexts(msg *config.Message, input []string) bool { - for _, entry := range input { - if entry == "" { - continue - } - // TODO do not compile regexps everytime - re, err := regexp.Compile(entry) - if err != nil { - flog.Errorf("incorrect regexp %s for %s", entry, msg.Account) - continue - } - if re.MatchString(msg.Text) { - flog.Debugf("matching %s. ignoring %s from %s", entry, msg.Text, msg.Account) - return true - } - } - return false -} - -// ignoreNicks returns true if msg.Username matches any of the input regexes. -func (gw *Gateway) ignoreNicks(msg *config.Message, input []string) bool { - // is the username in IgnoreNicks field - for _, entry := range input { - if msg.Username == entry { - flog.Debugf("ignoring %s from %s", msg.Username, msg.Account) - return true - } - } - return false -} - func (gw *Gateway) ignoreMessage(msg *config.Message) bool { // if we don't have the bridge, ignore it if _, ok := gw.Bridges[msg.Account]; !ok { @@ -277,7 +245,7 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool { igNicks := strings.Fields(gw.Bridges[msg.Account].GetString("IgnoreNicks")) igMessages := strings.Fields(gw.Bridges[msg.Account].GetString("IgnoreMessages")) - if gw.ignoreTextEmpty(msg) || gw.ignoreNicks(msg, igNicks) || gw.ignoreTexts(msg, igMessages) { + if gw.ignoreTextEmpty(msg) || gw.ignoreText(msg.Username, igNicks) || gw.ignoreText(msg.Text, igMessages) { return true } @@ -435,3 +403,23 @@ func getChannelID(msg config.Message) string { func isAPI(account string) bool { return strings.HasPrefix(account, "api.") } + +// ignoreText returns true if text matches any of the input regexes. +func (gw *Gateway) ignoreText(text string, input []string) bool { + for _, entry := range input { + if entry == "" { + continue + } + // TODO do not compile regexps everytime + re, err := regexp.Compile(entry) + if err != nil { + flog.Errorf("incorrect regexp %s", entry) + continue + } + if re.MatchString(text) { + flog.Debugf("matching %s. ignoring %s", entry, text) + return true + } + } + return false +} diff --git a/gateway/gateway_test.go b/gateway/gateway_test.go index cd78fe99..9621ab7d 100644 --- a/gateway/gateway_test.go +++ b/gateway/gateway_test.go @@ -434,68 +434,68 @@ func TestIgnoreTextEmpty(t *testing.T) { func TestIgnoreTexts(t *testing.T) { msgTests := map[string]struct { - input *config.Message + input string re []string output bool }{ "no regex": { - input: &config.Message{Text: "a text message"}, + input: "a text message", re: []string{}, output: false, }, "simple regex": { - input: &config.Message{Text: "a text message"}, + input: "a text message", re: []string{"text"}, output: true, }, "multiple regex fail": { - input: &config.Message{Text: "a text message"}, + input: "a text message", re: []string{"abc", "123$"}, output: false, }, "multiple regex pass": { - input: &config.Message{Text: "a text message"}, + input: "a text message", re: []string{"lala", "sage$"}, output: true, }, } gw := &Gateway{} for testname, testcase := range msgTests { - output := gw.ignoreTexts(testcase.input, testcase.re) + output := gw.ignoreText(testcase.input, testcase.re) assert.Equalf(t, testcase.output, output, "case '%s' failed", testname) } } func TestIgnoreNicks(t *testing.T) { msgTests := map[string]struct { - input *config.Message + input string re []string output bool }{ "no entry": { - input: &config.Message{Username: "user", Text: "a text message"}, + input: "user", re: []string{}, output: false, }, "one entry": { - input: &config.Message{Username: "user", Text: "a text message"}, + input: "user", re: []string{"user"}, output: true, }, "multiple entries": { - input: &config.Message{Username: "user", Text: "a text message"}, + input: "user", re: []string{"abc", "user"}, output: true, }, "multiple entries fail": { - input: &config.Message{Username: "user", Text: "a text message"}, + input: "user", re: []string{"abc", "def"}, output: false, }, } gw := &Gateway{} for testname, testcase := range msgTests { - output := gw.ignoreNicks(testcase.input, testcase.re) + output := gw.ignoreText(testcase.input, testcase.re) assert.Equalf(t, testcase.output, output, "case '%s' failed", testname) } } -- cgit v1.2.3