From be57a14ca5baef7b30b1b37466249c1fdb6cd3d7 Mon Sep 17 00:00:00 2001 From: harold Date: Tue, 29 Apr 2025 00:35:56 +0500 Subject: [PATCH] add fix for filters --- internal/service/donat/donat.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/service/donat/donat.go b/internal/service/donat/donat.go index 350ffde..f3ee933 100644 --- a/internal/service/donat/donat.go +++ b/internal/service/donat/donat.go @@ -4,6 +4,7 @@ import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/api" + "fmt" "github.com/google/uuid" "github.com/labstack/echo/v4" "log/slog" @@ -744,7 +745,7 @@ func (donatService *ServiceDonat) GetPlayingDonat( if !filteredSettings.EnableLinks { response.Text = donatService.replaceLinks(response.Text) } - + fmt.Println(response.Text) response.VoiceSpeed = voiceSettings.VoiceSpeed response.Scenery = voiceSettings.Scenery response.VoiceSoundPercent = voiceSettings.VoiceSoundPercent @@ -812,9 +813,17 @@ func (donatService *ServiceDonat) replaceFilteredWords(text string, words []stri escapedWords[i] = regexp.QuoteMeta(word) } - pattern := `(?i)\b(` + strings.Join(escapedWords, "|") + `)\b` + // Создаем паттерны для каждого слова, чтобы находить их внутри любых последовательностей символов (кроме пробелов) + patterns := make([]string, len(escapedWords)) + for i, word := range escapedWords { + patterns[i] = fmt.Sprintf(`\S*%s\S*`, word) // Ищем запрещённое слово в любом месте "слова" + } + + // Комбинируем все паттерны в одно регулярное выражение + pattern := `(?i)(` + strings.Join(patterns, "|") + `)` re := regexp.MustCompile(pattern) + // Заменяем все совпадения на звёздочки return re.ReplaceAllStringFunc(text, func(match string) string { return strings.Repeat("*", len(match)) })