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
This commit is contained in:
parent
95c95031d8
commit
3b0b688843
7 changed files with 32 additions and 14 deletions
|
|
@ -4,12 +4,13 @@ RUN apk add --no-cache make
|
||||||
|
|
||||||
WORKDIR /app/kiki
|
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 config/* /app/kiki/config
|
||||||
COPY service/* /app/kiki/service
|
COPY service/* /app/kiki/service
|
||||||
COPY stacker/* /app/kiki/stacker
|
COPY stacker/* /app/kiki/stacker
|
||||||
COPY tooter/* /app/kiki/tooter
|
COPY tooter/* /app/kiki/tooter
|
||||||
|
COPY filter/* /app/kiki/filter
|
||||||
COPY file_watcher/* /app/kiki/file_watcher
|
COPY file_watcher/* /app/kiki/file_watcher
|
||||||
|
|
||||||
COPY Makefile /app/kiki/
|
COPY Makefile /app/kiki/
|
||||||
|
|
|
||||||
2
Makefile
2
Makefile
|
|
@ -9,7 +9,9 @@ stacker/go.sum : stacker/go.mod
|
||||||
cd stacker && go mod tidy && cd ../
|
cd stacker && go mod tidy && cd ../
|
||||||
service/go.sum : service/go.mod
|
service/go.sum : service/go.mod
|
||||||
cd service && go mod tidy && cd ../
|
cd service && go mod tidy && cd ../
|
||||||
|
|
||||||
service/kiki : service/kiki.go
|
service/kiki : service/kiki.go
|
||||||
go build -C service
|
go build -C service
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
rm kiki tooter/go.sum config/go.sum stacker/go.sum service/go.sum
|
rm kiki tooter/go.sum config/go.sum stacker/go.sum service/go.sum
|
||||||
|
|
@ -19,6 +19,7 @@ type KikiSettings struct {
|
||||||
Redis struct {
|
Redis struct {
|
||||||
Address string `yaml:"address"`
|
Address string `yaml:"address"`
|
||||||
} `yaml:"redis"`
|
} `yaml:"redis"`
|
||||||
|
FiltredWorlds []string `yaml:"filtred_worlds,flow"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Структура secret.conf
|
// Структура secret.conf
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
package filter
|
package kikifilter
|
||||||
|
|
||||||
import "strings"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
// Функция, проверяющая что запрещенные слова отсутсвуют в текста
|
// Функция, проверяющая что запрещенные слова отсутсвуют в текста
|
||||||
// Возвращает true если слова есть в тексте, возвращает false если их нет
|
// Возвращает true если слова есть в тексте, возвращает false если их нет
|
||||||
func isWordsInText(text string, words []string) bool {
|
func IsWordsInText(text string, words []string) bool {
|
||||||
|
fmt.Println(words)
|
||||||
for _, v := range words {
|
for _, v := range words {
|
||||||
if strings.ContainsAny(text, v) {
|
if strings.Contains(text, v) {
|
||||||
|
fmt.Println(strings.Contains(text, v))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
module git.catgirls.asia/B4D_US3R/kiki/filter
|
module kiki/kikifilter
|
||||||
|
|
||||||
go 1.22.2
|
go 1.22.2
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,16 @@ replace kiki/stacker => ../stacker
|
||||||
|
|
||||||
replace kiki/tooter => ../tooter
|
replace kiki/tooter => ../tooter
|
||||||
|
|
||||||
replace kiki/file_watcher => ../file_watcher/
|
replace kiki/file_watcher => ../file_watcher
|
||||||
|
|
||||||
|
replace kiki/kikifilter => ../filter
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/mattn/go-mastodon v0.0.9
|
github.com/mattn/go-mastodon v0.0.9
|
||||||
github.com/urfave/cli/v3 v3.2.0
|
github.com/urfave/cli/v3 v3.2.0
|
||||||
kiki/config v0.0.0-00010101000000-000000000000
|
kiki/config v0.0.0-00010101000000-000000000000
|
||||||
kiki/file_watcher 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/stacker v0.0.0-00010101000000-000000000000
|
||||||
kiki/tooter v0.0.0-00010101000000-000000000000
|
kiki/tooter v0.0.0-00010101000000-000000000000
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -11,6 +12,7 @@ import (
|
||||||
|
|
||||||
"kiki/config"
|
"kiki/config"
|
||||||
"kiki/file_watcher"
|
"kiki/file_watcher"
|
||||||
|
"kiki/kikifilter"
|
||||||
"kiki/stacker"
|
"kiki/stacker"
|
||||||
"kiki/tooter"
|
"kiki/tooter"
|
||||||
|
|
||||||
|
|
@ -56,6 +58,7 @@ func main() {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
kikiConfig := config.GetKikiConfig(confFile)
|
kikiConfig := config.GetKikiConfig(confFile)
|
||||||
|
fmt.Println(kikiConfig.FiltredWorlds)
|
||||||
|
|
||||||
lastFileMod, err := file_watcher.GetFileModTime(confFile)
|
lastFileMod, err := file_watcher.GetFileModTime(confFile)
|
||||||
log.Println(lastFileMod)
|
log.Println(lastFileMod)
|
||||||
|
|
@ -88,15 +91,18 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !inStack {
|
if !inStack {
|
||||||
|
|
||||||
log.Println(post.Description)
|
log.Println(post.Description)
|
||||||
|
|
||||||
toot, err := tooter.CreateToot(*mastoClient, post, rssUrl.Sensitive, rssUrl.Visibility)
|
if !kikifilter.IsWordsInText(post.Description, kikiConfig.FiltredWorlds) {
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
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)
|
stacker.SetToRedis(rdb, post.GUID, post.Description)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue