summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-01-10 16:34:03 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-01-10 16:34:03 +0100
commita8fb763c8b43d0b04238db48649495f964737c97 (patch)
tree7c31950fa1164f4a1bbcc3b6abafc297a23aa8a9
parenta19cef3a067381ff3b38de722411d618ea87500c (diff)
handle false regexps
-rw-r--r--main.go13
-rw-r--r--re.go13
2 files changed, 16 insertions, 10 deletions
diff --git a/main.go b/main.go
index 09a2d92..41b124c 100644
--- a/main.go
+++ b/main.go
@@ -46,7 +46,8 @@ func privmsg(room string) irc.HandlerFunc {
log.Println("panic", r)
}
}()
- switch t := line.Text(); {
+ t := line.Text()
+ switch {
case line.Nick == conn.Me().Nick:
// ignore self
case isFlood(t):
@@ -58,15 +59,17 @@ func privmsg(room string) irc.HandlerFunc {
case t == lastRe[line.Nick]:
log.Println("ignore", t)
case strings.HasPrefix(t, "s"):
- log.Println("regexp", t)
global := strings.HasSuffix(t, "g")
if tofix, ok := last[line.Nick]; ok {
- fixed := re(tofix, t[1:], global)
- if fixed != "" && fixed != tofix {
+ fixed, err := re(tofix, t[1:], global)
+ if err == nil && fixed != tofix {
+ log.Println("regexp", t)
fmt.Fprintf(NewNotify(conn, line.Target()), "%v meant to say: %s", line.Nick, fixed)
+ lastRe[line.Nick] = t
+ return
}
}
- lastRe[line.Nick] = t
+ fallthrough
default:
for _, v := range getLinks(t) {
title, err := getTitle(v)
diff --git a/re.go b/re.go
index d2461ab..4d3fa48 100644
--- a/re.go
+++ b/re.go
@@ -1,23 +1,26 @@
package main
import (
+ "errors"
"regexp"
"strings"
)
-func re(s, r string, global bool) string {
+var ErrNotRE = errors.New("not re")
+
+func re(s, r string, global bool) (string, error) {
// min: at least two separators
if len(r) < 2 {
- return ""
+ return "", ErrNotRE
}
z := strings.Split(r[1:], string(r[0]))
// match // and ///
if len(z) < 2 || len(z) > 3 {
- return ""
+ return "", ErrNotRE
}
re, err := regexp.Compile(z[0])
if err != nil {
- return ""
+ return "", err
}
i := 1
if global {
@@ -29,5 +32,5 @@ func re(s, r string, global bool) string {
return z[1]
}
return b
- })
+ }), nil
}