@zhin.js/sensitive-filter 0.0.3 → 0.0.4
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 +8 -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 +8 -2
- package/src/index.ts +34 -48
package/CHANGELOG.md
CHANGED
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":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,eAAe,EACf,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;AAehC,OAAO;AACP,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,aAAa,EAAE,GAAG,CAAiD,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAC9G,MAAM,MAAM,GAA0B;IACpC,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,KAAK;IACZ,GAAG,SAAS,CAAC,kBAAkB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAE,KAAa;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,IAAY,EACZ,KAAa,EACb,WAAmB;IAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,OAAY,EACZ,KAAa,EACb,WAAmB;IAEnB,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,UAAU;IACV,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACpE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,UAAU;IACV,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAU,EAAE,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACxB,eAAe,CAAC,IAAI,CAClB,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CACnD,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAClD,UAAU;gBACV,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBAClD,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC7D,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBACxB,eAAe,CAAC,IAAI,CAAC;wBACnB,GAAG,OAAO;wBACV,IAAI,EAAE;4BACJ,GAAG,OAAO,CAAC,IAAI;4BACf,IAAI,EAAE,qBAAqB,CACzB,OAAO,CAAC,IAAI,CAAC,IAAI,EACjB,KAAK,EACL,WAAW,CACZ;yBACF;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,cAAc;oBACd,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC7C,CAAC;AAED,WAAW;AACX,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;AAEhE,WAAW;AACX,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5B,cAAc;IACd,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAE7B,eAAe;IACf,MAAM,UAAU,GACd,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAc,CAAC,CAAC;IAE3E,QAAQ;IACR,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEvE,kBAAkB;IAClB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnD,mBAAmB;IACnB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,GAAG,OAAO;YACV,OAAO,EAAE,kBAAkB;SAC5B,CAAC;IACJ,CAAC;IAED,aAAa;IACb,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,aAAa,CAC1C,OAAO,EACP,cAAc,EACd,MAAM,CAAC,WAAW,IAAI,GAAG,CAC1B,CAAC;IAEF,MAAM,WAAW,GACf,OAAO,QAAQ,KAAK,QAAQ;QAC1B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAe,CAAC,CAAC;IACxC,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,QAAe;KACzB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1B,MAAM,CAAC,IAAI,CAAC,gBAAgB,cAAc,CAAC,MAAM,OAAO,CAAC,CAAC"}
|
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.4",
|
|
4
4
|
"description": "敏感词过滤插件,过滤不符合中国国情的敏感内容",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -14,11 +14,17 @@
|
|
|
14
14
|
"author": "Zhin Team",
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"zhin.js": "1.0.
|
|
17
|
+
"zhin.js": "1.0.18"
|
|
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
|
+
},
|
|
22
28
|
"scripts": {
|
|
23
29
|
"build": "tsc --build",
|
|
24
30
|
"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} 个敏感词`);
|