koishi-plugin-guofenbot 1.0.4 → 1.0.6
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 +114 -34
- 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,9 +6,9 @@ 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
13
|
const response = await this.ctx.http.post(`${this.config.endpoint}/chat/completions`, {
|
|
14
14
|
model: this.config.model,
|
|
@@ -16,8 +16,8 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
16
16
|
{ role: 'system', content: systemPrompt },
|
|
17
17
|
{ role: 'user', content: userPrompt },
|
|
18
18
|
],
|
|
19
|
-
temperature: 0.
|
|
20
|
-
max_tokens:
|
|
19
|
+
temperature: 0.2,
|
|
20
|
+
max_tokens: 500,
|
|
21
21
|
response_format: { type: 'json_object' },
|
|
22
22
|
}, {
|
|
23
23
|
headers: {
|
|
@@ -26,7 +26,7 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
26
26
|
},
|
|
27
27
|
});
|
|
28
28
|
const content = response.choices?.[0]?.message?.content ?? '{}';
|
|
29
|
-
return this.parseResponse(content
|
|
29
|
+
return this.parseResponse(content);
|
|
30
30
|
}
|
|
31
31
|
catch (error) {
|
|
32
32
|
this.ctx.logger.warn('AI 分析请求失败,回退到本地规则检测', error);
|
|
@@ -51,44 +51,120 @@ class OpenAIProvider extends provider_1.AIProvider {
|
|
|
51
51
|
.map((p) => {
|
|
52
52
|
const topWords = Object.entries(p.commonWords)
|
|
53
53
|
.sort((a, b) => b[1] - a[1])
|
|
54
|
-
.slice(0,
|
|
54
|
+
.slice(0, 15)
|
|
55
55
|
.map(([w]) => w)
|
|
56
56
|
.join('、');
|
|
57
|
-
|
|
57
|
+
const hours = p.activeHours.sort((a, b) => a - b).join('时, ');
|
|
58
|
+
return [
|
|
59
|
+
` - ${p.username}(ID:${p.userId})`,
|
|
60
|
+
` 发言次数: ${p.messageCount}`,
|
|
61
|
+
` 平均消息长度: ${p.avgMessageLength.toFixed(1)}字`,
|
|
62
|
+
` 常用词: ${topWords || '暂无'}`,
|
|
63
|
+
` 情绪基线: ${p.sentimentBaseline.toFixed(2)} (范围-1到1, 负值偏消极, 正值偏积极)`,
|
|
64
|
+
` 活跃时段: ${hours}时`,
|
|
65
|
+
` 最后发言: ${new Date(p.lastMessageTime).toLocaleString()}`,
|
|
66
|
+
].join('\n');
|
|
58
67
|
})
|
|
59
68
|
.join('\n');
|
|
60
|
-
return
|
|
69
|
+
return `你是一个专业的群聊安全监测助手。你的核心任务是根据上下文语境、群规则和成员习惯来判定言论是否违规。
|
|
70
|
+
|
|
71
|
+
## 核心能力:上下文感知分析
|
|
72
|
+
|
|
73
|
+
每次分析我会提供:
|
|
74
|
+
1. 最近群聊消息上下文(对话氛围分析)
|
|
75
|
+
2. 待分析的目标消息
|
|
76
|
+
3. 群规则
|
|
77
|
+
4. 群成员行为画像
|
|
78
|
+
|
|
79
|
+
你需要先理解当前群聊的**整体氛围和情绪基调**,再判断目标消息在上下文中是否"过分"或"不合时宜"。
|
|
80
|
+
|
|
81
|
+
## ⚠️ 最重要的原则:结合上下文避免误判
|
|
82
|
+
|
|
83
|
+
判定时必须同时考虑三个维度:
|
|
84
|
+
1. **群规则维度**: 消息是否违反群规则?
|
|
85
|
+
2. **上下文维度**: 对话当下的氛围是什么?这条消息在上下文中是否显得突兀或过分?
|
|
86
|
+
3. **个人习惯维度**: 消息是否符合该成员的正常发言风格?
|
|
87
|
+
|
|
88
|
+
常见"在上下文中可能没问题"的场景(请勿误判):
|
|
89
|
+
- 群聊氛围轻松调侃时,成员之间的玩笑互怼
|
|
90
|
+
- 在讨论激烈话题(如球赛、游戏)时,语气激动是正常情绪释放
|
|
91
|
+
- 某成员平时就爱说某个词汇,即使外人看来不太合适,对他来说是口头禅
|
|
92
|
+
- 话题自然过渡时的风格微变
|
|
93
|
+
|
|
94
|
+
"不合时宜"的典型场景(应重点关注):
|
|
95
|
+
- 群聊氛围和谐时,某人突然发出恶意攻击或侮辱性言论
|
|
96
|
+
- 大家正在讨论正经话题时,某人突然插入不相关的骚扰信息
|
|
97
|
+
- 群聊中大部分成员都表现出不满/愤怒时,某人火上浇油
|
|
98
|
+
- 深夜或非活跃时段,陌生人突然发布可疑内容
|
|
61
99
|
|
|
62
100
|
## 群规则
|
|
63
|
-
|
|
101
|
+
|
|
102
|
+
${rules || '暂无设定群规则,请以通用的文明聊天标准为判定依据。'}
|
|
64
103
|
|
|
65
104
|
## 群成员行为画像
|
|
105
|
+
|
|
66
106
|
${profileText || '暂无成员数据'}
|
|
67
107
|
|
|
108
|
+
## 情绪与氛围判断指南
|
|
109
|
+
|
|
110
|
+
在分析上下文消息时,你需要评估当前群聊的情绪基调:
|
|
111
|
+
- **和谐/中性**: 正常聊天,没有明显情绪波动
|
|
112
|
+
- **激烈/争论**: 成员观点分歧,但尚未越界
|
|
113
|
+
- **负面/紧张**: 已有成员表现出不满或攻击倾向,需要特别关注新增消息是否升级
|
|
114
|
+
- **轻松/玩笑**: 成员之间互相调侃,此时对"攻击性词汇"的容忍度应适当提高
|
|
115
|
+
|
|
68
116
|
## 判定标准
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
117
|
+
|
|
118
|
+
1. **dangerous(危险)**: 在上下文中确实构成了严重违规 —— 明确的诈骗、人身攻击、色情内容、暴力威胁、违法信息。注意:必须确认不是在开玩笑或讨论。
|
|
119
|
+
|
|
120
|
+
2. **suspicious(可疑)**: 在上下文中显得可疑 —— 不合时宜的诱导私聊、与对话主题无关的广告/推广、可疑链接。注意:如果该成员经常分享链接且与话题相关,则不应判定为可疑。
|
|
121
|
+
|
|
122
|
+
3. **abnormal(异常)**: 消息本身不一定违反规则,但在当前上下文和该成员习惯中显得格格不入 —— 例如平时沉默的人突然激烈攻击、情绪基调与对话氛围严重不符。
|
|
123
|
+
|
|
124
|
+
## 置信度指南
|
|
125
|
+
- 0.9~1.0: 确认违规,结合上下文仍然明显越界
|
|
126
|
+
- 0.7~0.9: 高度可疑,结合上下文大概率违规
|
|
127
|
+
- 0.5~0.7: 存疑,需要人工复核
|
|
128
|
+
- <0.5: 应判定为正常
|
|
72
129
|
|
|
73
130
|
## 输出格式
|
|
74
|
-
|
|
131
|
+
只返回JSON:
|
|
75
132
|
{
|
|
76
133
|
"isAbnormal": true或false,
|
|
77
134
|
"alertType": "normal"或"dangerous"或"suspicious"或"abnormal",
|
|
78
|
-
"reason": "
|
|
79
|
-
"confidence": 0到1
|
|
80
|
-
"suggestedAction": "none"或"warn"或"mute"或"kick"
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
如果消息完全正常,设置 isAbnormal 为 false,alertType 为 "normal",confidence 为 1。`;
|
|
135
|
+
"reason": "判定理由,结合上下文和成员习惯说明",
|
|
136
|
+
"confidence": 0到1,
|
|
137
|
+
"suggestedAction": "none"或"warn"或"mute"或"kick",
|
|
138
|
+
"contextTone": "当前群聊的情绪氛围"
|
|
139
|
+
}`;
|
|
84
140
|
}
|
|
85
|
-
buildUserPrompt(message) {
|
|
86
|
-
|
|
141
|
+
buildUserPrompt(chatHistory, message) {
|
|
142
|
+
const time = new Date(message.timestamp).toLocaleString();
|
|
143
|
+
let contextText = '';
|
|
144
|
+
if (chatHistory.length > 0) {
|
|
145
|
+
contextText = chatHistory
|
|
146
|
+
.map((h) => {
|
|
147
|
+
const t = new Date(h.timestamp).toLocaleTimeString();
|
|
148
|
+
return `[${t}] ${h.username}: ${h.content}`;
|
|
149
|
+
})
|
|
150
|
+
.join('\n');
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
contextText = '(暂无上文,这是群内最近的第一条消息)';
|
|
154
|
+
}
|
|
155
|
+
return `## 最近群聊上下文(按时间顺序)
|
|
156
|
+
|
|
157
|
+
${contextText}
|
|
158
|
+
|
|
159
|
+
## 待分析的目标消息
|
|
160
|
+
|
|
161
|
+
时间: ${time}
|
|
87
162
|
发送者: ${message.username}(ID:${message.userId})
|
|
88
|
-
|
|
89
|
-
|
|
163
|
+
内容: "${message.content}"
|
|
164
|
+
|
|
165
|
+
请先评估上文对话的整体氛围和情绪基调,然后判断目标消息在当前上下文中是否"过分"或"不合时宜"。`;
|
|
90
166
|
}
|
|
91
|
-
parseResponse(content
|
|
167
|
+
parseResponse(content) {
|
|
92
168
|
try {
|
|
93
169
|
const parsed = JSON.parse(content);
|
|
94
170
|
if (parsed.alertType === 'normal' || !parsed.isAbnormal) {
|
|
@@ -100,10 +176,14 @@ ${profileText || '暂无成员数据'}
|
|
|
100
176
|
suggestedAction: 'none',
|
|
101
177
|
};
|
|
102
178
|
}
|
|
179
|
+
let reason = parsed.reason ?? 'AI 检测到异常';
|
|
180
|
+
if (parsed.contextTone) {
|
|
181
|
+
reason = `[氛围: ${parsed.contextTone}] ${reason}`;
|
|
182
|
+
}
|
|
103
183
|
return {
|
|
104
184
|
isAbnormal: true,
|
|
105
185
|
alertType: parsed.alertType ?? 'suspicious',
|
|
106
|
-
reason
|
|
186
|
+
reason,
|
|
107
187
|
confidence: Math.min(1, Math.max(0, parsed.confidence ?? 0.5)),
|
|
108
188
|
suggestedAction: parsed.suggestedAction ?? 'warn',
|
|
109
189
|
};
|
|
@@ -119,20 +199,20 @@ ${profileText || '暂无成员数据'}
|
|
|
119
199
|
}
|
|
120
200
|
}
|
|
121
201
|
fallbackAnalysis(message) {
|
|
122
|
-
const
|
|
123
|
-
{ pattern:
|
|
124
|
-
{ pattern:
|
|
125
|
-
{ pattern:
|
|
126
|
-
{ pattern:
|
|
127
|
-
{ pattern:
|
|
202
|
+
const criticalPatterns = [
|
|
203
|
+
{ pattern: /转账|银行卡号|密码|验证码|身份证号/, type: 'dangerous', action: 'kick', confidence: 0.95 },
|
|
204
|
+
{ pattern: /加我(微信|QQ|好友)|扫码(加|添加|领)|免费.*(领|送)/, type: 'suspicious', action: 'warn', confidence: 0.7 },
|
|
205
|
+
{ pattern: /诈骗|骗钱|被骗|上当/, type: 'dangerous', action: 'kick', confidence: 0.85 },
|
|
206
|
+
{ pattern: /傻逼|草泥马|nmsl|cnm|操你|去死吧/, type: 'dangerous', action: 'mute', confidence: 0.85 },
|
|
207
|
+
{ pattern: /(http|https):\/\/[^\s]+/, type: 'suspicious', action: 'warn', confidence: 0.6 },
|
|
128
208
|
];
|
|
129
|
-
for (const kw of
|
|
209
|
+
for (const kw of criticalPatterns) {
|
|
130
210
|
if (kw.pattern.test(message.content)) {
|
|
131
211
|
return {
|
|
132
212
|
isAbnormal: true,
|
|
133
213
|
alertType: kw.type,
|
|
134
|
-
reason:
|
|
135
|
-
confidence:
|
|
214
|
+
reason: `本地规则匹配`,
|
|
215
|
+
confidence: kw.confidence,
|
|
136
216
|
suggestedAction: kw.action,
|
|
137
217
|
};
|
|
138
218
|
}
|
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', 'http'];
|
|
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":"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"}
|
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;
|