koishi-plugin-guofenbot 1.0.8 → 1.0.9
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/lib/ai/openai.d.ts +1 -2
- package/lib/ai/openai.js +69 -92
- package/lib/ai/openai.js.map +1 -1
- package/lib/index.js +3 -14
- package/lib/index.js.map +1 -1
- package/lib/services/monitor.d.ts +1 -0
- package/lib/services/monitor.js +22 -3
- package/lib/services/monitor.js.map +1 -1
- package/lib/types.d.ts +0 -2
- package/package.json +1 -1
package/lib/ai/openai.d.ts
CHANGED
|
@@ -6,8 +6,7 @@ export declare class OpenAIProvider extends AIProvider {
|
|
|
6
6
|
analyzeMessage(rules: string, profiles: MemberProfileSnapshot[], chatHistory: ChatHistoryEntry[], message: MessageContext): Promise<AnalysisResult>;
|
|
7
7
|
validateConnection(): Promise<boolean>;
|
|
8
8
|
private buildSystemPrompt;
|
|
9
|
-
private
|
|
10
|
-
private toTextContent;
|
|
9
|
+
private buildUserPrompt;
|
|
11
10
|
private parseResponse;
|
|
12
11
|
private fallbackAnalysis;
|
|
13
12
|
}
|
package/lib/ai/openai.js
CHANGED
|
@@ -8,19 +8,10 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
8
8
|
}
|
|
9
9
|
async analyzeMessage(rules, profiles, chatHistory, message) {
|
|
10
10
|
const systemPrompt = this.buildSystemPrompt(rules, profiles);
|
|
11
|
-
const
|
|
12
|
-
const hasImages = message.imageUrls.length > 0 ||
|
|
13
|
-
chatHistory.some((h) => h.imageUrls.length > 0);
|
|
14
|
-
const messages = [
|
|
15
|
-
{ role: 'system', content: systemPrompt },
|
|
16
|
-
];
|
|
17
|
-
if (hasImages) {
|
|
18
|
-
messages.push({ role: 'user', content: userContent });
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
messages.push({ role: 'user', content: this.toTextContent(userContent) });
|
|
22
|
-
}
|
|
11
|
+
const userPrompt = this.buildUserPrompt(chatHistory, message);
|
|
23
12
|
try {
|
|
13
|
+
this.ctx.logger.info(`[AI分析] 正在分析 ${message.username} 的消息 | 上下文${chatHistory.length}条 | 画像${profiles.length}人`);
|
|
14
|
+
const startTime = Date.now();
|
|
24
15
|
const response = await fetch(`${this.config.endpoint}/chat/completions`, {
|
|
25
16
|
method: 'POST',
|
|
26
17
|
headers: {
|
|
@@ -29,24 +20,34 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
29
20
|
},
|
|
30
21
|
body: JSON.stringify({
|
|
31
22
|
model: this.config.model,
|
|
32
|
-
messages
|
|
23
|
+
messages: [
|
|
24
|
+
{ role: 'system', content: systemPrompt },
|
|
25
|
+
{ role: 'user', content: userPrompt },
|
|
26
|
+
],
|
|
33
27
|
temperature: 0.2,
|
|
34
28
|
max_tokens: 500,
|
|
29
|
+
response_format: { type: 'json_object' },
|
|
35
30
|
}),
|
|
36
31
|
});
|
|
37
32
|
const data = await response.json();
|
|
38
33
|
const content = data.choices?.[0]?.message?.content ?? '{}';
|
|
34
|
+
const elapsed = Date.now() - startTime;
|
|
35
|
+
this.ctx.logger.info(`[AI响应] 耗时${elapsed}ms | 原始结果: ${content}`);
|
|
39
36
|
return this.parseResponse(content);
|
|
40
37
|
}
|
|
41
38
|
catch (error) {
|
|
42
39
|
this.ctx.logger.warn('AI 分析请求失败,回退到本地规则检测', error);
|
|
43
|
-
|
|
40
|
+
const fallback = this.fallbackAnalysis(message);
|
|
41
|
+
this.ctx.logger.info(`[本地兜底] ${message.username} | ${fallback.isAbnormal ? fallback.alertType : '正常'} | ${fallback.reason || '无'}`);
|
|
42
|
+
return fallback;
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
async validateConnection() {
|
|
47
46
|
try {
|
|
48
47
|
const response = await fetch(`${this.config.endpoint}/models`, {
|
|
49
|
-
headers: {
|
|
48
|
+
headers: {
|
|
49
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
50
|
+
},
|
|
50
51
|
});
|
|
51
52
|
return response.ok;
|
|
52
53
|
}
|
|
@@ -74,45 +75,40 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
74
75
|
].join('\n');
|
|
75
76
|
})
|
|
76
77
|
.join('\n');
|
|
77
|
-
return
|
|
78
|
+
return `你是一个专业的群聊安全监测助手。你的核心任务是根据上下文语境、群规则和成员习惯来判定言论是否违规。
|
|
78
79
|
|
|
79
|
-
##
|
|
80
|
+
## 核心能力:上下文感知分析
|
|
80
81
|
|
|
81
82
|
每次分析我会提供:
|
|
82
|
-
1.
|
|
83
|
-
2.
|
|
83
|
+
1. 最近群聊消息上下文(对话氛围分析)
|
|
84
|
+
2. 待分析的目标消息
|
|
84
85
|
3. 群规则
|
|
85
86
|
4. 群成员行为画像
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
- 色情、裸露、淫秽图像
|
|
89
|
-
- 暴力、血腥、恐怖图像
|
|
90
|
-
- 违法广告、赌博、诈骗宣传图
|
|
91
|
-
- 二维码/链接诱导图
|
|
92
|
-
- 侮辱性、歧视性表情包或P图
|
|
93
|
-
- 涉政敏感图像
|
|
88
|
+
你需要先理解当前群聊的**整体氛围和情绪基调**,再判断目标消息在上下文中是否"过分"或"不合时宜"。
|
|
94
89
|
|
|
95
|
-
##
|
|
90
|
+
## ⚠️ 最重要的原则:结合上下文避免误判
|
|
96
91
|
|
|
97
92
|
判定时必须同时考虑三个维度:
|
|
98
|
-
1. **群规则维度**:
|
|
99
|
-
2. **上下文维度**:
|
|
100
|
-
3. **个人习惯维度**:
|
|
93
|
+
1. **群规则维度**: 消息是否违反群规则?
|
|
94
|
+
2. **上下文维度**: 对话当下的氛围是什么?这条消息在上下文中是否显得突兀或过分?
|
|
95
|
+
3. **个人习惯维度**: 消息是否符合该成员的正常发言风格?
|
|
101
96
|
|
|
102
97
|
常见"在上下文中可能没问题"的场景(请勿误判):
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
98
|
+
- 群聊氛围轻松调侃时,成员之间的玩笑互怼
|
|
99
|
+
- 在讨论激烈话题(如球赛、游戏)时,语气激动是正常情绪释放
|
|
100
|
+
- 某成员平时就爱说某个词汇,即使外人看来不太合适,对他来说是口头禅
|
|
101
|
+
- 话题自然过渡时的风格微变
|
|
107
102
|
|
|
108
103
|
"不合时宜"的典型场景(应重点关注):
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
104
|
+
- 群聊氛围和谐时,某人突然发出恶意攻击或侮辱性言论
|
|
105
|
+
- 大家正在讨论正经话题时,某人突然插入不相关的骚扰信息
|
|
106
|
+
- 群聊中大部分成员都表现出不满/愤怒时,某人火上浇油
|
|
107
|
+
- 深夜或非活跃时段,陌生人突然发布可疑内容
|
|
112
108
|
|
|
113
109
|
## 群规则
|
|
114
110
|
|
|
115
|
-
${rules || '
|
|
111
|
+
${rules || '暂无设定群规则,请以通用的文明聊天标准为判定依据。'}
|
|
116
112
|
|
|
117
113
|
## 群成员行为画像
|
|
118
114
|
|
|
@@ -120,71 +116,62 @@ ${profileText || '暂无成员数据'}
|
|
|
120
116
|
|
|
121
117
|
## 情绪与氛围判断指南
|
|
122
118
|
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
119
|
+
在分析上下文消息时,你需要评估当前群聊的情绪基调:
|
|
120
|
+
- **和谐/中性**: 正常聊天,没有明显情绪波动
|
|
121
|
+
- **激烈/争论**: 成员观点分歧,但尚未越界
|
|
122
|
+
- **负面/紧张**: 已有成员表现出不满或攻击倾向,需要特别关注新增消息是否升级
|
|
123
|
+
- **轻松/玩笑**: 成员之间互相调侃,此时对"攻击性词汇"的容忍度应适当提高
|
|
127
124
|
|
|
128
125
|
## 判定标准
|
|
129
126
|
|
|
130
|
-
1. **dangerous(危险)**:
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
1. **dangerous(危险)**: 在上下文中确实构成了严重违规 —— 明确的诈骗、人身攻击、色情内容、暴力威胁、违法信息。注意:必须确认不是在开玩笑或讨论。
|
|
128
|
+
|
|
129
|
+
2. **suspicious(可疑)**: 在上下文中显得可疑 —— 不合时宜的诱导私聊、与对话主题无关的广告/推广、可疑链接。注意:如果该成员经常分享链接且与话题相关,则不应判定为可疑。
|
|
130
|
+
|
|
131
|
+
3. **abnormal(异常)**: 消息本身不一定违反规则,但在当前上下文和该成员习惯中显得格格不入 —— 例如平时沉默的人突然激烈攻击、情绪基调与对话氛围严重不符。
|
|
133
132
|
|
|
134
133
|
## 置信度指南
|
|
135
|
-
- 0.9~1.0:
|
|
136
|
-
- 0.7~0.9:
|
|
137
|
-
- 0.5~0.7:
|
|
138
|
-
- <0.5:
|
|
134
|
+
- 0.9~1.0: 确认违规,结合上下文仍然明显越界
|
|
135
|
+
- 0.7~0.9: 高度可疑,结合上下文大概率违规
|
|
136
|
+
- 0.5~0.7: 存疑,需要人工复核
|
|
137
|
+
- <0.5: 应判定为正常
|
|
139
138
|
|
|
140
139
|
## 输出格式
|
|
141
140
|
只返回JSON:
|
|
142
141
|
{
|
|
143
142
|
"isAbnormal": true或false,
|
|
144
143
|
"alertType": "normal"或"dangerous"或"suspicious"或"abnormal",
|
|
145
|
-
"reason": "
|
|
144
|
+
"reason": "判定理由,结合上下文和成员习惯说明",
|
|
146
145
|
"confidence": 0到1,
|
|
147
146
|
"suggestedAction": "none"或"warn"或"mute"或"kick",
|
|
148
147
|
"contextTone": "当前群聊的情绪氛围"
|
|
149
148
|
}`;
|
|
150
149
|
}
|
|
151
|
-
|
|
152
|
-
const parts = [];
|
|
150
|
+
buildUserPrompt(chatHistory, message) {
|
|
153
151
|
const time = new Date(message.timestamp).toLocaleString();
|
|
154
|
-
|
|
152
|
+
let contextText = '';
|
|
155
153
|
if (chatHistory.length > 0) {
|
|
156
|
-
|
|
154
|
+
contextText = chatHistory
|
|
155
|
+
.map((h) => {
|
|
157
156
|
const t = new Date(h.timestamp).toLocaleTimeString();
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
parts.push({ type: 'image_url', image_url: { url: imgUrl, detail: 'low' } });
|
|
162
|
-
}
|
|
163
|
-
}
|
|
157
|
+
return `[${t}] ${h.username}: ${h.content}`;
|
|
158
|
+
})
|
|
159
|
+
.join('\n');
|
|
164
160
|
}
|
|
165
161
|
else {
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
parts.push({ type: 'text', text: '\n## 待分析的目标消息\n' });
|
|
169
|
-
parts.push({ type: 'text', text: `时间: ${time}\n发送者: ${message.username}(ID:${message.userId})\n` });
|
|
170
|
-
if (message.content) {
|
|
171
|
-
parts.push({ type: 'text', text: `文本内容: "${message.content}"\n` });
|
|
162
|
+
contextText = '(暂无上文,这是群内最近的第一条消息)';
|
|
172
163
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
return parts
|
|
185
|
-
.filter((p) => p.type === 'text')
|
|
186
|
-
.map((p) => p.text)
|
|
187
|
-
.join('');
|
|
164
|
+
return `## 最近群聊上下文(按时间顺序)
|
|
165
|
+
|
|
166
|
+
${contextText}
|
|
167
|
+
|
|
168
|
+
## 待分析的目标消息
|
|
169
|
+
|
|
170
|
+
时间: ${time}
|
|
171
|
+
发送者: ${message.username}(ID:${message.userId})
|
|
172
|
+
内容: "${message.content}"
|
|
173
|
+
|
|
174
|
+
请先评估上文对话的整体氛围和情绪基调,然后判断目标消息在当前上下文中是否"过分"或"不合时宜"。`;
|
|
188
175
|
}
|
|
189
176
|
parseResponse(content) {
|
|
190
177
|
try {
|
|
@@ -221,7 +208,6 @@ ${profileText || '暂无成员数据'}
|
|
|
221
208
|
}
|
|
222
209
|
}
|
|
223
210
|
fallbackAnalysis(message) {
|
|
224
|
-
const hasImages = message.imageUrls.length > 0;
|
|
225
211
|
const criticalPatterns = [
|
|
226
212
|
{ pattern: /转账|银行卡号|密码|验证码|身份证号/, type: 'dangerous', action: 'kick', confidence: 0.95 },
|
|
227
213
|
{ pattern: /加我(微信|QQ|好友)|扫码(加|添加|领)|免费.*(领|送)/, type: 'suspicious', action: 'warn', confidence: 0.7 },
|
|
@@ -234,21 +220,12 @@ ${profileText || '暂无成员数据'}
|
|
|
234
220
|
return {
|
|
235
221
|
isAbnormal: true,
|
|
236
222
|
alertType: kw.type,
|
|
237
|
-
reason:
|
|
223
|
+
reason: `本地规则匹配`,
|
|
238
224
|
confidence: kw.confidence,
|
|
239
225
|
suggestedAction: kw.action,
|
|
240
226
|
};
|
|
241
227
|
}
|
|
242
228
|
}
|
|
243
|
-
if (hasImages && !message.content.trim()) {
|
|
244
|
-
return {
|
|
245
|
-
isAbnormal: true,
|
|
246
|
-
alertType: 'suspicious',
|
|
247
|
-
reason: '纯图片消息,本地无法分析,需要通过 AI 视觉审查',
|
|
248
|
-
confidence: 0.55,
|
|
249
|
-
suggestedAction: 'warn',
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
229
|
return {
|
|
253
230
|
isAbnormal: false,
|
|
254
231
|
alertType: 'suspicious',
|
package/lib/ai/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":";;;AACA,yCAAyD;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":";;;AACA,yCAAyD;AAGzD,MAAa,cAAe,SAAQ,qBAAU;IAC5C,YAAY,GAAY,EAAE,MAAwB;QAChD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,QAAiC,EACjC,WAA+B,EAC/B,OAAuB;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAE7D,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAClB,eAAe,OAAO,CAAC,QAAQ,aAAa,WAAW,CAAC,MAAM,SAAS,QAAQ,CAAC,MAAM,GAAG,CAC1F,CAAA;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,mBAAmB,EAC1C;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC7C,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;wBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;qBACtC;oBACD,WAAW,EAAE,GAAG;oBAChB,UAAU,EAAE,GAAG;oBACf,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;iBACzC,CAAC;aACH,CACF,CAAA;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAA;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAA;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAClB,YAAY,OAAO,cAAc,OAAO,EAAE,CAC3C,CAAA;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAClB,UAAU,OAAO,CAAC,QAAQ,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAC9G,CAAA;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,SAAS,EAAE;gBAC7D,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;iBAC9C;aACF,CAAC,CAAA;YACF,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,KAAa,EAAE,QAAiC;QACxE,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;iBAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC,CAAA;YACZ,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7D,OAAO;gBACL,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,MAAM,GAAG;gBACnC,aAAa,CAAC,CAAC,YAAY,EAAE;gBAC7B,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC/C,YAAY,QAAQ,IAAI,IAAI,EAAE;gBAC9B,aAAa,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;gBACpE,aAAa,KAAK,GAAG;gBACrB,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,EAAE,EAAE;aAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCT,KAAK,IAAI,2BAA2B;;;;EAIpC,WAAW,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCvB,CAAA;IACA,CAAC;IAEO,eAAe,CAAC,WAA+B,EAAE,OAAuB;QAC9E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAA;QAEzD,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,WAAW;iBACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAA;gBACpD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;YAC7C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,qBAAqB,CAAA;QACrC,CAAC;QAED,OAAO;;EAET,WAAW;;;;MAIP,IAAI;OACH,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC,MAAM;OACrC,OAAO,CAAC,OAAO;;iDAE2B,CAAA;IAC/C,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxD,OAAO;oBACL,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,YAAY;oBACvB,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,CAAC;oBACb,eAAe,EAAE,MAAM;iBACxB,CAAA;YACH,CAAC;YACD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,CAAA;YACxC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,MAAM,GAAG,QAAQ,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAA;YAClD,CAAC;YACD,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY;gBAC3C,MAAM;gBACN,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;gBAC9D,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM;aAClD,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,YAAY;gBACvB,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;gBACb,eAAe,EAAE,MAAM;aACxB,CAAA;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAuB;QAC9C,MAAM,gBAAgB,GAAG;YACvB,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,WAAoB,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,IAAI,EAAE;YACzG,EAAE,OAAO,EAAE,mCAAmC,EAAE,IAAI,EAAE,YAAqB,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,GAAG,EAAE;YACvH,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAoB,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,IAAI,EAAE;YACjG,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAoB,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,IAAI,EAAE;YAC5G,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,YAAqB,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,GAAG,EAAE;SAC9G,CAAA;QAED,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAClC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,EAAE,CAAC,IAAI;oBAClB,MAAM,EAAE,QAAQ;oBAChB,UAAU,EAAE,EAAE,CAAC,UAAU;oBACzB,eAAe,EAAE,EAAE,CAAC,MAAM;iBAC3B,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,CAAC;YACb,eAAe,EAAE,MAAM;SACxB,CAAA;IACH,CAAC;CACF;AA/PD,wCA+PC"}
|
package/lib/index.js
CHANGED
|
@@ -80,26 +80,15 @@ function apply(ctx, config) {
|
|
|
80
80
|
(0, routes_1.registerHttpRoutes)(ctx, ruleManager, profileManager, monitorConfig);
|
|
81
81
|
ctx.logger.info('后台管理 API 已启用: /api/guofenbot/*');
|
|
82
82
|
ctx.middleware(async (session, next) => {
|
|
83
|
-
if (!session?.guildId || !session?.userId)
|
|
83
|
+
if (!session?.guildId || !session?.userId || !session?.content)
|
|
84
84
|
return next();
|
|
85
|
-
|
|
86
|
-
if (textContent.startsWith('/') || textContent.startsWith('guofen'))
|
|
85
|
+
if (!session.content.trim() || session.content.startsWith('/') || session.content.startsWith('guofen')) {
|
|
87
86
|
return next();
|
|
88
|
-
const imageUrls = [];
|
|
89
|
-
if (session.elements) {
|
|
90
|
-
for (const el of session.elements) {
|
|
91
|
-
if (el.type === 'img' && el.attrs?.src) {
|
|
92
|
-
imageUrls.push(el.attrs.src);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
87
|
}
|
|
96
|
-
if (!textContent && imageUrls.length === 0)
|
|
97
|
-
return next();
|
|
98
88
|
await monitor.processMessage({
|
|
99
89
|
userId: session.userId,
|
|
100
90
|
username: session.username ?? session.userId,
|
|
101
|
-
content:
|
|
102
|
-
imageUrls,
|
|
91
|
+
content: session.content,
|
|
103
92
|
guildId: session.guildId,
|
|
104
93
|
channelId: session.channelId ?? '',
|
|
105
94
|
platform: session.platform ?? '',
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA4DA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/services/monitor.js
CHANGED
|
@@ -43,7 +43,6 @@ class MonitorService {
|
|
|
43
43
|
userId: message.userId,
|
|
44
44
|
username: message.username,
|
|
45
45
|
content: message.content,
|
|
46
|
-
imageUrls: message.imageUrls,
|
|
47
46
|
timestamp: message.timestamp,
|
|
48
47
|
};
|
|
49
48
|
const cooldownKey = `${guildId}:${message.userId}`;
|
|
@@ -62,14 +61,17 @@ class MonitorService {
|
|
|
62
61
|
try {
|
|
63
62
|
let analysis;
|
|
64
63
|
const rule = await this.ruleManager.getRule(guildId);
|
|
64
|
+
const chatHistory = this.getRecentContext(guildId);
|
|
65
65
|
if (rule?.content) {
|
|
66
66
|
const profiles = await this.profileManager.getProfileSnapshots(guildId);
|
|
67
|
-
|
|
67
|
+
this.ctx.logger.info(`[检测] 群${guildId} | ${message.username} | 消息:"${message.content.slice(0, 50)}${message.content.length > 50 ? '...' : ''}" | 上下文${chatHistory.length}条 | 画像${profiles.length}人`);
|
|
68
68
|
analysis = await this.aiProvider.analyzeMessage(rule.content, profiles, chatHistory, message);
|
|
69
|
+
this.logAnalysis(guildId, message, analysis);
|
|
69
70
|
}
|
|
70
71
|
else {
|
|
71
72
|
const profile = await this.profileManager.getProfile(guildId, message.userId);
|
|
72
73
|
if (profile && profile.messageCount > 5) {
|
|
74
|
+
this.ctx.logger.info(`[本地检测] 群${guildId} | ${message.username} | 消息:"${message.content.slice(0, 50)}${message.content.length > 50 ? '...' : ''}" | 发言${profile.messageCount}次 | 情绪基线${profile.sentimentBaseline.toFixed(2)}`);
|
|
73
75
|
const anomaly = this.profileManager.detectAnomaly(profile, message.content, this.config.sensitivity);
|
|
74
76
|
if (anomaly.isAnomalous) {
|
|
75
77
|
analysis = {
|
|
@@ -79,8 +81,10 @@ class MonitorService {
|
|
|
79
81
|
confidence: anomaly.score,
|
|
80
82
|
suggestedAction: anomaly.score > 0.8 ? 'mute' : 'warn',
|
|
81
83
|
};
|
|
84
|
+
this.logAnalysis(guildId, message, analysis);
|
|
82
85
|
}
|
|
83
86
|
else {
|
|
87
|
+
this.ctx.logger.info(`[本地检测] 群${guildId} | ${message.username} | ✅ 正常 | 异常分${anomaly.score.toFixed(2)} | 偏离: ${anomaly.reasons.join(', ') || '无'}`);
|
|
84
88
|
this.pushHistory(guildId, entry);
|
|
85
89
|
return;
|
|
86
90
|
}
|
|
@@ -93,11 +97,14 @@ class MonitorService {
|
|
|
93
97
|
this.pushHistory(guildId, entry);
|
|
94
98
|
if (!analysis.isAbnormal)
|
|
95
99
|
return;
|
|
96
|
-
if (analysis.confidence < this.getConfidenceThreshold())
|
|
100
|
+
if (analysis.confidence < this.getConfidenceThreshold()) {
|
|
101
|
+
this.ctx.logger.info(`[跳过] 群${guildId} | ${message.username} | ${analysis.alertType} | 置信度${(analysis.confidence * 100).toFixed(0)}%低于阈值${(this.getConfidenceThreshold() * 100).toFixed(0)}% | ${analysis.reason}`);
|
|
97
102
|
return;
|
|
103
|
+
}
|
|
98
104
|
await this.createAlert(message, analysis);
|
|
99
105
|
await this.dispatchAlert(message, analysis);
|
|
100
106
|
if (this.config.autoModerate) {
|
|
107
|
+
this.ctx.logger.info(`[自动处理] 群${guildId} | ${message.username} | 执行${analysis.suggestedAction} | ${analysis.reason}`);
|
|
101
108
|
await this.autoHandle(message, analysis);
|
|
102
109
|
}
|
|
103
110
|
}
|
|
@@ -113,6 +120,18 @@ class MonitorService {
|
|
|
113
120
|
case 'high': return 0.5;
|
|
114
121
|
}
|
|
115
122
|
}
|
|
123
|
+
logAnalysis(guildId, message, analysis) {
|
|
124
|
+
const emoji = analysis.isAbnormal ? '🚨' : '✅';
|
|
125
|
+
const alertTypeLabel = {
|
|
126
|
+
suspicious: '可疑',
|
|
127
|
+
dangerous: '危险',
|
|
128
|
+
abnormal: '异常',
|
|
129
|
+
};
|
|
130
|
+
const status = analysis.isAbnormal
|
|
131
|
+
? `${alertTypeLabel[analysis.alertType]} 置信度${(analysis.confidence * 100).toFixed(0)}%`
|
|
132
|
+
: '正常';
|
|
133
|
+
this.ctx.logger.info(`[${emoji}分析] 群${guildId} | ${message.username} | ${status} | ${analysis.reason || '无异常'}`);
|
|
134
|
+
}
|
|
116
135
|
async createAlert(message, analysis) {
|
|
117
136
|
await this.ctx.database.create('guofenbot_alert', {
|
|
118
137
|
guildId: message.guildId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/services/monitor.ts"],"names":[],"mappings":";;;AAyBA,MAAM,WAAW,GAAG,EAAE,CAAA;AAEtB,MAAa,cAAc;IACjB,GAAG,CAAS;IACZ,UAAU,CAAY;IACtB,WAAW,CAAa;IACxB,cAAc,CAAgB;IAC9B,MAAM,CAAe;IACrB,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAA;IAC5C,UAAU,GAAoC,IAAI,GAAG,EAAE,CAAA;IAE/D,YACE,GAAY,EACZ,UAAsB,EACtB,WAAwB,EACxB,cAA8B,EAC9B,MAAqB;QAErB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEO,UAAU,CAAC,OAAe;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;IACtC,CAAC;IAEO,WAAW,CAAC,OAAe,EAAE,KAAuB;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAuB;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAM;QAExD,MAAM,KAAK,GAAqB;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/services/monitor.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -45,7 +45,6 @@ export interface MessageContext {
|
|
|
45
45
|
userId: string;
|
|
46
46
|
username: string;
|
|
47
47
|
content: string;
|
|
48
|
-
imageUrls: string[];
|
|
49
48
|
guildId: string;
|
|
50
49
|
channelId: string;
|
|
51
50
|
platform: string;
|
|
@@ -55,7 +54,6 @@ export interface ChatHistoryEntry {
|
|
|
55
54
|
userId: string;
|
|
56
55
|
username: string;
|
|
57
56
|
content: string;
|
|
58
|
-
imageUrls: string[];
|
|
59
57
|
timestamp: number;
|
|
60
58
|
}
|
|
61
59
|
export interface MemberProfileSnapshot {
|