复制项目

This commit is contained in:
kim.dev.6789
2026-01-14 22:35:45 +08:00
parent 305d526110
commit b7f8db7d08
297 changed files with 81784 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
package chat
import (
"context"
"time"
"github.com/openimsdk/tools/db/pagination"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// 敏感词相关结构体定义
type SensitiveWord struct {
ID string `bson:"_id" json:"id"` // 主键ID
Word string `bson:"word" json:"word"` // 敏感词内容
Level int32 `bson:"level" json:"level"` // 敏感词级别 1:低 2:中 3:高
Type int32 `bson:"type" json:"type"` // 敏感词类型 1:政治 2:色情 3:暴力 4:广告 5:其他
Action int32 `bson:"action" json:"action"` // 处理动作 1:替换为*** 2:拦截不发
Status int32 `bson:"status" json:"status"` // 状态 1:启用 0:禁用
Creator string `bson:"creator" json:"creator"` // 创建者
Updater string `bson:"updater" json:"updater"` // 更新者
CreateTime time.Time `bson:"create_time" json:"create_time"` // 创建时间
UpdateTime time.Time `bson:"update_time" json:"update_time"` // 更新时间
Remark string `bson:"remark" json:"remark"` // 备注
}
func (SensitiveWord) TableName() string {
return "sensitive_words"
}
type SensitiveWordLog struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
UserID string `bson:"user_id"` // 触发用户ID
GroupID string `bson:"group_id"` // 触发群组ID (如果是在群聊中)
Content string `bson:"content"` // 原始消息内容
MatchedWords []string `bson:"matched_words"` // 匹配到的敏感词
Action int32 `bson:"action"` // 采取的动作
ProcessedText string `bson:"processed_text"` // 处理后的文本 (如果被替换)
CreateTime time.Time `bson:"create_time"`
}
func (SensitiveWordLog) TableName() string {
return "sensitive_word_logs"
}
type SensitiveWordGroup struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name"` // 分组名称
Remark string `bson:"remark"` // 备注
CreateTime time.Time `bson:"create_time"`
UpdateTime time.Time `bson:"update_time"`
}
func (SensitiveWordGroup) TableName() string {
return "sensitive_word_groups"
}
type SensitiveWordConfig struct {
ID string `bson:"_id" json:"id"` // 主键ID
EnableFilter bool `bson:"enable_filter" json:"enable_filter"` // 是否启用过滤
FilterMode int32 `bson:"filter_mode" json:"filter_mode"` // 过滤模式
ReplaceChar string `bson:"replace_char" json:"replace_char"` // 替换字符,默认***
WhitelistUsers []string `bson:"whitelist_users" json:"whitelist_users"` // 白名单用户
WhitelistGroups []string `bson:"whitelist_groups" json:"whitelist_groups"` // 白名单群组
LogEnabled bool `bson:"log_enabled" json:"log_enabled"` // 是否记录日志
AutoApprove bool `bson:"auto_approve" json:"auto_approve"` // 是否自动审核
UpdateTime time.Time `bson:"update_time" json:"update_time"` // 更新时间
}
func (SensitiveWordConfig) TableName() string {
return "sensitive_word_configs"
}
// 敏感词级别常量
const (
SensitiveLevelLow = 1 // 低级别
SensitiveLevelMedium = 2 // 中级别
SensitiveLevelHigh = 3 // 高级别
)
// 敏感词类型常量
const (
SensitiveTypePolitical = 1 // 政治
SensitiveTypePorn = 2 // 色情
SensitiveTypeViolence = 3 // 暴力
SensitiveTypeAd = 4 // 广告
SensitiveTypeOther = 5 // 其他
)
// 处理动作常量
const (
SensitiveActionReplace = 1 // 替换为***
SensitiveActionBlock = 2 // 拦截不发
)
// 状态常量
const (
SensitiveStatusDisabled = 0 // 禁用
SensitiveStatusEnabled = 1 // 启用
)
type SensitiveWordInterface interface {
// 敏感词管理
CreateSensitiveWord(ctx context.Context, word *SensitiveWord) error
UpdateSensitiveWord(ctx context.Context, id string, data map[string]any) error
DeleteSensitiveWord(ctx context.Context, ids []string) error
GetSensitiveWord(ctx context.Context, id string) (*SensitiveWord, error)
SearchSensitiveWords(ctx context.Context, keyword string, action int32, status int32, pagination pagination.Pagination) (int64, []*SensitiveWord, error)
GetAllSensitiveWords(ctx context.Context) ([]*SensitiveWord, error)
GetEnabledSensitiveWords(ctx context.Context) ([]*SensitiveWord, error)
// 敏感词检测
CheckSensitiveWords(ctx context.Context, content string) ([]*SensitiveWord, error)
FilterContent(ctx context.Context, content string) (string, []*SensitiveWord, error)
// 敏感词日志
CreateSensitiveWordLog(ctx context.Context, log *SensitiveWordLog) error
GetSensitiveWordLogs(ctx context.Context, userID string, groupID string, pagination pagination.Pagination) (int64, []*SensitiveWordLog, error)
DeleteSensitiveWordLogs(ctx context.Context, ids []string) error
// 敏感词分组管理
CreateSensitiveWordGroup(ctx context.Context, group *SensitiveWordGroup) error
UpdateSensitiveWordGroup(ctx context.Context, id string, data map[string]any) error
DeleteSensitiveWordGroup(ctx context.Context, ids []string) error
GetSensitiveWordGroup(ctx context.Context, id string) (*SensitiveWordGroup, error)
GetAllSensitiveWordGroups(ctx context.Context) ([]*SensitiveWordGroup, error)
// 敏感词配置管理
GetSensitiveWordConfig(ctx context.Context) (*SensitiveWordConfig, error)
UpdateSensitiveWordConfig(ctx context.Context, config *SensitiveWordConfig) error
IsFilterEnabled(ctx context.Context) (bool, error)
GetFilterMode(ctx context.Context) (int32, error)
GetReplaceChar(ctx context.Context) (string, error)
IsUserInWhitelist(ctx context.Context, userID string) (bool, error)
IsGroupInWhitelist(ctx context.Context, groupID string) (bool, error)
// 批量操作
BatchCreateSensitiveWords(ctx context.Context, words []*SensitiveWord) error
BatchUpdateSensitiveWords(ctx context.Context, updates map[string]map[string]any) error
BatchDeleteSensitiveWords(ctx context.Context, ids []string) error
// 统计信息
GetSensitiveWordStats(ctx context.Context) (map[string]int64, error)
GetSensitiveWordLogStats(ctx context.Context, startTime, endTime time.Time) (map[string]int64, error)
}