@zhin.js/sensitive-filter 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/lib/index.d.ts +11 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -31
- package/lib/index.js.map +1 -1
- package/package.json +12 -2
- package/src/index.ts +34 -48
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @zhin.js/sensitive-filter
|
|
2
2
|
|
|
3
|
+
## 0.0.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f9faa1d: fix: test release
|
|
8
|
+
- Updated dependencies [f9faa1d]
|
|
9
|
+
- zhin.js@1.0.19
|
|
10
|
+
|
|
11
|
+
## 0.0.4
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- d16a69c: fix: test trust publish
|
|
16
|
+
- Updated dependencies [d16a69c]
|
|
17
|
+
- zhin.js@1.0.18
|
|
18
|
+
|
|
3
19
|
## 0.0.3
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export interface SensitiveFilterConfig {
|
|
2
|
+
political?: boolean;
|
|
3
|
+
violence?: boolean;
|
|
4
|
+
porn?: boolean;
|
|
5
|
+
prohibited?: boolean;
|
|
6
|
+
fraud?: boolean;
|
|
7
|
+
illegal?: boolean;
|
|
8
|
+
custom?: string[];
|
|
9
|
+
replacement?: string;
|
|
10
|
+
block?: boolean;
|
|
11
|
+
}
|
|
2
12
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
|
package/lib/index.js
CHANGED
|
@@ -1,32 +1,11 @@
|
|
|
1
|
-
import { usePlugin,
|
|
1
|
+
import { usePlugin, segment, } from "zhin.js";
|
|
2
2
|
import { getEnabledWords, createSensitiveWordRegex, } from "./sensitive-words.js";
|
|
3
|
-
const logger = useLogger();
|
|
4
3
|
const plugin = usePlugin();
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
.default(true)
|
|
11
|
-
.description("启用暴力类敏感词过滤"),
|
|
12
|
-
porn: Schema.boolean("porn")
|
|
13
|
-
.default(true)
|
|
14
|
-
.description("启用色情类敏感词过滤"),
|
|
15
|
-
prohibited: Schema.boolean("prohibited")
|
|
16
|
-
.default(true)
|
|
17
|
-
.description("启用禁用类敏感词过滤"),
|
|
18
|
-
fraud: Schema.boolean("fraud")
|
|
19
|
-
.default(true)
|
|
20
|
-
.description("启用诈骗类敏感词过滤"),
|
|
21
|
-
illegal: Schema.boolean("illegal")
|
|
22
|
-
.default(true)
|
|
23
|
-
.description("启用违法类敏感词过滤"),
|
|
24
|
-
custom: Schema.list(Schema.string()).default([]).description("自定义敏感词"),
|
|
25
|
-
replacement: Schema.string("replacement")
|
|
26
|
-
.default("*")
|
|
27
|
-
.description("替换字符"),
|
|
28
|
-
block: Schema.boolean("block").default(false).description("是否拦截消息"),
|
|
29
|
-
}).default({
|
|
4
|
+
const { root, logger } = plugin;
|
|
5
|
+
// 获取配置
|
|
6
|
+
const configService = root.inject("config");
|
|
7
|
+
const appConfig = configService?.get("zhin.config.yml") ?? {};
|
|
8
|
+
const config = {
|
|
30
9
|
political: true,
|
|
31
10
|
violence: true,
|
|
32
11
|
porn: true,
|
|
@@ -36,9 +15,8 @@ const schema = defineSchema(Schema.object({
|
|
|
36
15
|
custom: [],
|
|
37
16
|
replacement: "*",
|
|
38
17
|
block: false,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const config = schema(plugin.config, "sensitive-filter");
|
|
18
|
+
...appConfig["sensitive-filter"],
|
|
19
|
+
};
|
|
42
20
|
/**
|
|
43
21
|
* 检测文本中的敏感词
|
|
44
22
|
*/
|
|
@@ -101,7 +79,8 @@ function filterContent(content, regex, replacement) {
|
|
|
101
79
|
// 初始化敏感词过滤
|
|
102
80
|
const sensitiveWords = getEnabledWords(config);
|
|
103
81
|
const sensitiveRegex = createSensitiveWordRegex(sensitiveWords);
|
|
104
|
-
|
|
82
|
+
// 注册发送前过滤器
|
|
83
|
+
plugin.on('before.sendMessage', async (options) => {
|
|
105
84
|
const { content } = options;
|
|
106
85
|
// 如果内容为空,直接返回
|
|
107
86
|
if (!content)
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/sensitive-filter",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "敏感词过滤插件,过滤不符合中国国情的敏感内容",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -14,11 +14,21 @@
|
|
|
14
14
|
"author": "Zhin Team",
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"zhin.js": "1.0.
|
|
17
|
+
"zhin.js": "1.0.19"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"typescript": "^5.3.3"
|
|
21
21
|
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/zhinjs/zhin.git",
|
|
26
|
+
"directory": "plugins/utils/sensitive-filter"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public",
|
|
30
|
+
"registry": "https://registry.npmjs.org"
|
|
31
|
+
},
|
|
22
32
|
"scripts": {
|
|
23
33
|
"build": "tsc --build",
|
|
24
34
|
"dev": "tsc --watch"
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
usePlugin,
|
|
3
|
-
useLogger,
|
|
4
|
-
defineModel,
|
|
5
|
-
onDatabaseReady,
|
|
6
3
|
segment,
|
|
7
|
-
defineSchema,
|
|
8
|
-
Schema,
|
|
9
4
|
} from "zhin.js";
|
|
10
5
|
import type { SendOptions } from "zhin.js";
|
|
11
6
|
import {
|
|
@@ -13,47 +8,37 @@ import {
|
|
|
13
8
|
createSensitiveWordRegex,
|
|
14
9
|
} from "./sensitive-words.js";
|
|
15
10
|
|
|
16
|
-
const logger = useLogger();
|
|
17
11
|
const plugin = usePlugin();
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
fraud: true,
|
|
49
|
-
illegal: true,
|
|
50
|
-
custom: [],
|
|
51
|
-
replacement: "*",
|
|
52
|
-
block: false,
|
|
53
|
-
})
|
|
54
|
-
);
|
|
55
|
-
// 插件配置
|
|
56
|
-
const config = schema(plugin.config, "sensitive-filter");
|
|
12
|
+
const { root, logger } = plugin;
|
|
13
|
+
|
|
14
|
+
// 敏感词过滤配置接口
|
|
15
|
+
export interface SensitiveFilterConfig {
|
|
16
|
+
political?: boolean;
|
|
17
|
+
violence?: boolean;
|
|
18
|
+
porn?: boolean;
|
|
19
|
+
prohibited?: boolean;
|
|
20
|
+
fraud?: boolean;
|
|
21
|
+
illegal?: boolean;
|
|
22
|
+
custom?: string[];
|
|
23
|
+
replacement?: string;
|
|
24
|
+
block?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// 获取配置
|
|
28
|
+
const configService = root.inject("config");
|
|
29
|
+
const appConfig = configService?.get<{ "sensitive-filter"?: SensitiveFilterConfig }>("zhin.config.yml") ?? {};
|
|
30
|
+
const config: SensitiveFilterConfig = {
|
|
31
|
+
political: true,
|
|
32
|
+
violence: true,
|
|
33
|
+
porn: true,
|
|
34
|
+
prohibited: true,
|
|
35
|
+
fraud: true,
|
|
36
|
+
illegal: true,
|
|
37
|
+
custom: [],
|
|
38
|
+
replacement: "*",
|
|
39
|
+
block: false,
|
|
40
|
+
...appConfig["sensitive-filter"],
|
|
41
|
+
};
|
|
57
42
|
|
|
58
43
|
/**
|
|
59
44
|
* 检测文本中的敏感词
|
|
@@ -136,8 +121,9 @@ function filterContent(
|
|
|
136
121
|
// 初始化敏感词过滤
|
|
137
122
|
const sensitiveWords = getEnabledWords(config);
|
|
138
123
|
const sensitiveRegex = createSensitiveWordRegex(sensitiveWords);
|
|
139
|
-
|
|
140
|
-
|
|
124
|
+
|
|
125
|
+
// 注册发送前过滤器
|
|
126
|
+
plugin.on('before.sendMessage', async (options: SendOptions) => {
|
|
141
127
|
const { content } = options;
|
|
142
128
|
|
|
143
129
|
// 如果内容为空,直接返回
|
|
@@ -182,5 +168,5 @@ plugin.beforeSend(async (options: SendOptions) => {
|
|
|
182
168
|
};
|
|
183
169
|
});
|
|
184
170
|
|
|
185
|
-
|
|
171
|
+
logger.info("敏感词过滤功能已启用");
|
|
186
172
|
logger.info(`敏感词过滤插件已加载,共 ${sensitiveWords.length} 个敏感词`);
|