summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-02-17 21:49:28 +0100
committerGitHub <noreply@github.com>2019-02-17 21:49:28 +0100
commit4525fa31aa6ea595c93994b05a3a042965249100 (patch)
tree93a167d0ca7db839a32356968019faae2d04e134
parentaeaea0574f491e61d90b2ce318c1ac26ddba2be1 (diff)
downloadmatterbridge-msglm-4525fa31aa6ea595c93994b05a3a042965249100.tar.gz
matterbridge-msglm-4525fa31aa6ea595c93994b05a3a042965249100.tar.bz2
matterbridge-msglm-4525fa31aa6ea595c93994b05a3a042965249100.zip
Allow regexs in ignoreNicks. Closes #690 (#720)
-rw-r--r--gateway/gateway.go54
-rw-r--r--gateway/gateway_test.go24
-rw-r--r--matterbridge.toml.sample12
3 files changed, 45 insertions, 45 deletions
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)
}
}
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index 77f5b51e..b3851a0e 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -102,6 +102,7 @@ ColorNicks=false
RunCommands=["PRIVMSG user hello","PRIVMSG chanserv something"]
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -196,6 +197,7 @@ SkipTLSVerify=true
## Settings below can be reloaded by editing the file
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -276,6 +278,7 @@ Nick="yourlogin"
## Settings below can be reloaded by editing the file
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="spammer1 spammer2"
@@ -416,6 +419,7 @@ EditDisable=false
EditSuffix=" (edited)"
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -491,6 +495,7 @@ Token="Yourtokenhere"
## Settings below can be reloaded by editing the file
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -609,6 +614,7 @@ EditSuffix=" (edited)"
PrefixMessagesWithNick=false
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -722,6 +728,7 @@ EditDisable=false
EditSuffix=" (edited)"
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -830,6 +837,7 @@ EditDisable=false
EditSuffix=" (edited)"
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="spammer1 spammer2"
@@ -945,6 +953,7 @@ SkipTLSVerify=true
PrefixMessagesWithNick=false
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="ircspammer1 ircspammer2"
@@ -1031,6 +1040,7 @@ NoHomeServerSuffix=false
PrefixMessagesWithNick=false
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="spammer1 spammer2"
@@ -1111,6 +1121,7 @@ Authcode="ABCE12"
PrefixMessagesWithNick=false
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="spammer1 spammer2"
@@ -1191,6 +1202,7 @@ Topic="matterbridge"
## Settings below can be reloaded by editing the file
#Nicks you want to ignore.
+#Regular expressions supported
#Messages from those users will not be sent to other bridges.
#OPTIONAL
IgnoreNicks="spammer1 spammer2"