From 07b041fc260a010afa5ef65480becd8dedbba7a1 Mon Sep 17 00:00:00 2001 From: Ted Unangst Date: Fri, 4 Oct 2019 21:57:53 -0400 Subject: [PATCH] some more bits of hfcs --- fun.go | 3 +-- hfcs.go | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/fun.go b/fun.go index 19acb39..9f303c1 100644 --- a/fun.go +++ b/fun.go @@ -35,7 +35,6 @@ import ( func reverbolate(userid int64, honks []*Honk) { filt := htfilter.New() filt.Imager = replaceimg - zilences := getfilters(userid, filtCollapse) for _, h := range honks { h.What += "ed" if h.What == "tonked" { @@ -76,7 +75,7 @@ func reverbolate(userid int64, honks []*Honk) { h.Open = "" } } else { - if badword := unsee(zilences, h); badword != "" { + if badword := unsee(userid, h); badword != "" { if h.Precis == "" { h.Precis = badword } diff --git a/hfcs.go b/hfcs.go index 1545bd9..30154e5 100644 --- a/hfcs.go +++ b/hfcs.go @@ -26,6 +26,7 @@ type Filter struct { Actor string IncludeAudience bool Text string + re_text *regexp.Regexp IsAnnounce bool Reject bool SkipMedia bool @@ -77,6 +78,13 @@ var filtcache = cacheNew(func(userid int64) (afiltermap, bool) { log.Printf("error scanning filter: %s", err) continue } + if filt.Text != "" { + filt.re_text, err = regexp.Compile("\\b(?i:" + filt.Text + ")\\b") + if err != nil { + log.Printf("error compiling filter text: %s", err) + continue + } + } filt.ID = filterid if filt.Reject { filtmap[filtReject] = append(filtmap[filtReject], filt) @@ -169,9 +177,15 @@ func matchfilter(h *Honk, f *Filter) bool { } if match && f.Text != "" { match = false - for _, d := range h.Donks { - if d.Desc == f.Text { - match = true + re := f.re_text + if re.MatchString(h.Noise) || re.MatchString(h.Precis) { + match = true + } + if !match { + for _, d := range h.Donks { + if re.MatchString(d.Desc) { + match = true + } } } } @@ -202,7 +216,13 @@ func skipMedia(xonk *Honk) bool { } // todo -func unsee(filts []*Filter, h *Honk) string { +func unsee(userid int64, h *Honk) string { + filts := getfilters(userid, filtCollapse) + for _, f := range filts { + if matchfilter(h, f) { + return f.Text + } + } return "" }