From a8fb763c8b43d0b04238db48649495f964737c97 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 10 Jan 2018 16:34:03 +0100 Subject: handle false regexps --- main.go | 13 ++++++++----- re.go | 13 ++++++++----- 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 } -- cgit v1.2.3