Compare commits

...
Sign in to create a new pull request.

3 commits

Author SHA1 Message Date
3b0b688843 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
2026-03-07 13:47:20 +00:00
95c95031d8 Add function 2026-03-07 11:49:55 +00:00
0ec91c9e8f init files 2026-03-07 11:41:07 +00:00
7 changed files with 44 additions and 9 deletions

View file

@ -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/

View file

@ -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

View file

@ -19,6 +19,7 @@ type KikiSettings struct {
Redis struct {
Address string `yaml:"address"`
} `yaml:"redis"`
FiltredWorlds []string `yaml:"filtred_worlds,flow"`
}
// Структура secret.conf

19
filter/filter.go Normal file
View file

@ -0,0 +1,19 @@
package kikifilter
import (
"fmt"
"strings"
)
// Функция, проверяющая что запрещенные слова отсутсвуют в текста
// Возвращает true если слова есть в тексте, возвращает false если их нет
func IsWordsInText(text string, words []string) bool {
fmt.Println(words)
for _, v := range words {
if strings.Contains(text, v) {
fmt.Println(strings.Contains(text, v))
return true
}
}
return false
}

3
filter/go.mod Normal file
View file

@ -0,0 +1,3 @@
module kiki/kikifilter
go 1.22.2

View file

@ -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
)

View file

@ -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)
}
}