@zhin.js/sensitive-filter
Version:
敏感词过滤插件,过滤不符合中国国情的敏感内容
237 lines (174 loc) • 5.56 kB
Markdown
# @zhin.js/plugin-sensitive-filter
敏感词过滤插件,用于过滤不符合中国国情的敏感内容。
## 功能特性
- ✅ **多类别敏感词库**:政治、暴力、色情、违禁品、诈骗、违法违规等多个类别
- ✅ **智能过滤**:自动检测并替换敏感词为 `*` 字符
- ✅ **拦截模式**:可选择直接拦截包含敏感词的消息
- ✅ **日志记录**:自动记录检测到的敏感词和过滤结果
- ✅ **自定义词库**:支持添加自定义敏感词
- ✅ **灵活配置**:可按类别启用/禁用敏感词过滤
## 安装
```bash
pnpm add @zhin.js/plugin-sensitive-filter
```
## 使用方法
### 基础使用
在配置文件中启用插件:
```typescript
// zhin.config.ts
import { defineConfig } from 'zhin.js'
export default defineConfig({
plugins: [
'database', // 敏感词过滤插件依赖数据库
'sensitive-filter'
]
})
```
### 配置选项
插件支持以下配置选项:
```typescript
interface SensitiveFilterOptions {
/** 是否启用政治敏感词过滤(默认: true) */
political?: boolean
/** 是否启用暴力恐怖词汇过滤(默认: true) */
violence?: boolean
/** 是否启用色情低俗词汇过滤(默认: true) */
porn?: boolean
/** 是否启用违禁品词汇过滤(默认: true) */
prohibited?: boolean
/** 是否启用诈骗相关词汇过滤(默认: true) */
fraud?: boolean
/** 是否启用其他违法违规词汇过滤(默认: true) */
illegal?: boolean
/** 自定义敏感词列表 */
custom?: string[]
/** 替换字符(默认: "*") */
replacement?: string
/** 是否直接拦截包含敏感词的消息(默认: false) */
block?: boolean
}
```
### 自定义配置
修改 `src/index.ts` 中的配置:
```typescript
const config: SensitiveFilterOptions = {
political: true,
violence: true,
porn: true,
prohibited: false, // 禁用违禁品词汇过滤
fraud: true,
illegal: true,
custom: ['自定义敏感词1', '自定义敏感词2'],
replacement: "█", // 使用不同的替换字符
block: true, // 直接拦截包含敏感词的消息
}
```
## 工作原理
### 过滤流程
1. **拦截发送消息**:使用 `plugin.beforeSend()` 钩子拦截所有即将发送的消息
2. **敏感词检测**:使用正则表达式匹配敏感词
3. **内容过滤**:
- **替换模式**(默认):将敏感词替换为 `*` 字符
- **拦截模式**:直接拦截消息并返回警告
4. **日志记录**:将检测结果保存到数据库
### 示例效果
**替换模式**:
```
输入: "这是一条包含敏感词的消息"
输出: "这是一条包含***的消息"
```
**拦截模式**:
```
输入: "这是一条包含敏感词的消息"
输出: "⚠️ 消息包含敏感词,已被拦截。检测到: 敏感词"
```
## 敏感词分类
插件包含以下敏感词分类:
### 1. 政治敏感词
涉及政治敏感话题的词汇,如:法轮功、达赖、台独、藏独等
### 2. 暴力恐怖词汇
涉及暴力、恐怖主义的词汇,如:恐怖主义、爆炸、炸弹等
### 3. 色情低俗词汇
涉及色情、低俗内容的词汇,如:色情、淫秽、裸体等
### 4. 违禁品词汇
涉及毒品、赌博、枪支等违禁品的词汇
### 5. 诈骗相关词汇
涉及网络诈骗、传销等欺诈行为的词汇
### 6. 其他违法违规词汇
涉及翻墙、假证、作弊等违法违规行为的词汇
## 数据库表结构
插件会自动创建 `sensitive_logs` 表记录过滤日志:
```typescript
{
id: number // 自增主键
content: string // 原始内容
filtered_content: string // 过滤后内容
detected_words: string[] // 检测到的敏感词列表
user_id: string // 用户ID
adapter: string // 适配器名称
bot: string // 机器人名称
timestamp: Date // 时间戳
}
```
## 注意事项
1. **依赖数据库**:本插件需要数据库支持来记录日志,请确保已启用 `database` 插件
2. **性能考虑**:敏感词库较大时可能影响性能,建议按需启用分类
3. **误判问题**:简单的关键词匹配可能存在误判,建议根据实际情况调整词库
4. **合规使用**:请根据当地法律法规和平台规则合理使用本插件
## 最佳实践
### 1. 按场景启用分类
```typescript
// 公开群聊:启用所有过滤
const publicGroupConfig = {
political: true,
violence: true,
porn: true,
prohibited: true,
fraud: true,
illegal: true,
}
// 私聊:只启用必要过滤
const privateConfig = {
political: false,
violence: false,
porn: true,
prohibited: true,
fraud: true,
illegal: false,
}
```
### 2. 自定义词库管理
```typescript
// 添加行业特定敏感词
const config = {
custom: [
'公司机密信息',
'内部文档',
'未公开产品',
]
}
```
### 3. 日志分析
定期查询日志分析敏感词趋势:
```typescript
import { useContext } from 'zhin.js'
useContext('database', async (db) => {
const logs = db.model('sensitive_logs')
// 查询最近检测到的敏感词
const recent = await logs.select()
.orderBy('timestamp', 'desc')
.limit(10)
console.log('最近检测到的敏感词:', recent)
})
```
## 开发
```bash
# 构建
pnpm build
# 开发模式
pnpm dev
```
## 许可证
MIT
---
**警告**:本插件仅用于内容过滤和安全防护,请遵守相关法律法规,不要用于非法用途。