@zhin.js/plugin-content-moderation 1.1.16 → 1.1.18
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/README.md +6 -4
- package/lib/group-moderation.d.ts +18 -0
- package/lib/group-moderation.d.ts.map +1 -1
- package/lib/group-moderation.js +32 -16
- package/lib/group-moderation.js.map +1 -1
- package/lib/messages.d.ts +1 -1
- package/lib/messages.d.ts.map +1 -1
- package/lib/messages.js +0 -2
- package/lib/messages.js.map +1 -1
- package/middlewares/inbound/index.js +27 -4
- package/middlewares/inbound/index.ts +25 -3
- package/package.json +4 -4
- package/schema.json +1 -1
- package/src/group-moderation.ts +47 -16
- package/src/messages.ts +0 -2
package/README.md
CHANGED
|
@@ -76,12 +76,14 @@ content-moderation:
|
|
|
76
76
|
group: "your-group-number"
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
复用已配置的 AI 文本补全服务、Database Host 原子持久状态和当前 generation 的适配器。当前 ICQQ 实现审核文字及近期文字上下文;纯图片内容不作为本流程的处罚证据。未配置 AI
|
|
79
|
+
复用已配置的 AI 文本补全服务、Database Host 原子持久状态和当前 generation 的适配器。当前 ICQQ 实现审核文字及近期文字上下文;纯图片内容不作为本流程的处罚证据。未配置 AI、持久状态或适配器成员查询接口时不审核;禁言 / 踢人只经 Agent 群规执行。
|
|
80
80
|
|
|
81
81
|
- 明确广告指未经请求的商业推广、交易或拉群引流。链接、技术分享、回应他人请求不能单独构成广告。
|
|
82
82
|
- 辱骂需结合上下文确认针对他人的人身攻击;观点批评、引用、举报和不明确的玩笑不直接处罚。模型必须提供当前原文中的证据;词库命中不参与处罚计数。
|
|
83
|
-
-
|
|
84
|
-
-
|
|
83
|
+
- **判定后做什么交给群规(ADR 0039)**:本插件只判定广告 / 辱骂,提醒、警告、禁言、建议踢人由 Agent 的群规执行器按该群**已批准**的规则执行;禁言以规则批准作硬闸批准,仍过控制面、`ops_cooldown` 与审计。
|
|
84
|
+
- **迁移(行为收紧)**:`groupModeration` 名单里的群首次有消息时,按默认模板「提醒 → 警告 → 禁言 10 分钟,冷静期 30 分钟」为广告、辱骂各生成一条**待确认**规则,并在群里出预览卡;群主 / 管理员发 `/rule approve <短码>`(或在 Console 批准)后才恢复自动禁言。确认前、或未装 Agent 时,本插件只提醒 → 警告,不禁言、不踢人。已有任意状态的同类规则(包括被驳回 / 停用的)就不再生成,群主拒绝过的不反复打扰。
|
|
85
|
+
- 同一成员、同类违规在没有已批准规则时:提醒 → 警告,之后同一轮不再追加提示。只有上一条提示确认送达后新发送的消息才推进一级;30 分钟没有新违规重置。
|
|
86
|
+
- **新人发广告不再直接踢**:实际入群 10 分钟内的明确广告改为出一张踢人审批卡(每次人批,群主 / 管理员或 IM 审批人确认才踢,驳回或超时不踢)。缺少入群时间、消息早于本次入群、审核期间超过窗口或成员重新入群,都按普通违规处理。
|
|
85
87
|
- 提醒或警告时,模型独立决定是否撤回这条违规原消息,并给出理由;不按处罚级别固定撤回。代码固定消息、群和账号,模型无法另选目标。对已明确评估的广告/辱骂,原词库动作不会再覆盖撤回决定;其他消息仍按原有词库配置处理。
|
|
86
88
|
- 原群内通过 @ 对应成员简短说明规则和处理结果,不复述广告链接或辱骂。撤回失败不重试、不增加违规次数;通知未确认送达、处罚结果未知或进程在副作用中断时,保留持久执行预留,阻止重复处罚。该预留最多保留 30 分钟。
|
|
87
89
|
- 普通 `group_kick` 工具仍逐次要求人工审批;确认信息展示本次群、成员和操作参数,并将执行参数固定为该次确认的快照。无人工审批渠道时拒绝,不扩大自动例外。
|
|
@@ -94,7 +96,7 @@ content-moderation:
|
|
|
94
96
|
|
|
95
97
|
多人共用模型调用时,按各人原文估算 token 比例分摊用量,共享提示词和输出也按此比例归属;群 token 不重复累加,群请求只记一次。个人超额只排除本人并重建请求,群超额则不调用;估算分摊并非 provider 提供的精确个人用量。调用失败沿用输入用量预留,不自动重审整批。合批使用所配置模型的输出预算;结果截断时整批记录失败,不猜测结论。旧版或自定义 AI 服务未声明支持多人用量归属时,沿用逐条审核及原来的个人计量,避免静默漏记用量;不同 completion 资源的消息不会合入同一请求。
|
|
96
98
|
|
|
97
|
-
队列随插件资源与适配器生命周期取消,旧任务不能在热重载后继续处罚;不持久保存或重放未审任务。通知走 owner-scoped Outbound Host 和统一出站链路,不保留已经结束的原消息回复回调。规则提示使用原消息进入队列时的语言,等待审核期间切换语言不会改变该次通知;模型理由、证据和自定义模板保持原文。300 ms
|
|
99
|
+
队列随插件资源与适配器生命周期取消,旧任务不能在热重载后继续处罚;不持久保存或重放未审任务。通知走 owner-scoped Outbound Host 和统一出站链路,不保留已经结束的原消息回复回调。规则提示使用原消息进入队列时的语言,等待审核期间切换语言不会改变该次通知;模型理由、证据和自定义模板保持原文。300 ms 仅为收集上限,排队、模型和平台调用会增加处置延迟;新人踢人卡的 10 分钟窗口不会因排队延长。
|
|
98
100
|
|
|
99
101
|
审核不携带工具,聊天内容作为不可信数据传入,调用计入现有用户/群配额。近期上下文在 generation 内有界保存(最多 50 条、12,000 字符);单条超出处理预算、缺少可靠时间、取消或审核失败时不处罚。这些限制属于处理能力边界,不是新的违规阈值。实际部署前应以本群样本验证模型对广告、引用、玩笑和正常分享的区分;单元测试不能证明模型判断准确。
|
|
100
102
|
|
|
@@ -38,10 +38,28 @@ export interface GroupModerationInput {
|
|
|
38
38
|
readonly recall: () => Promise<void>;
|
|
39
39
|
readonly audit: (event: Readonly<Record<string, unknown>>) => void;
|
|
40
40
|
readonly onReview?: () => void;
|
|
41
|
+
/**
|
|
42
|
+
* 群规执行器(ADR 0039 §5,Agent host 提供)。判定后做什么交给它:`handled` 时本插件不再提醒或处罚;
|
|
43
|
+
* `no_rule`(该群还没确认规则)或未装 Agent 时,本插件只提醒 / 警告,不禁言、不踢人。
|
|
44
|
+
*/
|
|
45
|
+
readonly rules?: (violation: GroupRuleHit) => Promise<'handled' | 'no_rule'>;
|
|
46
|
+
}
|
|
47
|
+
/** 交给群规执行器的一次命中(目标、群号由中间件绑定,模型够不着)。 */
|
|
48
|
+
export interface GroupRuleHit {
|
|
49
|
+
readonly category: Category;
|
|
50
|
+
readonly evidence: readonly string[];
|
|
51
|
+
/** 入群 10 分钟内发广告:执行器出踢人审批卡(每次人批),不再无人审批直接踢。 */
|
|
52
|
+
readonly newcomer: boolean;
|
|
53
|
+
readonly recall?: () => Promise<void>;
|
|
41
54
|
}
|
|
42
55
|
/** Generation-owned history only; enforcement state uses the existing atomic Database Host. */
|
|
43
56
|
export declare class GroupModerator {
|
|
44
57
|
#private;
|
|
58
|
+
/**
|
|
59
|
+
* ADR 0039 §5 migration: once per generation per configured group, ask the Agent host for the default
|
|
60
|
+
* pending rules (advertising / abuse). Failures are retried on a later message.
|
|
61
|
+
*/
|
|
62
|
+
ensureRules(scope: string, ensure: () => Promise<void>): void;
|
|
45
63
|
/** A full queue must still respect a review started by a previous generation. */
|
|
46
64
|
ownsRecall(input: GroupModerationInput): Promise<boolean>;
|
|
47
65
|
remember(scope: string, sender: string, text: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-moderation.d.ts","sourceRoot":"","sources":["../src/group-moderation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAK3C,KAAK,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAC;AAKxC,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAChH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,k/BAGgW,CAAC;AAEhY,eAAO,MAAM,mBAAmB,mzCAGV,CAAC;AAEvB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB,KAAK,IAAI,GAC/D,WAAW,GAAG,SAAS,CAmBzB;AAED,MAAM,WAAW,oBAAoB;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAChF,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"group-moderation.d.ts","sourceRoot":"","sources":["../src/group-moderation.ts"],"names":[],"mappings":"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"}
|
package/lib/group-moderation.js
CHANGED
|
@@ -39,7 +39,19 @@ export function parseGroupReview(text, original, onInvalid) {
|
|
|
39
39
|
/** Generation-owned history only; enforcement state uses the existing atomic Database Host. */
|
|
40
40
|
export class GroupModerator {
|
|
41
41
|
#history = new Map();
|
|
42
|
+
/** Groups whose default rules were already requested this generation (bounded by the configured group list). */
|
|
43
|
+
#rulesEnsured = new Set();
|
|
42
44
|
#sequence = 0;
|
|
45
|
+
/**
|
|
46
|
+
* ADR 0039 §5 migration: once per generation per configured group, ask the Agent host for the default
|
|
47
|
+
* pending rules (advertising / abuse). Failures are retried on a later message.
|
|
48
|
+
*/
|
|
49
|
+
ensureRules(scope, ensure) {
|
|
50
|
+
if (this.#rulesEnsured.has(scope))
|
|
51
|
+
return;
|
|
52
|
+
this.#rulesEnsured.add(scope);
|
|
53
|
+
void ensure().catch(() => this.#rulesEnsured.delete(scope));
|
|
54
|
+
}
|
|
43
55
|
/** A full queue must still respect a review started by a previous generation. */
|
|
44
56
|
async ownsRecall(input) {
|
|
45
57
|
const window = await input.state.get(`group-moderation:seen:${digest(input.sender)}`);
|
|
@@ -64,7 +76,7 @@ export class GroupModerator {
|
|
|
64
76
|
}
|
|
65
77
|
async review(input, classify) {
|
|
66
78
|
const { state, management } = input;
|
|
67
|
-
if (!management.inspectGroupMember
|
|
79
|
+
if (!management.inspectGroupMember
|
|
68
80
|
|| !input.messageId || !Number.isSafeInteger(input.sentAt) || input.sentAt <= 0
|
|
69
81
|
|| input.sentAt > Date.now() || Date.now() - input.sentAt >= QUIET_MS
|
|
70
82
|
|| !input.text.trim() || input.text.length > 12_000)
|
|
@@ -154,28 +166,32 @@ export class GroupModerator {
|
|
|
154
166
|
// Messages already sent before the last delivered notice cannot advance escalation.
|
|
155
167
|
if (input.sentAt <= stage.notifiedAt)
|
|
156
168
|
return;
|
|
157
|
-
const count = Math.min(stage.count + 1, 3);
|
|
158
169
|
input.audit({ event: 'group_review', category: review.category, messageId: input.messageId,
|
|
159
170
|
evidence: review.evidence, recall: review.recall, recallReason: review.recallReason });
|
|
160
|
-
if (!newcomer && stage.count >= 3) {
|
|
161
|
-
await state.update(memberKey, (value) => value?.lease === token
|
|
162
|
-
? { ...value, [review.category]: { ...stage, lastViolationAt: input.sentAt } } : value, { ttlMs: QUIET_MS });
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
171
|
signal.throwIfAborted();
|
|
166
172
|
// Persisted lease predates every side effect. Unknown outcomes retain it, preventing retries.
|
|
167
173
|
effectStarted = true;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
174
|
+
// ADR 0039 §5: punishment belongs to the approved group rule. The enforcer owns its own ladder,
|
|
175
|
+
// mutes only under an approved rule, and turns a newcomer ad into a per-kick approval card.
|
|
176
|
+
if (input.rules) {
|
|
177
|
+
const outcome = await input.rules({ category: review.category, evidence: review.evidence, newcomer,
|
|
178
|
+
...(review.recall ? { recall: input.recall } : {}) });
|
|
179
|
+
if (outcome === 'handled') {
|
|
180
|
+
completed = true;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
signal.throwIfAborted();
|
|
172
184
|
}
|
|
173
|
-
|
|
174
|
-
|
|
185
|
+
// No confirmed rule (or no Agent host): remind, then warn. Never mute or kick here.
|
|
186
|
+
if (stage.count >= 2) {
|
|
187
|
+
await state.update(memberKey, (value) => value?.lease === token
|
|
188
|
+
? { ...value, [review.category]: { ...stage, lastViolationAt: input.sentAt } } : value, { ttlMs: QUIET_MS });
|
|
189
|
+
completed = true;
|
|
190
|
+
return;
|
|
175
191
|
}
|
|
176
|
-
|
|
192
|
+
const count = stage.count + 1;
|
|
177
193
|
const rule = moderationMessages(input.locale, review.category);
|
|
178
|
-
const action = moderationMessages(input.locale,
|
|
194
|
+
const action = moderationMessages(input.locale, count === 2 ? 'warning' : 'reminder');
|
|
179
195
|
await input.reply(moderationMessages(input.locale, 'notice', { action, rule }), input.sender);
|
|
180
196
|
const notifiedAt = Date.now();
|
|
181
197
|
// Commit the delivered stage and release together, before optional recall.
|
|
@@ -184,7 +200,7 @@ export class GroupModerator {
|
|
|
184
200
|
completed = true;
|
|
185
201
|
claimed = false;
|
|
186
202
|
// Optional recall is independent of escalation and cannot undo a successfully delivered notice.
|
|
187
|
-
if (
|
|
203
|
+
if (review.recall && !signal.aborted) {
|
|
188
204
|
try {
|
|
189
205
|
await input.recall();
|
|
190
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-moderation.js","sourceRoot":"","sources":["../src/group-moderation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"group-moderation.js","sourceRoot":"","sources":["../src/group-moderation.ts"],"names":[],"mappings":"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"}
|
package/lib/messages.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const moderationMessages: (locale: import("zhin.js").Locale | undefined, key: "blocked" | "advertising" | "abuse" | "
|
|
1
|
+
export declare const moderationMessages: (locale: import("zhin.js").Locale | undefined, key: "blocked" | "advertising" | "abuse" | "warning" | "reminder" | "notice", values?: import("zhin.js").MessageValues) => string;
|
|
2
2
|
//# sourceMappingURL=messages.d.ts.map
|
package/lib/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,kLAO7B,CAAC"}
|
package/lib/messages.js
CHANGED
|
@@ -3,8 +3,6 @@ export const moderationMessages = createMessages({
|
|
|
3
3
|
blocked: { 'zh-CN': '消息含不当内容,已拦截。', en: 'This message contains inappropriate content and was blocked.' },
|
|
4
4
|
advertising: { 'zh-CN': '请勿发布未经请求的广告或引流信息', en: 'Do not post unsolicited advertising or promotional invitations' },
|
|
5
5
|
abuse: { 'zh-CN': '请勿针对他人进行人身攻击', en: 'Do not direct personal attacks at others' },
|
|
6
|
-
kicked: { 'zh-CN': '入群 10 分钟内发布明确广告,已移出群聊', en: 'Removed from the group for posting clear advertising within 10 minutes of joining' },
|
|
7
|
-
muted: { 'zh-CN': '已禁言 10 分钟', en: 'Muted for 10 minutes' },
|
|
8
6
|
warning: { 'zh-CN': '警告', en: 'Warning' },
|
|
9
7
|
reminder: { 'zh-CN': '提醒', en: 'Reminder' },
|
|
10
8
|
notice: { 'zh-CN': '{action}。{rule}。', en: '{action}. {rule}.' },
|
package/lib/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;IAC/C,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,8DAA8D,EAAE;IACxG,WAAW,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,gEAAgE,EAAE;IAClH,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,0CAA0C,EAAE;IAClF,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;IAC/C,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,8DAA8D,EAAE;IACxG,WAAW,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,gEAAgE,EAAE;IAClH,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,0CAA0C,EAAE;IAClF,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE;IACzC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE;IAC3C,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,mBAAmB,EAAE;CACjE,CAAC,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { defineMiddleware } from 'zhin.js/middleware';
|
|
3
3
|
import { aiCompletionToken, createDeliveryTarget, databaseHostToken, getLogger, hasResource, outboundHostToken, usageSubjectFromMessage } from 'zhin.js';
|
|
4
4
|
import { adapterFeatureId } from 'zhin.js/adapter';
|
|
5
|
+
import { groupRuleViolationToken } from '@zhin.js/core/runtime';
|
|
5
6
|
import { generationAdmissionSource } from 'zhin.js/plugin-runtime';
|
|
6
7
|
import { resolveLocale } from 'zhin.js/i18n';
|
|
7
8
|
import { buildScanContext, extractFromTextAndSegments, resolveModerationConfig, shouldBypassInbound, } from "../../lib/index.js";
|
|
@@ -122,6 +123,21 @@ async function enqueueGroupModeration(context, config, bypass) {
|
|
|
122
123
|
const destination = createDeliveryTarget({ conversation });
|
|
123
124
|
const scope = JSON.stringify(destination);
|
|
124
125
|
const remembered = engine.groupModerator.remember(scope, message.sender?.id ?? '', text);
|
|
126
|
+
// ADR 0039 §5: punishment is the group rule's job. A configured group gets default pending rules once,
|
|
127
|
+
// and stays reminder / warning only until an owner or admin confirms them.
|
|
128
|
+
const rules = hasResource(context, groupRuleViolationToken)
|
|
129
|
+
? context.use(groupRuleViolationToken) : undefined;
|
|
130
|
+
if (rules) {
|
|
131
|
+
engine.groupModerator.ensureRules(scope, async () => {
|
|
132
|
+
for (const trigger of ['advertising', 'abuse']) {
|
|
133
|
+
const outcome = await rules.ensureDefaultRule({ conversation, trigger });
|
|
134
|
+
if (outcome === 'unavailable')
|
|
135
|
+
throw new Error('Group rule storage unavailable');
|
|
136
|
+
if (outcome === 'created')
|
|
137
|
+
logger.info({ event: 'group_rule_migrated', trigger, endpoint: conversation.endpoint.id, group: conversation.id });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
125
141
|
if (!bypass && message.sender?.id && message.origin !== 'self'
|
|
126
142
|
&& hasResource(context, aiCompletionToken) && hasResource(context, databaseHostToken)
|
|
127
143
|
&& hasResource(context, outboundHostToken)) {
|
|
@@ -151,11 +167,18 @@ async function enqueueGroupModeration(context, config, bypass) {
|
|
|
151
167
|
assertTarget();
|
|
152
168
|
return endpoint.management.inspectGroupMember(group, member, operationSignal);
|
|
153
169
|
} : undefined,
|
|
154
|
-
moderateGroupMember: endpoint.management?.moderateGroupMember ? async (group, member, action, operationSignal) => {
|
|
155
|
-
assertTarget();
|
|
156
|
-
return endpoint.management.moderateGroupMember(group, member, action, operationSignal);
|
|
157
|
-
} : undefined,
|
|
158
170
|
},
|
|
171
|
+
...(rules ? { rules: async (hit) => {
|
|
172
|
+
assertTarget();
|
|
173
|
+
return rules.report({
|
|
174
|
+
conversation, memberId: message.sender.id, trigger: hit.category, newcomer: hit.newcomer,
|
|
175
|
+
sentAt: Number(message.metadata?.platformSentAt), evidence: hit.evidence,
|
|
176
|
+
...(message.sender?.name ? { memberName: message.sender.name } : {}),
|
|
177
|
+
...(message.sender?.roles ? { memberRoles: message.sender.roles } : {}),
|
|
178
|
+
...(messageId ? { messageId } : {}),
|
|
179
|
+
...(hit.recall ? { recall: hit.recall } : {}),
|
|
180
|
+
});
|
|
181
|
+
} } : {}),
|
|
159
182
|
onBehalfOf: usageSubjectFromMessage(message),
|
|
160
183
|
reply: async (content, mention) => {
|
|
161
184
|
assertTarget();
|
|
@@ -3,6 +3,7 @@ import type { Message } from '@zhin.js/core/runtime';
|
|
|
3
3
|
import { aiCompletionToken, createDeliveryTarget, databaseHostToken, getLogger, hasResource,
|
|
4
4
|
outboundHostToken, usageSubjectFromMessage } from 'zhin.js';
|
|
5
5
|
import { adapterFeatureId, type AdapterIndex } from 'zhin.js/adapter';
|
|
6
|
+
import { groupRuleViolationToken, type GroupRuleViolationSink } from '@zhin.js/core/runtime';
|
|
6
7
|
import { generationAdmissionSource } from 'zhin.js/plugin-runtime';
|
|
7
8
|
import { resolveLocale } from 'zhin.js/i18n';
|
|
8
9
|
import {
|
|
@@ -136,6 +137,19 @@ async function enqueueGroupModeration(
|
|
|
136
137
|
const destination = createDeliveryTarget({ conversation });
|
|
137
138
|
const scope = JSON.stringify(destination);
|
|
138
139
|
const remembered = engine.groupModerator.remember(scope, message.sender?.id ?? '', text);
|
|
140
|
+
// ADR 0039 §5: punishment is the group rule's job. A configured group gets default pending rules once,
|
|
141
|
+
// and stays reminder / warning only until an owner or admin confirms them.
|
|
142
|
+
const rules: GroupRuleViolationSink | undefined = hasResource(context, groupRuleViolationToken)
|
|
143
|
+
? context.use(groupRuleViolationToken) : undefined;
|
|
144
|
+
if (rules) {
|
|
145
|
+
engine.groupModerator.ensureRules(scope, async () => {
|
|
146
|
+
for (const trigger of ['advertising', 'abuse'] as const) {
|
|
147
|
+
const outcome = await rules.ensureDefaultRule({ conversation, trigger });
|
|
148
|
+
if (outcome === 'unavailable') throw new Error('Group rule storage unavailable');
|
|
149
|
+
if (outcome === 'created') logger.info({ event: 'group_rule_migrated', trigger, endpoint: conversation.endpoint.id, group: conversation.id });
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
139
153
|
if (!bypass && message.sender?.id && message.origin !== 'self'
|
|
140
154
|
&& hasResource(context, aiCompletionToken) && hasResource(context, databaseHostToken)
|
|
141
155
|
&& hasResource(context, outboundHostToken)) {
|
|
@@ -163,10 +177,18 @@ async function enqueueGroupModeration(
|
|
|
163
177
|
inspectGroupMember: endpoint.management?.inspectGroupMember ? async (group, member, operationSignal) => {
|
|
164
178
|
assertTarget(); return endpoint.management!.inspectGroupMember!(group, member, operationSignal);
|
|
165
179
|
} : undefined,
|
|
166
|
-
moderateGroupMember: endpoint.management?.moderateGroupMember ? async (group, member, action, operationSignal) => {
|
|
167
|
-
assertTarget(); return endpoint.management!.moderateGroupMember!(group, member, action, operationSignal);
|
|
168
|
-
} : undefined,
|
|
169
180
|
},
|
|
181
|
+
...(rules ? { rules: async (hit) => {
|
|
182
|
+
assertTarget();
|
|
183
|
+
return rules.report({
|
|
184
|
+
conversation, memberId: message.sender!.id, trigger: hit.category, newcomer: hit.newcomer,
|
|
185
|
+
sentAt: Number(message.metadata?.platformSentAt), evidence: hit.evidence,
|
|
186
|
+
...(message.sender?.name ? { memberName: message.sender.name } : {}),
|
|
187
|
+
...(message.sender?.roles ? { memberRoles: message.sender.roles } : {}),
|
|
188
|
+
...(messageId ? { messageId } : {}),
|
|
189
|
+
...(hit.recall ? { recall: hit.recall } : {}),
|
|
190
|
+
});
|
|
191
|
+
} } : {}),
|
|
170
192
|
onBehalfOf: usageSubjectFromMessage(message),
|
|
171
193
|
reply: async (content, mention) => {
|
|
172
194
|
assertTarget();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/plugin-content-moderation",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.18",
|
|
4
4
|
"description": "Content moderation plugin for Zhin.js — inbound/outbound multi-source scanning (Plugin Runtime)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
},
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@zhin.js/core": "1.1.
|
|
40
|
+
"@zhin.js/core": "1.1.53",
|
|
41
41
|
"@zhin.js/logger": "1.1.2"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"typescript": "^6.0.3",
|
|
45
45
|
"vitest": "^4.1.10",
|
|
46
|
-
"zhin.js": "1.1.
|
|
46
|
+
"zhin.js": "1.1.18"
|
|
47
47
|
},
|
|
48
48
|
"repository": {
|
|
49
49
|
"type": "git",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"@zhin.js/middleware": "^1.1.10",
|
|
76
|
-
"zhin.js": "^1.1.
|
|
76
|
+
"zhin.js": "^1.1.18"
|
|
77
77
|
},
|
|
78
78
|
"peerDependenciesMeta": {
|
|
79
79
|
"@zhin.js/middleware": {
|
package/schema.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"groupModeration": {
|
|
7
7
|
"type": "array",
|
|
8
8
|
"default": [],
|
|
9
|
-
"description": "自动广告/辱骂审核的精确范围;未配置时关闭。需要 AI
|
|
9
|
+
"description": "自动广告/辱骂审核的精确范围;未配置时关闭。需要 AI、原子持久状态和适配器群管支持。禁言 / 踢人交给 Agent 群规(ADR 0039),名单内的群会生成待确认的默认规则,确认前只提醒 / 警告。",
|
|
10
10
|
"items": {
|
|
11
11
|
"type": "object",
|
|
12
12
|
"additionalProperties": false,
|
package/src/group-moderation.ts
CHANGED
|
@@ -74,13 +74,39 @@ export interface GroupModerationInput {
|
|
|
74
74
|
readonly recall: () => Promise<void>;
|
|
75
75
|
readonly audit: (event: Readonly<Record<string, unknown>>) => void;
|
|
76
76
|
readonly onReview?: () => void;
|
|
77
|
+
/**
|
|
78
|
+
* 群规执行器(ADR 0039 §5,Agent host 提供)。判定后做什么交给它:`handled` 时本插件不再提醒或处罚;
|
|
79
|
+
* `no_rule`(该群还没确认规则)或未装 Agent 时,本插件只提醒 / 警告,不禁言、不踢人。
|
|
80
|
+
*/
|
|
81
|
+
readonly rules?: (violation: GroupRuleHit) => Promise<'handled' | 'no_rule'>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** 交给群规执行器的一次命中(目标、群号由中间件绑定,模型够不着)。 */
|
|
85
|
+
export interface GroupRuleHit {
|
|
86
|
+
readonly category: Category;
|
|
87
|
+
readonly evidence: readonly string[];
|
|
88
|
+
/** 入群 10 分钟内发广告:执行器出踢人审批卡(每次人批),不再无人审批直接踢。 */
|
|
89
|
+
readonly newcomer: boolean;
|
|
90
|
+
readonly recall?: () => Promise<void>;
|
|
77
91
|
}
|
|
78
92
|
|
|
79
93
|
/** Generation-owned history only; enforcement state uses the existing atomic Database Host. */
|
|
80
94
|
export class GroupModerator {
|
|
81
95
|
readonly #history = new Map<string, readonly (GroupContextEntry & { at: number })[]>();
|
|
96
|
+
/** Groups whose default rules were already requested this generation (bounded by the configured group list). */
|
|
97
|
+
readonly #rulesEnsured = new Set<string>();
|
|
82
98
|
#sequence = 0;
|
|
83
99
|
|
|
100
|
+
/**
|
|
101
|
+
* ADR 0039 §5 migration: once per generation per configured group, ask the Agent host for the default
|
|
102
|
+
* pending rules (advertising / abuse). Failures are retried on a later message.
|
|
103
|
+
*/
|
|
104
|
+
ensureRules(scope: string, ensure: () => Promise<void>): void {
|
|
105
|
+
if (this.#rulesEnsured.has(scope)) return;
|
|
106
|
+
this.#rulesEnsured.add(scope);
|
|
107
|
+
void ensure().catch(() => this.#rulesEnsured.delete(scope));
|
|
108
|
+
}
|
|
109
|
+
|
|
84
110
|
/** A full queue must still respect a review started by a previous generation. */
|
|
85
111
|
async ownsRecall(input: GroupModerationInput): Promise<boolean> {
|
|
86
112
|
const window = await input.state.get<SeenWindow>(`group-moderation:seen:${digest(input.sender)}`);
|
|
@@ -107,7 +133,7 @@ export class GroupModerator {
|
|
|
107
133
|
|
|
108
134
|
async review(input: GroupModerationInput, classify?: (signal: AbortSignal) => Promise<AiCompletionResult>): Promise<void> {
|
|
109
135
|
const { state, management } = input;
|
|
110
|
-
if (!management.inspectGroupMember
|
|
136
|
+
if (!management.inspectGroupMember
|
|
111
137
|
|| !input.messageId || !Number.isSafeInteger(input.sentAt) || input.sentAt <= 0
|
|
112
138
|
|| input.sentAt > Date.now() || Date.now() - input.sentAt >= QUIET_MS
|
|
113
139
|
|| !input.text.trim() || input.text.length > 12_000) return;
|
|
@@ -189,28 +215,33 @@ export class GroupModerator {
|
|
|
189
215
|
&& Date.now() - member.joinedAt <= NEWCOMER_MS;
|
|
190
216
|
// Messages already sent before the last delivered notice cannot advance escalation.
|
|
191
217
|
if (input.sentAt <= stage.notifiedAt) return;
|
|
192
|
-
const count = Math.min(stage.count + 1, 3);
|
|
193
218
|
input.audit({ event: 'group_review', category: review.category, messageId: input.messageId,
|
|
194
219
|
evidence: review.evidence, recall: review.recall, recallReason: review.recallReason });
|
|
195
|
-
|
|
220
|
+
signal.throwIfAborted();
|
|
221
|
+
// Persisted lease predates every side effect. Unknown outcomes retain it, preventing retries.
|
|
222
|
+
effectStarted = true;
|
|
223
|
+
// ADR 0039 §5: punishment belongs to the approved group rule. The enforcer owns its own ladder,
|
|
224
|
+
// mutes only under an approved rule, and turns a newcomer ad into a per-kick approval card.
|
|
225
|
+
if (input.rules) {
|
|
226
|
+
const outcome = await input.rules({ category: review.category, evidence: review.evidence, newcomer,
|
|
227
|
+
...(review.recall ? { recall: input.recall } : {}) });
|
|
228
|
+
if (outcome === 'handled') {
|
|
229
|
+
completed = true;
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
signal.throwIfAborted();
|
|
233
|
+
}
|
|
234
|
+
// No confirmed rule (or no Agent host): remind, then warn. Never mute or kick here.
|
|
235
|
+
if (stage.count >= 2) {
|
|
196
236
|
await state.update<MemberState>(memberKey, (value) => value?.lease === token
|
|
197
237
|
? { ...value, [review.category]: { ...stage, lastViolationAt: input.sentAt } } : value,
|
|
198
238
|
{ ttlMs: QUIET_MS });
|
|
239
|
+
completed = true;
|
|
199
240
|
return;
|
|
200
241
|
}
|
|
201
|
-
|
|
202
|
-
// Persisted lease predates every side effect. Unknown outcomes retain it, preventing retries.
|
|
203
|
-
effectStarted = true;
|
|
204
|
-
if (newcomer) {
|
|
205
|
-
await management.moderateGroupMember(input.group, input.sender, {
|
|
206
|
-
type: 'kick', joinedAt: member.joinedAt!, maxMembershipAgeMs: NEWCOMER_MS,
|
|
207
|
-
}, signal);
|
|
208
|
-
} else if (count === 3) {
|
|
209
|
-
await management.moderateGroupMember(input.group, input.sender, { type: 'mute', durationSeconds: 600 }, signal);
|
|
210
|
-
}
|
|
211
|
-
signal.throwIfAborted();
|
|
242
|
+
const count = stage.count + 1;
|
|
212
243
|
const rule = moderationMessages(input.locale, review.category);
|
|
213
|
-
const action = moderationMessages(input.locale,
|
|
244
|
+
const action = moderationMessages(input.locale, count === 2 ? 'warning' : 'reminder');
|
|
214
245
|
await input.reply(moderationMessages(input.locale, 'notice', { action, rule }), input.sender);
|
|
215
246
|
const notifiedAt = Date.now();
|
|
216
247
|
// Commit the delivered stage and release together, before optional recall.
|
|
@@ -220,7 +251,7 @@ export class GroupModerator {
|
|
|
220
251
|
completed = true;
|
|
221
252
|
claimed = false;
|
|
222
253
|
// Optional recall is independent of escalation and cannot undo a successfully delivered notice.
|
|
223
|
-
if (
|
|
254
|
+
if (review.recall && !signal.aborted) {
|
|
224
255
|
try { await input.recall(); }
|
|
225
256
|
catch { input.audit({ event: 'group_recall_failed', messageId: input.messageId }); }
|
|
226
257
|
}
|
package/src/messages.ts
CHANGED
|
@@ -4,8 +4,6 @@ export const moderationMessages = createMessages({
|
|
|
4
4
|
blocked: { 'zh-CN': '消息含不当内容,已拦截。', en: 'This message contains inappropriate content and was blocked.' },
|
|
5
5
|
advertising: { 'zh-CN': '请勿发布未经请求的广告或引流信息', en: 'Do not post unsolicited advertising or promotional invitations' },
|
|
6
6
|
abuse: { 'zh-CN': '请勿针对他人进行人身攻击', en: 'Do not direct personal attacks at others' },
|
|
7
|
-
kicked: { 'zh-CN': '入群 10 分钟内发布明确广告,已移出群聊', en: 'Removed from the group for posting clear advertising within 10 minutes of joining' },
|
|
8
|
-
muted: { 'zh-CN': '已禁言 10 分钟', en: 'Muted for 10 minutes' },
|
|
9
7
|
warning: { 'zh-CN': '警告', en: 'Warning' },
|
|
10
8
|
reminder: { 'zh-CN': '提醒', en: 'Reminder' },
|
|
11
9
|
notice: { 'zh-CN': '{action}。{rule}。', en: '{action}. {rule}.' },
|