From 0ec91c9e8ff3fbaee57816f431a48ccd87c1cdb2 Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Sat, 7 Mar 2026 11:41:07 +0000 Subject: [PATCH 1/3] init files --- filter/filter.go | 2 ++ filter/go.mod | 3 +++ 2 files changed, 5 insertions(+) create mode 100644 filter/filter.go create mode 100644 filter/go.mod diff --git a/filter/filter.go b/filter/filter.go new file mode 100644 index 0000000..fa1de4f --- /dev/null +++ b/filter/filter.go @@ -0,0 +1,2 @@ +package filter + diff --git a/filter/go.mod b/filter/go.mod new file mode 100644 index 0000000..0edacf0 --- /dev/null +++ b/filter/go.mod @@ -0,0 +1,3 @@ +module git.catgirls.asia/B4D_US3R/kiki/filter + +go 1.22.2 From 95c95031d8090ac5ef1a0003fff68e9f7f2f2a0f Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Sat, 7 Mar 2026 11:49:55 +0000 Subject: [PATCH 2/3] Add function --- filter/filter.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/filter/filter.go b/filter/filter.go index fa1de4f..ed8488c 100644 --- a/filter/filter.go +++ b/filter/filter.go @@ -1,2 +1,14 @@ package filter +import "strings" + +// Функция, проверяющая что запрещенные слова отсутсвуют в текста +// Возвращает true если слова есть в тексте, возвращает false если их нет +func isWordsInText(text string, words []string) bool { + for _, v := range words { + if strings.ContainsAny(text, v) { + return true + } + } + return false +} From 3b0b688843a44a2c78b5f6dda858e0f5d67accfd Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Sat, 7 Mar 2026 13:47:20 +0000 Subject: [PATCH 3/3] feat: add content filtering functionality - Introduce kikifilter package with IsWordsInText() function for word filtering - Add FiltredWorlds configuration option to KikiSettings - Integrate filtering into service to prevent posting filtered content - Update Dockerfile and Makefile to include filter package - Add example configuration with filtered words --- Dockerfile | 3 ++- Makefile | 4 +++- config/config.go | 1 + filter/filter.go | 13 +++++++++---- filter/go.mod | 2 +- service/go.mod | 5 ++++- service/kiki.go | 18 ++++++++++++------ 7 files changed, 32 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 777570e..5935d93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,12 +4,13 @@ RUN apk add --no-cache make WORKDIR /app/kiki -RUN mkdir /app/kiki/config /app/kiki/service /app/kiki/stacker /app/kiki/tooter /app/kiki/file_watcher +RUN mkdir /app/kiki/config /app/kiki/service /app/kiki/stacker /app/kiki/tooter /app/kiki/file_watcher /app/kiki/filter COPY config/* /app/kiki/config COPY service/* /app/kiki/service COPY stacker/* /app/kiki/stacker COPY tooter/* /app/kiki/tooter +COPY filter/* /app/kiki/filter COPY file_watcher/* /app/kiki/file_watcher COPY Makefile /app/kiki/ diff --git a/Makefile b/Makefile index df22fcc..eba97a6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -kiki : tooter/go.sum config/go.sum stacker/go.sum service/go.sum service/kiki +kiki : tooter/go.sum config/go.sum stacker/go.sum service/go.sum service/kiki mv service/kiki kiki tooter/go.sum : tooter/go.mod @@ -9,7 +9,9 @@ stacker/go.sum : stacker/go.mod cd stacker && go mod tidy && cd ../ service/go.sum : service/go.mod cd service && go mod tidy && cd ../ + service/kiki : service/kiki.go go build -C service + clean : rm kiki tooter/go.sum config/go.sum stacker/go.sum service/go.sum \ No newline at end of file diff --git a/config/config.go b/config/config.go index 4d5e72b..b412e0c 100644 --- a/config/config.go +++ b/config/config.go @@ -19,6 +19,7 @@ type KikiSettings struct { Redis struct { Address string `yaml:"address"` } `yaml:"redis"` + FiltredWorlds []string `yaml:"filtred_worlds,flow"` } // Структура secret.conf diff --git a/filter/filter.go b/filter/filter.go index ed8488c..1a7db55 100644 --- a/filter/filter.go +++ b/filter/filter.go @@ -1,12 +1,17 @@ -package filter +package kikifilter -import "strings" +import ( + "fmt" + "strings" +) // Функция, проверяющая что запрещенные слова отсутсвуют в текста // Возвращает true если слова есть в тексте, возвращает false если их нет -func isWordsInText(text string, words []string) bool { +func IsWordsInText(text string, words []string) bool { + fmt.Println(words) for _, v := range words { - if strings.ContainsAny(text, v) { + if strings.Contains(text, v) { + fmt.Println(strings.Contains(text, v)) return true } } diff --git a/filter/go.mod b/filter/go.mod index 0edacf0..1979dc4 100644 --- a/filter/go.mod +++ b/filter/go.mod @@ -1,3 +1,3 @@ -module git.catgirls.asia/B4D_US3R/kiki/filter +module kiki/kikifilter go 1.22.2 diff --git a/service/go.mod b/service/go.mod index 9475995..9b6c594 100644 --- a/service/go.mod +++ b/service/go.mod @@ -8,13 +8,16 @@ replace kiki/stacker => ../stacker replace kiki/tooter => ../tooter -replace kiki/file_watcher => ../file_watcher/ +replace kiki/file_watcher => ../file_watcher + +replace kiki/kikifilter => ../filter require ( github.com/mattn/go-mastodon v0.0.9 github.com/urfave/cli/v3 v3.2.0 kiki/config v0.0.0-00010101000000-000000000000 kiki/file_watcher v0.0.0-00010101000000-000000000000 + kiki/kikifilter v0.0.0-00010101000000-000000000000 kiki/stacker v0.0.0-00010101000000-000000000000 kiki/tooter v0.0.0-00010101000000-000000000000 ) diff --git a/service/kiki.go b/service/kiki.go index e1d4ed1..3577412 100644 --- a/service/kiki.go +++ b/service/kiki.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" "log" "net/url" "os" @@ -11,6 +12,7 @@ import ( "kiki/config" "kiki/file_watcher" + "kiki/kikifilter" "kiki/stacker" "kiki/tooter" @@ -56,6 +58,7 @@ func main() { log.Println(err) } kikiConfig := config.GetKikiConfig(confFile) + fmt.Println(kikiConfig.FiltredWorlds) lastFileMod, err := file_watcher.GetFileModTime(confFile) log.Println(lastFileMod) @@ -88,15 +91,18 @@ func main() { } if !inStack { + log.Println(post.Description) - toot, err := tooter.CreateToot(*mastoClient, post, rssUrl.Sensitive, rssUrl.Visibility) - if err != nil { - log.Println(err) + if !kikifilter.IsWordsInText(post.Description, kikiConfig.FiltredWorlds) { + + toot, err := tooter.CreateToot(*mastoClient, post, rssUrl.Sensitive, rssUrl.Visibility) + if err != nil { + log.Println(err) + } + + tooter.CreatePost(*mastoClient, toot) } - - tooter.CreatePost(*mastoClient, toot) - stacker.SetToRedis(rdb, post.GUID, post.Description) } }