复制项目
This commit is contained in:
144
pkg/common/db/table/chat/sensitive_word.go
Normal file
144
pkg/common/db/table/chat/sensitive_word.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user