Spaces:
Sleeping
Sleeping
| package services | |
| import ( | |
| "bufio" | |
| "log" | |
| "os" | |
| "regexp" | |
| "strings" | |
| ) | |
| var blockedTerms []string | |
| var blockedRegexes []*regexp.Regexp | |
| func InitModeration() error { | |
| file, err := os.Open("moderation/words.txt") | |
| if err != nil { | |
| log.Println("Moderation words file not found, creating default...") | |
| return createDefaultModerationFile() | |
| } | |
| defer file.Close() | |
| scanner := bufio.NewScanner(file) | |
| for scanner.Scan() { | |
| line := strings.TrimSpace(scanner.Text()) | |
| if line == "" || strings.HasPrefix(line, "#") { | |
| continue | |
| } | |
| blockedTerms = append(blockedTerms, strings.ToLower(line)) | |
| // Compile as regex for more flexible matching | |
| regex, err := regexp.Compile("(?i)" + regexp.QuoteMeta(line)) | |
| if err == nil { | |
| blockedRegexes = append(blockedRegexes, regex) | |
| } | |
| } | |
| log.Printf("Loaded %d moderation terms", len(blockedTerms)) | |
| return scanner.Err() | |
| } | |
| func createDefaultModerationFile() error { | |
| err := os.MkdirAll("moderation", 0755) | |
| if err != nil { | |
| return err | |
| } | |
| defaultTerms := []string{ | |
| "# Moderation Terms - one per line", | |
| "# Lines starting with # are comments", | |
| "spam", | |
| "scam", | |
| "hate", | |
| "abuse", | |
| "violence", | |
| "suicide", | |
| "self-harm", | |
| "drugs", | |
| "illegal", | |
| } | |
| file, err := os.Create("moderation/words.txt") | |
| if err != nil { | |
| return err | |
| } | |
| defer file.Close() | |
| for _, term := range defaultTerms { | |
| file.WriteString(term + "\n") | |
| } | |
| log.Println("Created default moderation file") | |
| return nil | |
| } | |
| func CheckContent(content string) bool { | |
| if len(blockedRegexes) == 0 { | |
| return false | |
| } | |
| contentLower := strings.ToLower(content) | |
| for _, regex := range blockedRegexes { | |
| if regex.MatchString(contentLower) { | |
| log.Printf("Content flagged by moderation: matched pattern") | |
| return true | |
| } | |
| } | |
| return false | |
| } | |
| func GetBlockedTermsCount() int { | |
| return len(blockedTerms) | |
| } |