62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
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
|
||
}
|