koishi-plugin-guofenbot 1.0.5 → 1.0.7
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 +2 -2
- package/lib/ai/openai.js +92 -47
- package/lib/ai/openai.js.map +1 -1
- package/lib/ai/provider.d.ts +2 -2
- package/lib/ai/provider.js.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/services/monitor.d.ts +5 -0
- package/lib/services/monitor.js +35 -2
- package/lib/services/monitor.js.map +1 -1
- package/lib/types.d.ts +6 -0
- package/package.json +1 -1
package/lib/ai/openai.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Context } from 'koishi';
|
|
2
2
|
import { AIProvider, AIProviderConfig } from './provider';
|
|
3
|
-
import { AnalysisResult, MessageContext, MemberProfileSnapshot } from '../types';
|
|
3
|
+
import { AnalysisResult, MessageContext, MemberProfileSnapshot, ChatHistoryEntry } from '../types';
|
|
4
4
|
export declare class OpenAIProvider extends AIProvider {
|
|
5
5
|
constructor(ctx: Context, config: AIProviderConfig);
|
|
6
|
-
analyzeMessage(rules: string, profiles: MemberProfileSnapshot[], message: MessageContext): Promise<AnalysisResult>;
|
|
6
|
+
analyzeMessage(rules: string, profiles: MemberProfileSnapshot[], chatHistory: ChatHistoryEntry[], message: MessageContext): Promise<AnalysisResult>;
|
|
7
7
|
validateConnection(): Promise<boolean>;
|
|
8
8
|
private buildSystemPrompt;
|
|
9
9
|
private buildUserPrompt;
|
package/lib/ai/openai.js
CHANGED
|
@@ -6,26 +6,29 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
6
6
|
constructor(ctx, config) {
|
|
7
7
|
super(ctx, config);
|
|
8
8
|
}
|
|
9
|
-
async analyzeMessage(rules, profiles, message) {
|
|
9
|
+
async analyzeMessage(rules, profiles, chatHistory, message) {
|
|
10
10
|
const systemPrompt = this.buildSystemPrompt(rules, profiles);
|
|
11
|
-
const userPrompt = this.buildUserPrompt(message);
|
|
11
|
+
const userPrompt = this.buildUserPrompt(chatHistory, message);
|
|
12
12
|
try {
|
|
13
|
-
const response = await
|
|
14
|
-
|
|
15
|
-
messages: [
|
|
16
|
-
{ role: 'system', content: systemPrompt },
|
|
17
|
-
{ role: 'user', content: userPrompt },
|
|
18
|
-
],
|
|
19
|
-
temperature: 0.2,
|
|
20
|
-
max_tokens: 400,
|
|
21
|
-
response_format: { type: 'json_object' },
|
|
22
|
-
}, {
|
|
13
|
+
const response = await fetch(`${this.config.endpoint}/chat/completions`, {
|
|
14
|
+
method: 'POST',
|
|
23
15
|
headers: {
|
|
24
16
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
25
17
|
'Content-Type': 'application/json',
|
|
26
18
|
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
model: this.config.model,
|
|
21
|
+
messages: [
|
|
22
|
+
{ role: 'system', content: systemPrompt },
|
|
23
|
+
{ role: 'user', content: userPrompt },
|
|
24
|
+
],
|
|
25
|
+
temperature: 0.2,
|
|
26
|
+
max_tokens: 500,
|
|
27
|
+
response_format: { type: 'json_object' },
|
|
28
|
+
}),
|
|
27
29
|
});
|
|
28
|
-
const
|
|
30
|
+
const data = await response.json();
|
|
31
|
+
const content = data.choices?.[0]?.message?.content ?? '{}';
|
|
29
32
|
return this.parseResponse(content);
|
|
30
33
|
}
|
|
31
34
|
catch (error) {
|
|
@@ -35,12 +38,12 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
35
38
|
}
|
|
36
39
|
async validateConnection() {
|
|
37
40
|
try {
|
|
38
|
-
await
|
|
41
|
+
const response = await fetch(`${this.config.endpoint}/models`, {
|
|
39
42
|
headers: {
|
|
40
43
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
41
44
|
},
|
|
42
45
|
});
|
|
43
|
-
return
|
|
46
|
+
return response.ok;
|
|
44
47
|
}
|
|
45
48
|
catch {
|
|
46
49
|
return false;
|
|
@@ -66,65 +69,103 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
66
69
|
].join('\n');
|
|
67
70
|
})
|
|
68
71
|
.join('\n');
|
|
69
|
-
return
|
|
72
|
+
return `你是一个专业的群聊安全监测助手。你的核心任务是根据上下文语境、群规则和成员习惯来判定言论是否违规。
|
|
70
73
|
|
|
71
|
-
##
|
|
74
|
+
## 核心能力:上下文感知分析
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
1.
|
|
75
|
-
2.
|
|
76
|
+
每次分析我会提供:
|
|
77
|
+
1. 最近群聊消息上下文(对话氛围分析)
|
|
78
|
+
2. 待分析的目标消息
|
|
79
|
+
3. 群规则
|
|
80
|
+
4. 群成员行为画像
|
|
76
81
|
|
|
77
|
-
|
|
82
|
+
你需要先理解当前群聊的**整体氛围和情绪基调**,再判断目标消息在上下文中是否"过分"或"不合时宜"。
|
|
78
83
|
|
|
79
|
-
|
|
80
|
-
- 某成员经常使用某个词汇,即使该词在其他语境中可能有负面含义,对他来说是正常表达
|
|
81
|
-
- 某成员情绪基线偏消极,突然的负面表达只是其正常风格,不是异常
|
|
82
|
-
- 某成员习惯发短消息,偶尔发长消息是正常变化,不是异常
|
|
83
|
-
- 成员之间的玩笑、熟人互怼 —— 请注意上下文区分玩笑和真正的攻击
|
|
84
|
-
- 讨论新闻时事时提到的敏感词 —— 需要区分"讨论"和"宣扬"
|
|
84
|
+
## ⚠️ 最重要的原则:结合上下文避免误判
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
判定时必须同时考虑三个维度:
|
|
87
|
+
1. **群规则维度**: 消息是否违反群规则?
|
|
88
|
+
2. **上下文维度**: 对话当下的氛围是什么?这条消息在上下文中是否显得突兀或过分?
|
|
89
|
+
3. **个人习惯维度**: 消息是否符合该成员的正常发言风格?
|
|
90
|
+
|
|
91
|
+
常见"在上下文中可能没问题"的场景(请勿误判):
|
|
92
|
+
- 群聊氛围轻松调侃时,成员之间的玩笑互怼
|
|
93
|
+
- 在讨论激烈话题(如球赛、游戏)时,语气激动是正常情绪释放
|
|
94
|
+
- 某成员平时就爱说某个词汇,即使外人看来不太合适,对他来说是口头禅
|
|
95
|
+
- 话题自然过渡时的风格微变
|
|
96
|
+
|
|
97
|
+
"不合时宜"的典型场景(应重点关注):
|
|
98
|
+
- 群聊氛围和谐时,某人突然发出恶意攻击或侮辱性言论
|
|
99
|
+
- 大家正在讨论正经话题时,某人突然插入不相关的骚扰信息
|
|
100
|
+
- 群聊中大部分成员都表现出不满/愤怒时,某人火上浇油
|
|
101
|
+
- 深夜或非活跃时段,陌生人突然发布可疑内容
|
|
102
|
+
|
|
103
|
+
## 群规则
|
|
87
104
|
|
|
88
105
|
${rules || '暂无设定群规则,请以通用的文明聊天标准为判定依据。'}
|
|
89
106
|
|
|
90
|
-
##
|
|
107
|
+
## 群成员行为画像
|
|
91
108
|
|
|
92
109
|
${profileText || '暂无成员数据'}
|
|
93
110
|
|
|
111
|
+
## 情绪与氛围判断指南
|
|
112
|
+
|
|
113
|
+
在分析上下文消息时,你需要评估当前群聊的情绪基调:
|
|
114
|
+
- **和谐/中性**: 正常聊天,没有明显情绪波动
|
|
115
|
+
- **激烈/争论**: 成员观点分歧,但尚未越界
|
|
116
|
+
- **负面/紧张**: 已有成员表现出不满或攻击倾向,需要特别关注新增消息是否升级
|
|
117
|
+
- **轻松/玩笑**: 成员之间互相调侃,此时对"攻击性词汇"的容忍度应适当提高
|
|
118
|
+
|
|
94
119
|
## 判定标准
|
|
95
120
|
|
|
96
|
-
1. **dangerous(危险)**:
|
|
121
|
+
1. **dangerous(危险)**: 在上下文中确实构成了严重违规 —— 明确的诈骗、人身攻击、色情内容、暴力威胁、违法信息。注意:必须确认不是在开玩笑或讨论。
|
|
97
122
|
|
|
98
|
-
2. **suspicious(可疑)**:
|
|
123
|
+
2. **suspicious(可疑)**: 在上下文中显得可疑 —— 不合时宜的诱导私聊、与对话主题无关的广告/推广、可疑链接。注意:如果该成员经常分享链接且与话题相关,则不应判定为可疑。
|
|
99
124
|
|
|
100
|
-
3. **abnormal(异常)**:
|
|
125
|
+
3. **abnormal(异常)**: 消息本身不一定违反规则,但在当前上下文和该成员习惯中显得格格不入 —— 例如平时沉默的人突然激烈攻击、情绪基调与对话氛围严重不符。
|
|
101
126
|
|
|
102
127
|
## 置信度指南
|
|
103
|
-
- 0.9~1.0:
|
|
128
|
+
- 0.9~1.0: 确认违规,结合上下文仍然明显越界
|
|
104
129
|
- 0.7~0.9: 高度可疑,结合上下文大概率违规
|
|
105
|
-
- 0.5~0.7:
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
如果消息在群规则的允许范围内,或者只是成员的正常表达习惯,你必须判定为正常。
|
|
130
|
+
- 0.5~0.7: 存疑,需要人工复核
|
|
131
|
+
- <0.5: 应判定为正常
|
|
109
132
|
|
|
110
133
|
## 输出格式
|
|
111
|
-
只返回JSON
|
|
134
|
+
只返回JSON:
|
|
112
135
|
{
|
|
113
136
|
"isAbnormal": true或false,
|
|
114
137
|
"alertType": "normal"或"dangerous"或"suspicious"或"abnormal",
|
|
115
|
-
"reason": "
|
|
116
|
-
"confidence": 0到1
|
|
117
|
-
"suggestedAction": "none"或"warn"或"mute"或"kick"
|
|
138
|
+
"reason": "判定理由,结合上下文和成员习惯说明",
|
|
139
|
+
"confidence": 0到1,
|
|
140
|
+
"suggestedAction": "none"或"warn"或"mute"或"kick",
|
|
141
|
+
"contextTone": "当前群聊的情绪氛围"
|
|
118
142
|
}`;
|
|
119
143
|
}
|
|
120
|
-
buildUserPrompt(message) {
|
|
144
|
+
buildUserPrompt(chatHistory, message) {
|
|
121
145
|
const time = new Date(message.timestamp).toLocaleString();
|
|
122
|
-
|
|
146
|
+
let contextText = '';
|
|
147
|
+
if (chatHistory.length > 0) {
|
|
148
|
+
contextText = chatHistory
|
|
149
|
+
.map((h) => {
|
|
150
|
+
const t = new Date(h.timestamp).toLocaleTimeString();
|
|
151
|
+
return `[${t}] ${h.username}: ${h.content}`;
|
|
152
|
+
})
|
|
153
|
+
.join('\n');
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
contextText = '(暂无上文,这是群内最近的第一条消息)';
|
|
157
|
+
}
|
|
158
|
+
return `## 最近群聊上下文(按时间顺序)
|
|
159
|
+
|
|
160
|
+
${contextText}
|
|
161
|
+
|
|
162
|
+
## 待分析的目标消息
|
|
163
|
+
|
|
164
|
+
时间: ${time}
|
|
123
165
|
发送者: ${message.username}(ID:${message.userId})
|
|
124
|
-
|
|
125
|
-
消息内容: "${message.content}"
|
|
166
|
+
内容: "${message.content}"
|
|
126
167
|
|
|
127
|
-
|
|
168
|
+
请先评估上文对话的整体氛围和情绪基调,然后判断目标消息在当前上下文中是否"过分"或"不合时宜"。`;
|
|
128
169
|
}
|
|
129
170
|
parseResponse(content) {
|
|
130
171
|
try {
|
|
@@ -138,10 +179,14 @@ ${profileText || '暂无成员数据'}
|
|
|
138
179
|
suggestedAction: 'none',
|
|
139
180
|
};
|
|
140
181
|
}
|
|
182
|
+
let reason = parsed.reason ?? 'AI 检测到异常';
|
|
183
|
+
if (parsed.contextTone) {
|
|
184
|
+
reason = `[氛围: ${parsed.contextTone}] ${reason}`;
|
|
185
|
+
}
|
|
141
186
|
return {
|
|
142
187
|
isAbnormal: true,
|
|
143
188
|
alertType: parsed.alertType ?? 'suspicious',
|
|
144
|
-
reason
|
|
189
|
+
reason,
|
|
145
190
|
confidence: Math.min(1, Math.max(0, parsed.confidence ?? 0.5)),
|
|
146
191
|
suggestedAction: parsed.suggestedAction ?? 'warn',
|
|
147
192
|
};
|
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;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,OAAuB;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"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"}
|
package/lib/ai/provider.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Context } from 'koishi';
|
|
2
|
-
import { AnalysisResult, MessageContext, MemberProfileSnapshot } from '../types';
|
|
2
|
+
import { AnalysisResult, MessageContext, MemberProfileSnapshot, ChatHistoryEntry } from '../types';
|
|
3
3
|
export declare abstract class AIProvider {
|
|
4
4
|
protected ctx: Context;
|
|
5
5
|
protected config: AIProviderConfig;
|
|
6
6
|
constructor(ctx: Context, config: AIProviderConfig);
|
|
7
|
-
abstract analyzeMessage(rules: string, profiles: MemberProfileSnapshot[], message: MessageContext): Promise<AnalysisResult>;
|
|
7
|
+
abstract analyzeMessage(rules: string, profiles: MemberProfileSnapshot[], chatHistory: ChatHistoryEntry[], message: MessageContext): Promise<AnalysisResult>;
|
|
8
8
|
abstract validateConnection(): Promise<boolean>;
|
|
9
9
|
}
|
|
10
10
|
export interface AIProviderConfig {
|
package/lib/ai/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":";;;AAGA,MAAsB,UAAU;IACpB,GAAG,CAAS;IACZ,MAAM,CAAkB;IAElC,YAAY,GAAY,EAAE,MAAwB;QAChD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":";;;AAGA,MAAsB,UAAU;IACpB,GAAG,CAAS;IACZ,MAAM,CAAkB;IAElC,YAAY,GAAY,EAAE,MAAwB;QAChD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CAUF;AAjBD,gCAiBC"}
|
package/lib/index.js
CHANGED
|
@@ -10,7 +10,7 @@ const monitor_1 = require("./services/monitor");
|
|
|
10
10
|
const commands_1 = require("./admin/commands");
|
|
11
11
|
const routes_1 = require("./admin/routes");
|
|
12
12
|
exports.name = 'guofenbot';
|
|
13
|
-
exports.inject = ['database', 'server'
|
|
13
|
+
exports.inject = ['database', 'server'];
|
|
14
14
|
exports.Config = koishi_1.Schema.object({
|
|
15
15
|
aiProvider: koishi_1.Schema.object({
|
|
16
16
|
type: koishi_1.Schema.union(['openai', 'custom']).default('openai').description('AI 提供商类型'),
|
|
@@ -46,6 +46,9 @@ exports.Config = koishi_1.Schema.object({
|
|
|
46
46
|
muteDuration: koishi_1.Schema.number()
|
|
47
47
|
.default(10)
|
|
48
48
|
.description('自动禁言时长 (分钟)'),
|
|
49
|
+
contextSize: koishi_1.Schema.number()
|
|
50
|
+
.default(10)
|
|
51
|
+
.description('传给 AI 的上下文消息数量 (越大分析越准但 token 消耗越多)'),
|
|
49
52
|
}).description('监测配置'),
|
|
50
53
|
});
|
|
51
54
|
function apply(ctx, config) {
|
|
@@ -70,6 +73,7 @@ function apply(ctx, config) {
|
|
|
70
73
|
autoModerate: config.monitor.autoModerate,
|
|
71
74
|
maxViolations: config.monitor.maxViolations,
|
|
72
75
|
muteDuration: config.monitor.muteDuration,
|
|
76
|
+
contextSize: config.monitor.contextSize,
|
|
73
77
|
};
|
|
74
78
|
const monitor = new monitor_1.MonitorService(ctx, aiProvider, ruleManager, profileManager, monitorConfig);
|
|
75
79
|
(0, commands_1.registerAdminCommands)(ctx, ruleManager, profileManager, monitorConfig);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export interface MonitorConfig {
|
|
|
11
11
|
autoModerate: boolean;
|
|
12
12
|
maxViolations: number;
|
|
13
13
|
muteDuration: number;
|
|
14
|
+
contextSize: number;
|
|
14
15
|
}
|
|
15
16
|
export declare class MonitorService {
|
|
16
17
|
private ctx;
|
|
@@ -19,7 +20,11 @@ export declare class MonitorService {
|
|
|
19
20
|
private profileManager;
|
|
20
21
|
private config;
|
|
21
22
|
private cooldownMap;
|
|
23
|
+
private historyMap;
|
|
22
24
|
constructor(ctx: Context, aiProvider: AIProvider, ruleManager: RuleManager, profileManager: ProfileManager, config: MonitorConfig);
|
|
25
|
+
private getHistory;
|
|
26
|
+
private pushHistory;
|
|
27
|
+
private getRecentContext;
|
|
23
28
|
processMessage(message: MessageContext): Promise<void>;
|
|
24
29
|
private getConfidenceThreshold;
|
|
25
30
|
private createAlert;
|
package/lib/services/monitor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MonitorService = void 0;
|
|
4
|
+
const MAX_HISTORY = 50;
|
|
4
5
|
class MonitorService {
|
|
5
6
|
ctx;
|
|
6
7
|
aiProvider;
|
|
@@ -8,6 +9,7 @@ class MonitorService {
|
|
|
8
9
|
profileManager;
|
|
9
10
|
config;
|
|
10
11
|
cooldownMap = new Map();
|
|
12
|
+
historyMap = new Map();
|
|
11
13
|
constructor(ctx, aiProvider, ruleManager, profileManager, config) {
|
|
12
14
|
this.ctx = ctx;
|
|
13
15
|
this.aiProvider = aiProvider;
|
|
@@ -15,14 +17,40 @@ class MonitorService {
|
|
|
15
17
|
this.profileManager = profileManager;
|
|
16
18
|
this.config = config;
|
|
17
19
|
}
|
|
20
|
+
getHistory(guildId) {
|
|
21
|
+
if (!this.historyMap.has(guildId)) {
|
|
22
|
+
this.historyMap.set(guildId, []);
|
|
23
|
+
}
|
|
24
|
+
return this.historyMap.get(guildId);
|
|
25
|
+
}
|
|
26
|
+
pushHistory(guildId, entry) {
|
|
27
|
+
const history = this.getHistory(guildId);
|
|
28
|
+
history.push(entry);
|
|
29
|
+
while (history.length > MAX_HISTORY) {
|
|
30
|
+
history.shift();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
getRecentContext(guildId) {
|
|
34
|
+
const history = this.getHistory(guildId);
|
|
35
|
+
const size = Math.min(this.config.contextSize, history.length);
|
|
36
|
+
return history.slice(-size);
|
|
37
|
+
}
|
|
18
38
|
async processMessage(message) {
|
|
19
39
|
const guildId = message.guildId;
|
|
20
40
|
if (!this.config.enabledGuilds.includes(guildId))
|
|
21
41
|
return;
|
|
42
|
+
const entry = {
|
|
43
|
+
userId: message.userId,
|
|
44
|
+
username: message.username,
|
|
45
|
+
content: message.content,
|
|
46
|
+
timestamp: message.timestamp,
|
|
47
|
+
};
|
|
22
48
|
const cooldownKey = `${guildId}:${message.userId}`;
|
|
23
49
|
const lastCheck = this.cooldownMap.get(cooldownKey) ?? 0;
|
|
24
|
-
if (Date.now() - lastCheck < 3000)
|
|
50
|
+
if (Date.now() - lastCheck < 3000) {
|
|
51
|
+
this.pushHistory(guildId, entry);
|
|
25
52
|
return;
|
|
53
|
+
}
|
|
26
54
|
this.cooldownMap.set(cooldownKey, Date.now());
|
|
27
55
|
try {
|
|
28
56
|
await this.profileManager.updateProfile(guildId, message.userId, message.username, message.content);
|
|
@@ -35,7 +63,8 @@ class MonitorService {
|
|
|
35
63
|
const rule = await this.ruleManager.getRule(guildId);
|
|
36
64
|
if (rule?.content) {
|
|
37
65
|
const profiles = await this.profileManager.getProfileSnapshots(guildId);
|
|
38
|
-
|
|
66
|
+
const chatHistory = this.getRecentContext(guildId);
|
|
67
|
+
analysis = await this.aiProvider.analyzeMessage(rule.content, profiles, chatHistory, message);
|
|
39
68
|
}
|
|
40
69
|
else {
|
|
41
70
|
const profile = await this.profileManager.getProfile(guildId, message.userId);
|
|
@@ -51,13 +80,16 @@ class MonitorService {
|
|
|
51
80
|
};
|
|
52
81
|
}
|
|
53
82
|
else {
|
|
83
|
+
this.pushHistory(guildId, entry);
|
|
54
84
|
return;
|
|
55
85
|
}
|
|
56
86
|
}
|
|
57
87
|
else {
|
|
88
|
+
this.pushHistory(guildId, entry);
|
|
58
89
|
return;
|
|
59
90
|
}
|
|
60
91
|
}
|
|
92
|
+
this.pushHistory(guildId, entry);
|
|
61
93
|
if (!analysis.isAbnormal)
|
|
62
94
|
return;
|
|
63
95
|
if (analysis.confidence < this.getConfidenceThreshold())
|
|
@@ -70,6 +102,7 @@ class MonitorService {
|
|
|
70
102
|
}
|
|
71
103
|
catch (error) {
|
|
72
104
|
this.ctx.logger.error('消息监测处理失败', error);
|
|
105
|
+
this.pushHistory(guildId, entry);
|
|
73
106
|
}
|
|
74
107
|
}
|
|
75
108
|
getConfidenceThreshold() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/services/monitor.ts"],"names":[],"mappings":";;;
|
|
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;SAC7B,CAAA;QAED,MAAM,WAAW,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAE7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CACrC,OAAO,EACP,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,OAAO,CAChB,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;QAED,IAAI,CAAC;YACH,IAAI,QAAwB,CAAA;YAE5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAEpD,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;gBACvE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAClD,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAC7C,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,WAAW,EACX,OAAO,CACR,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBAE7E,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAC/C,OAAO,EACP,OAAO,CAAC,OAAO,EACf,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAA;oBACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;wBACxB,QAAQ,GAAG;4BACT,UAAU,EAAE,IAAI;4BAChB,SAAS,EAAE,UAAU;4BACrB,MAAM,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAC7C,UAAU,EAAE,OAAO,CAAC,KAAK;4BACzB,eAAe,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;yBACvD,CAAA;oBACH,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;wBAChC,OAAM;oBACR,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;oBAChC,OAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAEhC,IAAI,CAAC,QAAQ,CAAC,UAAU;gBAAE,OAAM;YAEhC,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE;gBAAE,OAAM;YAE/D,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAEzC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAE3C,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAChC,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,CAAA;YACtB,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAA;YACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,OAAuB,EACvB,QAAwB;QAExB,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE;YAChD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,OAAO;YAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ,CAAC,eAAe;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAuB,EACvB,QAAwB;QAExB,MAAM,cAAc,GAA8B;YAChD,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,SAAS;SACpB,CAAA;QAED,MAAM,WAAW,GAAgC;YAC/C,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;SACX,CAAA;QAED,MAAM,QAAQ,GAAG;YACf,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACvC,OAAO,OAAO,CAAC,OAAO,EAAE;YACxB,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG;YAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YACtC,OAAO,QAAQ,CAAC,MAAM,EAAE;YACxB,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACjD,SAAS,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;SACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC;YAC3E,OAAO,CAAC,SAAS,EACjB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAED,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBACjD,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,KAAK,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,OAAuB,EACvB,QAAwB;QAExB,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM;YAAE,OAAM;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE;YAClE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAA;QACF,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;QAEpE,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;YACtF,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAA;gBACrD,MAAO,GAAW,CAAC,eAAe,CAChC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,EACd,QAAQ,CACT,CAAA;gBACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAClB,SAAS,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,OAAO,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CACvG,CAAA;gBACD,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAC3C,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAClC,CAAA;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;gBAC/C,MAAO,GAAW,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBACnE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAClB,SAAS,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,OAAO,EAAE,CACrE,CAAA;gBACD,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAC3C,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAClC,CAAA;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAC3C,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAClC,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;CACF;AA5QD,wCA4QC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -50,6 +50,12 @@ export interface MessageContext {
|
|
|
50
50
|
platform: string;
|
|
51
51
|
timestamp: number;
|
|
52
52
|
}
|
|
53
|
+
export interface ChatHistoryEntry {
|
|
54
|
+
userId: string;
|
|
55
|
+
username: string;
|
|
56
|
+
content: string;
|
|
57
|
+
timestamp: number;
|
|
58
|
+
}
|
|
53
59
|
export interface MemberProfileSnapshot {
|
|
54
60
|
userId: string;
|
|
55
61
|
username: string;
|