Content moderation plugin for Zhin.js - filters sensitive words
npm install @zhin.js/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. 日志记录:将检测结果保存到数据库
替换模式:
``
输入: "这是一条包含敏感词的消息"
输出: "这是一条包含*的消息"
拦截模式:
``
输入: "这是一条包含敏感词的消息"
输出: "⚠️ 消息包含敏感词,已被拦截。检测到: 敏感词"
插件包含以下敏感词分类:
插件会自动创建 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. 合规使用:请根据当地法律法规和平台规则合理使用本插件
`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,
}
`
`typescript`
// 添加行业特定敏感词
const config = {
custom: [
'公司机密信息',
'内部文档',
'未公开产品',
]
}
定期查询日志分析敏感词趋势:
`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
MIT
---
警告:本插件仅用于内容过滤和安全防护,请遵守相关法律法规,不要用于非法用途。