package config import ( "os" "strconv" "strings" ) // 默认敏感词列表(首版本地词表,后续接 dify) var defaultBannedWords = []string{ "傻逼", "操你", "草泥马", "fuck", "shit", } // ActivityMessageConfig 活动留言配置 type ActivityMessageConfig struct { MessageRateLimitPerMin int64 // 单用户单活动每分钟最多留言数 MessageLimitPerActivity int64 // 单用户单活动累计留言上限 BannedWords []string // 敏感词首版本地词表(可通过 env 覆盖) } // LoadMessageConfig 从环境变量加载配置(缺省值参考通知服务) func LoadMessageConfig() *ActivityMessageConfig { return &ActivityMessageConfig{ MessageRateLimitPerMin: getEnvInt64("ACTIVITY_MESSAGE_RATE_LIMIT_PER_MIN", 5), MessageLimitPerActivity: getEnvInt64("ACTIVITY_MESSAGE_LIMIT_PER_ACTIVITY", 100), BannedWords: loadBannedWords(), } } // loadBannedWords 从 ACTIVITY_MESSAGE_BANNED_WORDS(逗号分隔)加载敏感词; // 未设置或为空时回退到默认词表 func loadBannedWords() []string { raw := os.Getenv("ACTIVITY_MESSAGE_BANNED_WORDS") if strings.TrimSpace(raw) == "" { return append([]string{}, defaultBannedWords...) } parts := strings.Split(raw, ",") out := make([]string, 0, len(parts)) for _, p := range parts { t := strings.TrimSpace(p) if t != "" { out = append(out, t) } } if len(out) == 0 { return append([]string{}, defaultBannedWords...) } return out } func getEnvInt64(key string, defaultVal int64) int64 { v := os.Getenv(key) if v == "" { return defaultVal } parsed, err := strconv.ParseInt(v, 10, 64) if err != nil { return defaultVal } return parsed }