@quukk/opencode-clawmessenger 0.2.0 → 1.0.3
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 +71 -623
- package/bin/opencode-clawmessenger +2 -2
- package/bin/opencode-clawmessenger-setup +5 -5
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +1 -288
- package/dist/core/auto-register.d.ts +0 -1
- package/dist/core/auto-register.js +1 -174
- package/dist/core/auto-serve.d.ts +13 -0
- package/dist/core/auto-serve.js +1 -0
- package/dist/core/config.d.ts +2 -3
- package/dist/core/config.js +1 -80
- package/dist/core/daemon.d.ts +0 -1
- package/dist/core/daemon.js +1 -77
- package/dist/core/dedup.d.ts +0 -1
- package/dist/core/dedup.js +1 -25
- package/dist/core/hook-manager.d.ts +0 -1
- package/dist/core/hook-manager.js +1 -33
- package/dist/core/logger.d.ts +0 -1
- package/dist/core/logger.js +1 -49
- package/dist/core/mac-address.d.ts +0 -1
- package/dist/core/mac-address.js +1 -43
- package/dist/core/message-handler.d.ts +1 -1
- package/dist/core/message-handler.js +1 -984
- package/dist/core/ops-assistant.d.ts +0 -1
- package/dist/core/ops-assistant.js +1 -270
- package/dist/core/qr-crypto.d.ts +0 -1
- package/dist/core/qr-crypto.js +1 -66
- package/dist/core/session-manager.d.ts +0 -1
- package/dist/core/session-manager.js +1 -144
- package/dist/core/types.d.ts +1 -2
- package/dist/core/types.js +1 -26
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -16
- package/dist/openclaw/client.d.ts +0 -1
- package/dist/openclaw/client.js +1 -494
- package/dist/opencode/client.d.ts +0 -1
- package/dist/opencode/client.js +1 -279
- package/dist/opencode/event-handler.d.ts +0 -1
- package/dist/opencode/event-handler.js +1 -467
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.js +1 -148
- package/dist/rongcloud/client.d.ts +0 -1
- package/dist/rongcloud/client.js +1 -292
- package/dist/rongcloud/env-polyfill.d.ts +0 -1
- package/dist/rongcloud/env-polyfill.js +1 -107
- package/dist/rongcloud/server-api.d.ts +0 -1
- package/dist/rongcloud/server-api.js +1 -157
- package/dist/standalone.d.ts +0 -1
- package/dist/standalone.js +1 -229
- package/dist/types/plugin.d.ts +0 -1
- package/dist/types/plugin.js +1 -2
- package/dist/websocket/client.d.ts +0 -1
- package/dist/websocket/client.js +1 -88
- package/dist/websocket/server-client.d.ts +0 -1
- package/dist/websocket/server-client.js +1 -98
- package/package.json +83 -81
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/core/auto-register.d.ts.map +0 -1
- package/dist/core/auto-register.js.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js.map +0 -1
- package/dist/core/daemon.d.ts.map +0 -1
- package/dist/core/daemon.js.map +0 -1
- package/dist/core/dedup.d.ts.map +0 -1
- package/dist/core/dedup.js.map +0 -1
- package/dist/core/hook-manager.d.ts.map +0 -1
- package/dist/core/hook-manager.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/mac-address.d.ts.map +0 -1
- package/dist/core/mac-address.js.map +0 -1
- package/dist/core/message-handler.d.ts.map +0 -1
- package/dist/core/message-handler.js.map +0 -1
- package/dist/core/ops-assistant.d.ts.map +0 -1
- package/dist/core/ops-assistant.js.map +0 -1
- package/dist/core/qr-crypto.d.ts.map +0 -1
- package/dist/core/qr-crypto.js.map +0 -1
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/openclaw/client.d.ts.map +0 -1
- package/dist/openclaw/client.js.map +0 -1
- package/dist/opencode/client.d.ts.map +0 -1
- package/dist/opencode/client.js.map +0 -1
- package/dist/opencode/event-handler.d.ts.map +0 -1
- package/dist/opencode/event-handler.js.map +0 -1
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/dist/rongcloud/client.d.ts.map +0 -1
- package/dist/rongcloud/client.js.map +0 -1
- package/dist/rongcloud/env-polyfill.d.ts.map +0 -1
- package/dist/rongcloud/env-polyfill.js.map +0 -1
- package/dist/rongcloud/server-api.d.ts.map +0 -1
- package/dist/rongcloud/server-api.js.map +0 -1
- package/dist/standalone.d.ts.map +0 -1
- package/dist/standalone.js.map +0 -1
- package/dist/types/plugin.d.ts.map +0 -1
- package/dist/types/plugin.js.map +0 -1
- package/dist/websocket/client.d.ts.map +0 -1
- package/dist/websocket/client.js.map +0 -1
- package/dist/websocket/server-client.d.ts.map +0 -1
- package/dist/websocket/server-client.js.map +0 -1
|
@@ -1,467 +1 @@
|
|
|
1
|
-
import { createLogger } from '../core/logger.js';
|
|
2
|
-
import { RongCloudServerAPI } from '../rongcloud/server-api.js';
|
|
3
|
-
const log = createLogger('EventHandler');
|
|
4
|
-
export class EventHandler {
|
|
5
|
-
constructor(sessionManager, rongClient, opencode, config) {
|
|
6
|
-
this.isRunning = false;
|
|
7
|
-
this.sentSessions = new Set();
|
|
8
|
-
this.streamStates = new Map();
|
|
9
|
-
this.streamQueue = Promise.resolve(); // 流式消息串行队列
|
|
10
|
-
this.sessionManager = sessionManager;
|
|
11
|
-
this.rongClient = rongClient;
|
|
12
|
-
this.opencode = opencode;
|
|
13
|
-
this.config = config;
|
|
14
|
-
this.streamAPI = new RongCloudServerAPI(config.appKey, config.appSecret || '');
|
|
15
|
-
}
|
|
16
|
-
async start(eventStream) {
|
|
17
|
-
if (this.isRunning)
|
|
18
|
-
return;
|
|
19
|
-
this.isRunning = true;
|
|
20
|
-
log.info('Event handler started');
|
|
21
|
-
try {
|
|
22
|
-
for await (const event of eventStream.stream) {
|
|
23
|
-
if (!this.isRunning)
|
|
24
|
-
break;
|
|
25
|
-
await this.handleEvent(event);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
log.error({ err }, 'SSE stream error');
|
|
30
|
-
}
|
|
31
|
-
finally {
|
|
32
|
-
this.isRunning = false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
stop() {
|
|
36
|
-
this.isRunning = false;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* 获取发送者ID
|
|
40
|
-
* 对于客服聊天,使用客服账号ID作为发送者,而不是当前节点ID
|
|
41
|
-
* 这样可以确保客服消息和普通消息在不同的会话中
|
|
42
|
-
*/
|
|
43
|
-
getFromUserId(sessionId) {
|
|
44
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
45
|
-
if (chatId) {
|
|
46
|
-
const session = this.sessionManager.getSession(chatId);
|
|
47
|
-
if (session?.extra?.serviceTargetId) {
|
|
48
|
-
return session.extra.serviceTargetId;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return this.config.accountId;
|
|
52
|
-
}
|
|
53
|
-
async handleEvent(globalEvent) {
|
|
54
|
-
try {
|
|
55
|
-
const payload = globalEvent.payload || globalEvent;
|
|
56
|
-
const props = payload.properties || payload;
|
|
57
|
-
log.info({ type: payload.type, hasProperties: !!payload.properties }, 'SSE event received');
|
|
58
|
-
switch (payload.type) {
|
|
59
|
-
case 'session.idle':
|
|
60
|
-
log.info({ sessionId: props.sessionID }, 'Session idle event');
|
|
61
|
-
await this.handleSessionIdle(props);
|
|
62
|
-
break;
|
|
63
|
-
case 'message.part.delta':
|
|
64
|
-
// 细粒度 token 级流式增量
|
|
65
|
-
await this.handleMessagePartDelta(props);
|
|
66
|
-
break;
|
|
67
|
-
case 'message.part.updated':
|
|
68
|
-
log.info({ sessionId: props.sessionID }, 'Message part updated event');
|
|
69
|
-
await this.handleMessagePartUpdated(props);
|
|
70
|
-
break;
|
|
71
|
-
case 'message.updated':
|
|
72
|
-
log.info({ sessionId: props.sessionID, messageKeys: Object.keys(props.message || {}) }, 'Message updated event');
|
|
73
|
-
await this.handleMessageUpdated(props);
|
|
74
|
-
break;
|
|
75
|
-
case 'session.status':
|
|
76
|
-
this.handleStatusChange(props);
|
|
77
|
-
break;
|
|
78
|
-
case 'session.error':
|
|
79
|
-
await this.handleError(props);
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
log.debug({ type: payload.type }, 'Unhandled event type');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
log.error({ err }, 'Error handling event');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* 处理 message.part.delta 事件(细粒度 token 级流式增量)
|
|
91
|
-
* 从事件中直接提取增量文本,无需调用 fetchLastMessageText
|
|
92
|
-
*/
|
|
93
|
-
async handleMessagePartDelta(properties) {
|
|
94
|
-
const sessionId = properties.sessionID;
|
|
95
|
-
log.info({ sessionId, hasDelta: !!properties.delta, hasText: !!properties.text, hasPart: !!properties.part }, 'handleMessagePartDelta called');
|
|
96
|
-
// 需要 appSecret 才能调用融云服务端 API 发送流式消息
|
|
97
|
-
if (!this.config.appSecret) {
|
|
98
|
-
log.warn({ sessionId }, 'Streaming skipped: appSecret not configured');
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// 如果已经发送过完整回复,跳过
|
|
102
|
-
if (this.sentSessions.has(sessionId)) {
|
|
103
|
-
log.warn({ sessionId }, 'Session already sent, skipping stream delta');
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
// 从事件中提取增量文本(兼容多种可能的结构)
|
|
107
|
-
const delta = properties.delta || properties.text || properties.part?.delta || properties.part?.text || '';
|
|
108
|
-
if (typeof delta !== 'string') {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
// 注意:空字符串的 delta 是合法的(无新内容块),不跳过,继续执行以维持流状态
|
|
112
|
-
// 初始化流式状态
|
|
113
|
-
let streamState = this.streamStates.get(sessionId);
|
|
114
|
-
if (!streamState) {
|
|
115
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
116
|
-
if (!chatId) {
|
|
117
|
-
log.warn({ sessionId }, 'No chatId found for message.part.delta');
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
streamState = {
|
|
121
|
-
messageUID: '',
|
|
122
|
-
seq: 1, // 融云要求 seq 从 1 开始
|
|
123
|
-
lastContent: '',
|
|
124
|
-
lastSentTime: Date.now(),
|
|
125
|
-
fullContent: '',
|
|
126
|
-
hasSentStream: false,
|
|
127
|
-
chatId,
|
|
128
|
-
targetId: chatId.startsWith('group_') ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', '')),
|
|
129
|
-
isGroup: chatId.startsWith('group_'),
|
|
130
|
-
};
|
|
131
|
-
this.streamStates.set(sessionId, streamState);
|
|
132
|
-
}
|
|
133
|
-
// 累积完整内容
|
|
134
|
-
streamState.fullContent += delta;
|
|
135
|
-
log.info({ sessionId, seq: streamState.seq, deltaLength: delta.length }, 'Sending stream delta');
|
|
136
|
-
// 使用队列确保流式消息片段串行发送
|
|
137
|
-
this.streamQueue = this.streamQueue.then(async () => {
|
|
138
|
-
try {
|
|
139
|
-
const isFirstChunk = streamState.seq === 1;
|
|
140
|
-
log.info({ sessionId, seq: streamState.seq, isFirstChunk, targetId: streamState.targetId, deltaLength: delta.length }, 'Sending stream chunk to RongCloud');
|
|
141
|
-
if (streamState.isGroup) {
|
|
142
|
-
const result = await this.streamAPI.sendStreamGroup({
|
|
143
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
144
|
-
toGroupId: streamState.targetId,
|
|
145
|
-
content: delta,
|
|
146
|
-
isFirstChunk,
|
|
147
|
-
isLastChunk: false,
|
|
148
|
-
seq: streamState.seq,
|
|
149
|
-
messageUID: streamState.messageUID || null,
|
|
150
|
-
});
|
|
151
|
-
if (result.messageUID)
|
|
152
|
-
streamState.messageUID = result.messageUID;
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
const result = await this.streamAPI.sendStreamPrivate({
|
|
156
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
157
|
-
toUserId: streamState.targetId,
|
|
158
|
-
content: delta,
|
|
159
|
-
isFirstChunk,
|
|
160
|
-
isLastChunk: false,
|
|
161
|
-
seq: streamState.seq,
|
|
162
|
-
messageUID: streamState.messageUID || null,
|
|
163
|
-
});
|
|
164
|
-
if (result.messageUID)
|
|
165
|
-
streamState.messageUID = result.messageUID;
|
|
166
|
-
}
|
|
167
|
-
streamState.seq++;
|
|
168
|
-
streamState.hasSentStream = true;
|
|
169
|
-
streamState.lastSentTime = Date.now();
|
|
170
|
-
log.info({ sessionId, seq: streamState.seq - 1 }, 'Stream delta sent');
|
|
171
|
-
}
|
|
172
|
-
catch (err) {
|
|
173
|
-
log.error({ err, sessionId, delta: delta.substring(0, 50) }, 'Stream delta send failed');
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
await this.streamQueue;
|
|
177
|
-
}
|
|
178
|
-
async handleSessionIdle(properties) {
|
|
179
|
-
const sessionId = properties.sessionID;
|
|
180
|
-
// 立即标记已处理,防止并发重复发送
|
|
181
|
-
if (this.sentSessions.has(sessionId)) {
|
|
182
|
-
log.debug({ sessionId }, 'Already sent reply for this session, skipping');
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
this.sentSessions.add(sessionId);
|
|
186
|
-
const streamState = this.streamStates.get(sessionId);
|
|
187
|
-
// 如果已发送过流式片段,发送结束标记和 __stream_history__
|
|
188
|
-
if (streamState && streamState.hasSentStream) {
|
|
189
|
-
log.info({ sessionId, streamSeq: streamState.seq }, 'Finishing stream with last chunk');
|
|
190
|
-
// 发送结束流式片段
|
|
191
|
-
this.streamQueue = this.streamQueue.then(async () => {
|
|
192
|
-
try {
|
|
193
|
-
if (streamState.isGroup) {
|
|
194
|
-
await this.streamAPI.sendStreamGroup({
|
|
195
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
196
|
-
toGroupId: streamState.targetId,
|
|
197
|
-
content: '',
|
|
198
|
-
isFirstChunk: false,
|
|
199
|
-
isLastChunk: true,
|
|
200
|
-
seq: streamState.seq,
|
|
201
|
-
messageUID: streamState.messageUID || null,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
await this.streamAPI.sendStreamPrivate({
|
|
206
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
207
|
-
toUserId: streamState.targetId,
|
|
208
|
-
content: '',
|
|
209
|
-
isFirstChunk: false,
|
|
210
|
-
isLastChunk: true,
|
|
211
|
-
seq: streamState.seq,
|
|
212
|
-
messageUID: streamState.messageUID || null,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
log.info({ sessionId, seq: streamState.seq }, 'Stream last chunk sent');
|
|
216
|
-
}
|
|
217
|
-
catch (err) {
|
|
218
|
-
log.error({ err, sessionId }, 'Failed to send stream last chunk');
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
await this.streamQueue;
|
|
222
|
-
// 发送 __stream_history__ 普通文本消息作为持久化历史记录
|
|
223
|
-
if (streamState.fullContent.trim()) {
|
|
224
|
-
try {
|
|
225
|
-
const historyContent = JSON.stringify({
|
|
226
|
-
__stream_history__: true,
|
|
227
|
-
streamId: streamState.messageUID || sessionId,
|
|
228
|
-
text: streamState.fullContent,
|
|
229
|
-
sentTime: Date.now(),
|
|
230
|
-
});
|
|
231
|
-
await this.rongClient.sendMessage(streamState.targetId, historyContent, streamState.isGroup ? 3 : 1);
|
|
232
|
-
log.info({ sessionId, textLength: streamState.fullContent.length }, 'Stream history sent');
|
|
233
|
-
}
|
|
234
|
-
catch (err) {
|
|
235
|
-
log.error({ err, sessionId }, 'Failed to send stream history');
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// 清理流式状态
|
|
239
|
-
this.streamStates.delete(sessionId);
|
|
240
|
-
this.sessionManager.updateStatus(streamState.chatId, 'idle');
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
// 清理流式状态(如果存在但未发送过流式)
|
|
244
|
-
if (streamState) {
|
|
245
|
-
this.streamStates.delete(sessionId);
|
|
246
|
-
}
|
|
247
|
-
log.info({ sessionId }, 'Handling session idle (no stream)');
|
|
248
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
249
|
-
if (!chatId) {
|
|
250
|
-
log.warn({ sessionId }, 'No chatId found for session');
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
// 没有流式发送过时,兜底发送完整消息
|
|
254
|
-
const text = await this.opencode.fetchLastMessageText(sessionId);
|
|
255
|
-
log.info({ sessionId, chatId, hasText: !!text }, 'Fetched last message');
|
|
256
|
-
if (text) {
|
|
257
|
-
const isGroup = chatId.startsWith('group_');
|
|
258
|
-
const isServiceChat = chatId.startsWith('service-');
|
|
259
|
-
const targetId = isGroup ? chatId.replace('group_', '') : (isServiceChat ? chatId.replace('service-', '') : chatId.replace('claw-', ''));
|
|
260
|
-
const conversationType = isGroup ? 3 : 1;
|
|
261
|
-
log.info({ targetId, textLength: text.length, isGroup, isServiceChat }, 'Sending reply via normal message');
|
|
262
|
-
if (isServiceChat) {
|
|
263
|
-
// 客服会话:发送 service_chat_response 格式的自定义消息
|
|
264
|
-
const servicePayload = JSON.stringify({
|
|
265
|
-
msg_type: 'service_chat_response',
|
|
266
|
-
content: text,
|
|
267
|
-
sessionId: sessionId,
|
|
268
|
-
userId: targetId,
|
|
269
|
-
status: 'success',
|
|
270
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
271
|
-
});
|
|
272
|
-
await this.rongClient.sendMessage(targetId, servicePayload, conversationType);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
// 普通会话:直接发送文本内容
|
|
276
|
-
await this.rongClient.sendMessage(targetId, text, conversationType);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
this.sessionManager.updateStatus(chatId, 'idle');
|
|
280
|
-
}
|
|
281
|
-
async handleMessagePartUpdated(properties) {
|
|
282
|
-
const sessionId = properties.sessionID;
|
|
283
|
-
// message.part.updated 表示消息片段已更新(非增量)
|
|
284
|
-
// 如果已经在流式发送中(由 message.part.delta 驱动),忽略
|
|
285
|
-
if (this.streamStates.has(sessionId)) {
|
|
286
|
-
log.debug({ sessionId }, 'Stream already active via delta, ignoring part.updated');
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
// 需要 appSecret 才能调用融云服务端 API 发送流式消息
|
|
290
|
-
if (!this.config.appSecret) {
|
|
291
|
-
log.debug({ sessionId }, 'Streaming skipped: appSecret not configured, falling back to session.idle reply');
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
295
|
-
if (!chatId) {
|
|
296
|
-
log.warn({ sessionId }, 'No chatId found for message.part.updated');
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
// 如果已经发送过完整回复,跳过流式
|
|
300
|
-
if (this.sentSessions.has(sessionId)) {
|
|
301
|
-
log.debug({ sessionId }, 'Session already sent, skipping stream');
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
const isGroup = chatId.startsWith('group_');
|
|
305
|
-
const targetId = isGroup ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', ''));
|
|
306
|
-
try {
|
|
307
|
-
const text = await this.opencode.fetchLastMessageText(sessionId);
|
|
308
|
-
if (!text)
|
|
309
|
-
return;
|
|
310
|
-
// 初始化流式状态
|
|
311
|
-
let streamState = this.streamStates.get(sessionId);
|
|
312
|
-
if (!streamState) {
|
|
313
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
314
|
-
if (!chatId) {
|
|
315
|
-
log.warn({ sessionId }, 'No chatId found for message.part.updated');
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
streamState = {
|
|
319
|
-
messageUID: '',
|
|
320
|
-
seq: 1, // 融云要求 seq 从 1 开始
|
|
321
|
-
lastContent: '',
|
|
322
|
-
lastSentTime: Date.now(),
|
|
323
|
-
fullContent: '',
|
|
324
|
-
hasSentStream: false,
|
|
325
|
-
chatId,
|
|
326
|
-
targetId: chatId.startsWith('group_') ? chatId.replace('group_', '') : (chatId.startsWith('service-') ? chatId.replace('service-', '') : chatId.replace('claw-', '')),
|
|
327
|
-
isGroup: chatId.startsWith('group_'),
|
|
328
|
-
};
|
|
329
|
-
this.streamStates.set(sessionId, streamState);
|
|
330
|
-
}
|
|
331
|
-
// 只发送新增内容
|
|
332
|
-
const newContent = text.slice(streamState.lastContent.length);
|
|
333
|
-
if (!newContent)
|
|
334
|
-
return;
|
|
335
|
-
// 累积完整内容
|
|
336
|
-
streamState.fullContent += newContent;
|
|
337
|
-
log.info({ sessionId, seq: streamState.seq, newLength: newContent.length }, 'Sending stream chunk (from part.updated)');
|
|
338
|
-
// 使用队列确保流式消息片段串行发送
|
|
339
|
-
this.streamQueue = this.streamQueue.then(async () => {
|
|
340
|
-
try {
|
|
341
|
-
if (isGroup) {
|
|
342
|
-
const result = await this.streamAPI.sendStreamGroup({
|
|
343
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
344
|
-
toGroupId: targetId,
|
|
345
|
-
content: newContent,
|
|
346
|
-
isFirstChunk: streamState.seq === 1,
|
|
347
|
-
isLastChunk: false,
|
|
348
|
-
seq: streamState.seq,
|
|
349
|
-
messageUID: streamState.messageUID || null,
|
|
350
|
-
});
|
|
351
|
-
if (result.messageUID)
|
|
352
|
-
streamState.messageUID = result.messageUID;
|
|
353
|
-
}
|
|
354
|
-
else {
|
|
355
|
-
const result = await this.streamAPI.sendStreamPrivate({
|
|
356
|
-
fromUserId: this.getFromUserId(sessionId),
|
|
357
|
-
toUserId: targetId,
|
|
358
|
-
content: newContent,
|
|
359
|
-
isFirstChunk: streamState.seq === 1,
|
|
360
|
-
isLastChunk: false,
|
|
361
|
-
seq: streamState.seq,
|
|
362
|
-
messageUID: streamState.messageUID || null,
|
|
363
|
-
});
|
|
364
|
-
if (result.messageUID)
|
|
365
|
-
streamState.messageUID = result.messageUID;
|
|
366
|
-
}
|
|
367
|
-
streamState.seq++;
|
|
368
|
-
streamState.hasSentStream = true;
|
|
369
|
-
streamState.lastContent = text;
|
|
370
|
-
streamState.lastSentTime = Date.now();
|
|
371
|
-
}
|
|
372
|
-
catch (err) {
|
|
373
|
-
log.error({ err, sessionId, targetId }, 'Stream send failed');
|
|
374
|
-
// 流式发送失败时清理状态,让 session.idle 兜底发送完整消息
|
|
375
|
-
this.streamStates.delete(sessionId);
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
await this.streamQueue;
|
|
379
|
-
}
|
|
380
|
-
catch (err) {
|
|
381
|
-
log.error({ err, sessionId, targetId }, 'Stream processing failed');
|
|
382
|
-
this.streamStates.delete(sessionId);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
async handleMessageUpdated(properties) {
|
|
386
|
-
const sessionId = properties.sessionID;
|
|
387
|
-
// message.updated 只用于追踪消息内容更新,不发送消息
|
|
388
|
-
// 如果已经在流式发送中,忽略
|
|
389
|
-
if (this.streamStates.has(sessionId)) {
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
// 如果已发送,忽略
|
|
393
|
-
if (this.sentSessions.has(sessionId)) {
|
|
394
|
-
return;
|
|
395
|
-
}
|
|
396
|
-
// 只记录消息内容更新,不发送
|
|
397
|
-
const chatId = this.sessionManager.getChatIdBySession(sessionId);
|
|
398
|
-
if (!chatId) {
|
|
399
|
-
log.warn({ sessionId }, 'No chatId found for message.updated');
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
const session = this.sessionManager.getSession(chatId);
|
|
403
|
-
if (!session || session.status !== 'busy') {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
// 尝试从事件的 message 对象直接获取文本(仅用于日志记录)
|
|
407
|
-
const msg = properties.message;
|
|
408
|
-
if (msg) {
|
|
409
|
-
const role = msg.info?.role || msg.role;
|
|
410
|
-
if (role === 'assistant' || role === 'model') {
|
|
411
|
-
if (msg.parts && msg.parts.length > 0) {
|
|
412
|
-
const textPart = msg.parts.find((p) => p.type === 'text');
|
|
413
|
-
if (textPart?.text) {
|
|
414
|
-
log.debug({ sessionId, textLength: textPart.text.length }, 'AI response content updated');
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
handleStatusChange(properties) {
|
|
421
|
-
const chatId = this.sessionManager.getChatIdBySession(properties.sessionID);
|
|
422
|
-
if (chatId && properties.status.type === 'busy') {
|
|
423
|
-
this.sessionManager.updateStatus(chatId, 'busy');
|
|
424
|
-
// Clear sentSessions to allow new replies in this session
|
|
425
|
-
if (this.sentSessions.delete(properties.sessionID)) {
|
|
426
|
-
log.debug({ sessionId: properties.sessionID }, 'Cleared sent flag for new message turn');
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
async handleError(properties) {
|
|
431
|
-
if (!properties.sessionID)
|
|
432
|
-
return;
|
|
433
|
-
const chatId = this.sessionManager.getChatIdBySession(properties.sessionID);
|
|
434
|
-
if (!chatId)
|
|
435
|
-
return;
|
|
436
|
-
// 从错误对象中提取可读消息
|
|
437
|
-
let errorMessage;
|
|
438
|
-
if (typeof properties.error === 'string') {
|
|
439
|
-
errorMessage = properties.error;
|
|
440
|
-
}
|
|
441
|
-
else if (properties.error?.data?.message) {
|
|
442
|
-
errorMessage = properties.error.data.message;
|
|
443
|
-
}
|
|
444
|
-
else if (properties.error?.message) {
|
|
445
|
-
errorMessage = properties.error.message;
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
errorMessage = 'AI 处理失败,请稍后重试';
|
|
449
|
-
}
|
|
450
|
-
// 标记为已处理,防止 session.idle 重复发送
|
|
451
|
-
this.sentSessions.add(properties.sessionID);
|
|
452
|
-
// 如果正在流式发送,清理状态
|
|
453
|
-
const streamState = this.streamStates.get(properties.sessionID);
|
|
454
|
-
if (streamState) {
|
|
455
|
-
this.streamStates.delete(properties.sessionID);
|
|
456
|
-
}
|
|
457
|
-
log.error({ sessionId: properties.sessionID, error: errorMessage }, 'Session error');
|
|
458
|
-
const isGroup = chatId.startsWith('group_');
|
|
459
|
-
const targetId = isGroup ? chatId.replace('group_', '') : chatId.replace('claw-', '');
|
|
460
|
-
const conversationType = isGroup ? 3 : 1;
|
|
461
|
-
// 发送错误消息(直接文本格式)
|
|
462
|
-
const errorText = `AI 处理出错: ${errorMessage}`;
|
|
463
|
-
await this.rongClient.sendMessage(targetId, errorText, conversationType);
|
|
464
|
-
this.sessionManager.updateStatus(chatId, 'idle');
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
//# sourceMappingURL=event-handler.js.map
|
|
1
|
+
function a0_0x3d76(_0x5af672,_0x36062a){_0x5af672=_0x5af672-0x1b3;const _0x30f961=a0_0x30f9();let _0x3d76eb=_0x30f961[_0x5af672];if(a0_0x3d76['OaImQL']===undefined){var _0x234bfc=function(_0x5f1dea){const _0x11fea1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4ecf43='',_0x46ad1b='';for(let _0x21ad73=0x0,_0x104f2e,_0x186799,_0x1897c6=0x0;_0x186799=_0x5f1dea['charAt'](_0x1897c6++);~_0x186799&&(_0x104f2e=_0x21ad73%0x4?_0x104f2e*0x40+_0x186799:_0x186799,_0x21ad73++%0x4)?_0x4ecf43+=String['fromCharCode'](0xff&_0x104f2e>>(-0x2*_0x21ad73&0x6)):0x0){_0x186799=_0x11fea1['indexOf'](_0x186799);}for(let _0x5dad47=0x0,_0x30fede=_0x4ecf43['length'];_0x5dad47<_0x30fede;_0x5dad47++){_0x46ad1b+='%'+('00'+_0x4ecf43['charCodeAt'](_0x5dad47)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x46ad1b);};a0_0x3d76['CKClRQ']=_0x234bfc,a0_0x3d76['cJuzcr']={},a0_0x3d76['OaImQL']=!![];}const _0x1f5cb3=_0x30f961[0x0],_0x9463eb=_0x5af672+_0x1f5cb3,_0x1d6e7a=a0_0x3d76['cJuzcr'][_0x9463eb];return!_0x1d6e7a?(_0x3d76eb=a0_0x3d76['CKClRQ'](_0x3d76eb),a0_0x3d76['cJuzcr'][_0x9463eb]=_0x3d76eb):_0x3d76eb=_0x1d6e7a,_0x3d76eb;}const a0_0x5a8c9d=a0_0x3d76;(function(_0x4fa1bc,_0x3ea866){const _0x2c9bbf=a0_0x3d76,_0x31a2df=_0x4fa1bc();while(!![]){try{const _0x519f97=-parseInt(_0x2c9bbf(0x1f5))/0x1*(parseInt(_0x2c9bbf(0x271))/0x2)+-parseInt(_0x2c9bbf(0x257))/0x3*(parseInt(_0x2c9bbf(0x1d6))/0x4)+parseInt(_0x2c9bbf(0x284))/0x5+parseInt(_0x2c9bbf(0x1c7))/0x6*(-parseInt(_0x2c9bbf(0x1b8))/0x7)+-parseInt(_0x2c9bbf(0x243))/0x8+-parseInt(_0x2c9bbf(0x1e0))/0x9*(-parseInt(_0x2c9bbf(0x275))/0xa)+parseInt(_0x2c9bbf(0x292))/0xb;if(_0x519f97===_0x3ea866)break;else _0x31a2df['push'](_0x31a2df['shift']());}catch(_0x8df7d5){_0x31a2df['push'](_0x31a2df['shift']());}}}(a0_0x30f9,0x98065));import{createLogger}from'../core/logger.js';import{RongCloudServerAPI}from'../rongcloud/server-api.js';const log=createLogger(a0_0x5a8c9d(0x23c));export class EventHandler{constructor(_0x5e6f4c,_0x186249,_0x41024a,_0x4d936a){const _0x244d10=a0_0x5a8c9d,_0x6a1e82={'HfBrJ':_0x244d10(0x233)},_0x1dbd7c=_0x6a1e82[_0x244d10(0x1c8)][_0x244d10(0x249)]('|');let _0x4a302f=0x0;while(!![]){switch(_0x1dbd7c[_0x4a302f++]){case'0':this[_0x244d10(0x216)]=new Set();continue;case'1':this[_0x244d10(0x28d)]=new RongCloudServerAPI(_0x4d936a[_0x244d10(0x278)],_0x4d936a[_0x244d10(0x20a)]||'');continue;case'2':this['opencode']=_0x41024a;continue;case'3':this[_0x244d10(0x2a6)]=_0x5e6f4c;continue;case'4':this[_0x244d10(0x2ae)]=_0x4d936a;continue;case'5':this[_0x244d10(0x288)]=new Map();continue;case'6':this[_0x244d10(0x25c)]=Promise[_0x244d10(0x254)]();continue;case'7':this[_0x244d10(0x27d)]=_0x186249;continue;case'8':this[_0x244d10(0x29e)]=![];continue;}break;}}async[a0_0x5a8c9d(0x28a)](_0x2f388f){const _0x57fd56=a0_0x5a8c9d,_0x6f5bd3={'xFMEd':_0x57fd56(0x235),'nSixl':_0x57fd56(0x209),'erVJQ':_0x57fd56(0x22a),'FVCyv':function(_0x4b2fa8,_0x1b917a){return _0x4b2fa8!==_0x1b917a;},'derBn':'TNPfJ','sbciI':_0x57fd56(0x1c3)};if(this[_0x57fd56(0x29e)])return;this['isRunning']=!![],log[_0x57fd56(0x1e9)](_0x6f5bd3[_0x57fd56(0x221)]);try{if(_0x6f5bd3[_0x57fd56(0x229)]===_0x6f5bd3[_0x57fd56(0x229)])for await(const _0x5eb1c5 of _0x2f388f['stream']){if(_0x6f5bd3[_0x57fd56(0x252)](_0x57fd56(0x1f9),_0x57fd56(0x1f9))){_0x47c2ac[_0x57fd56(0x22c)]({'sessionId':_0x15ed70},_0x57fd56(0x280));return;}else{if(!this[_0x57fd56(0x29e)])break;await this[_0x57fd56(0x224)](_0x5eb1c5);}}else{_0x4b950f['debug']({'sessionId':_0x4b575c},_0x6f5bd3['xFMEd']);return;}}catch(_0x3c40d5){if(_0x6f5bd3[_0x57fd56(0x267)]===_0x6f5bd3[_0x57fd56(0x267)])log['error']({'err':_0x3c40d5},_0x6f5bd3[_0x57fd56(0x23a)]);else{const _0x3f1220=this[_0x57fd56(0x2a6)][_0x57fd56(0x1da)](_0x5895d1);if(_0x3f1220?.[_0x57fd56(0x1cb)]?.['serviceTargetId'])return _0x3f1220[_0x57fd56(0x1cb)][_0x57fd56(0x234)];}}finally{this[_0x57fd56(0x29e)]=![];}}[a0_0x5a8c9d(0x1c6)](){const _0x266540=a0_0x5a8c9d;this[_0x266540(0x29e)]=![];}['getFromUserId'](_0x39fe1f){const _0x4f1a8c=a0_0x5a8c9d,_0x16d447=this[_0x4f1a8c(0x2a6)][_0x4f1a8c(0x218)](_0x39fe1f);if(_0x16d447){const _0x211658=this[_0x4f1a8c(0x2a6)][_0x4f1a8c(0x1da)](_0x16d447);if(_0x211658?.[_0x4f1a8c(0x1cb)]?.['serviceTargetId'])return _0x211658[_0x4f1a8c(0x1cb)][_0x4f1a8c(0x234)];}return this[_0x4f1a8c(0x2ae)]['accountId'];}async['handleEvent'](_0x132e07){const _0x6cbbab=a0_0x5a8c9d,_0x29d70f={'GCkVU':'No\x20chatId\x20found\x20for\x20message.part.delta','xgNVS':_0x6cbbab(0x223),'VuhSN':_0x6cbbab(0x1e1),'koZau':_0x6cbbab(0x258),'hNvUQ':_0x6cbbab(0x2a1),'GQxfD':_0x6cbbab(0x26c),'CzRns':_0x6cbbab(0x263),'nbBqX':_0x6cbbab(0x1ee),'flBJc':'message.part.delta','NABnh':_0x6cbbab(0x279),'lmmNH':_0x6cbbab(0x26d),'VzZaN':_0x6cbbab(0x1ff),'GvmhF':_0x6cbbab(0x28e),'tpvmC':_0x6cbbab(0x293),'LHIYi':_0x6cbbab(0x227)};try{if(_0x29d70f[_0x6cbbab(0x1bc)]===_0x29d70f[_0x6cbbab(0x276)]){const _0x11c79e=this[_0x6cbbab(0x2a6)][_0x6cbbab(0x218)](_0x1c2504);if(!_0x11c79e){_0x3ce7e5[_0x6cbbab(0x200)]({'sessionId':_0x599730},_0x29d70f[_0x6cbbab(0x26e)]);return;}_0x4b63e7={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':_0x161ed0[_0x6cbbab(0x1b4)](),'fullContent':'','hasSentStream':![],'chatId':_0x11c79e,'targetId':_0x11c79e['startsWith'](_0x29d70f['xgNVS'])?_0x11c79e['replace'](_0x29d70f[_0x6cbbab(0x1d7)],''):_0x11c79e[_0x6cbbab(0x1f8)](_0x29d70f[_0x6cbbab(0x1f0)])?_0x11c79e[_0x6cbbab(0x214)](_0x29d70f[_0x6cbbab(0x1f0)],''):_0x11c79e[_0x6cbbab(0x214)](_0x29d70f[_0x6cbbab(0x277)],''),'isGroup':_0x11c79e['startsWith'](_0x29d70f[_0x6cbbab(0x1d7)])},this[_0x6cbbab(0x288)][_0x6cbbab(0x1df)](_0x43d142,_0xbfc9b3);}else{const _0x2a2f3c=_0x132e07[_0x6cbbab(0x1fe)]||_0x132e07,_0x21e5d5=_0x2a2f3c['properties']||_0x2a2f3c;log[_0x6cbbab(0x1e9)]({'type':_0x2a2f3c[_0x6cbbab(0x294)],'hasProperties':!!_0x2a2f3c[_0x6cbbab(0x21f)]},_0x29d70f[_0x6cbbab(0x21e)]);switch(_0x2a2f3c[_0x6cbbab(0x294)]){case _0x6cbbab(0x23d):log['info']({'sessionId':_0x21e5d5[_0x6cbbab(0x2a4)]},_0x29d70f['nbBqX']),await this[_0x6cbbab(0x1f2)](_0x21e5d5);break;case _0x29d70f[_0x6cbbab(0x217)]:await this[_0x6cbbab(0x1d3)](_0x21e5d5);break;case _0x29d70f[_0x6cbbab(0x27a)]:log[_0x6cbbab(0x1e9)]({'sessionId':_0x21e5d5['sessionID']},_0x29d70f['lmmNH']),await this[_0x6cbbab(0x1bb)](_0x21e5d5);break;case _0x6cbbab(0x274):log['info']({'sessionId':_0x21e5d5['sessionID'],'messageKeys':Object['keys'](_0x21e5d5['message']||{})},_0x29d70f[_0x6cbbab(0x22b)]),await this['handleMessageUpdated'](_0x21e5d5);break;case _0x29d70f[_0x6cbbab(0x291)]:this[_0x6cbbab(0x213)](_0x21e5d5);break;case _0x29d70f['tpvmC']:await this[_0x6cbbab(0x1e7)](_0x21e5d5);break;default:log['debug']({'type':_0x2a2f3c[_0x6cbbab(0x294)]},_0x6cbbab(0x1e6));}}}catch(_0x2b2a5a){log[_0x6cbbab(0x1c5)]({'err':_0x2b2a5a},_0x29d70f['LHIYi']);}}async[a0_0x5a8c9d(0x1d3)](_0x2a9944){const _0xb2ebbd=a0_0x5a8c9d,_0x3e6c22={'MkkcF':_0xb2ebbd(0x203),'MITXl':_0xb2ebbd(0x1b7),'EhliY':_0xb2ebbd(0x2b0),'wyjcg':function(_0x1e0287,_0x79a55d){return _0x1e0287===_0x79a55d;},'JWJzK':_0xb2ebbd(0x1f6),'renHB':function(_0x19b504,_0x15f03b){return _0x19b504===_0x15f03b;},'CBAyh':_0xb2ebbd(0x2a5),'cnhfX':_0xb2ebbd(0x20d),'COtWW':'yjVPw','AokVl':_0xb2ebbd(0x1fa),'fkwnT':function(_0x62ee81,_0x4b1ed6){return _0x62ee81-_0x4b1ed6;},'VinTr':'Stream\x20delta\x20sent','JbfJI':_0xb2ebbd(0x206),'PWdhf':'handleMessagePartDelta\x20called','cjuFn':_0xb2ebbd(0x207),'BMwTC':function(_0x252c4a,_0x2c6fa3){return _0x252c4a!==_0x2c6fa3;},'UgWRt':_0xb2ebbd(0x24f),'YsNFg':_0xb2ebbd(0x27f),'YLsJS':_0xb2ebbd(0x21b),'aQmEu':'kVEza','OvIkG':_0xb2ebbd(0x1ce),'CmgeA':_0xb2ebbd(0x211),'DnMBl':_0xb2ebbd(0x223),'buxAs':'service-','zTVaE':_0xb2ebbd(0x258),'PYyhq':_0xb2ebbd(0x238)},_0x446559=_0x2a9944[_0xb2ebbd(0x2a4)];log[_0xb2ebbd(0x1e9)]({'sessionId':_0x446559,'hasDelta':!!_0x2a9944[_0xb2ebbd(0x253)],'hasText':!!_0x2a9944['text'],'hasPart':!!_0x2a9944[_0xb2ebbd(0x1b9)]},_0x3e6c22['PWdhf']);if(!this[_0xb2ebbd(0x2ae)][_0xb2ebbd(0x20a)]){log[_0xb2ebbd(0x200)]({'sessionId':_0x446559},_0x3e6c22[_0xb2ebbd(0x260)]);return;}if(this[_0xb2ebbd(0x216)]['has'](_0x446559)){log[_0xb2ebbd(0x200)]({'sessionId':_0x446559},_0x3e6c22[_0xb2ebbd(0x222)]);return;}const _0x36d2ff=_0x2a9944[_0xb2ebbd(0x253)]||_0x2a9944[_0xb2ebbd(0x244)]||_0x2a9944[_0xb2ebbd(0x1b9)]?.[_0xb2ebbd(0x253)]||_0x2a9944['part']?.[_0xb2ebbd(0x244)]||'';if(_0x3e6c22[_0xb2ebbd(0x285)](typeof _0x36d2ff,_0x3e6c22[_0xb2ebbd(0x1ca)])){if(_0x3e6c22[_0xb2ebbd(0x201)](_0x3e6c22[_0xb2ebbd(0x245)],_0x3e6c22['YLsJS'])){_0x294de7[_0xb2ebbd(0x200)]({'sessionId':_0x5824f6},_0x3e6c22['MkkcF']);return;}else return;}let _0x234215=this[_0xb2ebbd(0x288)][_0xb2ebbd(0x210)](_0x446559);if(!_0x234215){if(_0x3e6c22['aQmEu']===_0x3e6c22[_0xb2ebbd(0x2a2)])_0x1788df=_0x3e6c22[_0xb2ebbd(0x1e4)];else{const _0x3bd0da=this['sessionManager'][_0xb2ebbd(0x218)](_0x446559);if(!_0x3bd0da){log[_0xb2ebbd(0x200)]({'sessionId':_0x446559},_0x3e6c22[_0xb2ebbd(0x281)]);return;}_0x234215={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':Date[_0xb2ebbd(0x1b4)](),'fullContent':'','hasSentStream':![],'chatId':_0x3bd0da,'targetId':_0x3bd0da[_0xb2ebbd(0x1f8)](_0x3e6c22[_0xb2ebbd(0x246)])?_0x3bd0da[_0xb2ebbd(0x214)]('group_',''):_0x3bd0da['startsWith'](_0x3e6c22[_0xb2ebbd(0x1fb)])?_0x3bd0da[_0xb2ebbd(0x214)](_0x3e6c22[_0xb2ebbd(0x1fb)],''):_0x3bd0da[_0xb2ebbd(0x214)](_0x3e6c22[_0xb2ebbd(0x204)],''),'isGroup':_0x3bd0da['startsWith'](_0x3e6c22[_0xb2ebbd(0x246)])},this[_0xb2ebbd(0x288)][_0xb2ebbd(0x1df)](_0x446559,_0x234215);}}_0x234215[_0xb2ebbd(0x236)]+=_0x36d2ff,log[_0xb2ebbd(0x1e9)]({'sessionId':_0x446559,'seq':_0x234215['seq'],'deltaLength':_0x36d2ff[_0xb2ebbd(0x1ef)]},_0x3e6c22['PYyhq']),this[_0xb2ebbd(0x25c)]=this[_0xb2ebbd(0x25c)][_0xb2ebbd(0x295)](async()=>{const _0xb7ddea=_0xb2ebbd;if(_0x3e6c22['wyjcg'](_0xb7ddea(0x21d),_0x3e6c22[_0xb7ddea(0x264)]))return;else try{const _0x350093=_0x3e6c22[_0xb7ddea(0x298)](_0x234215[_0xb7ddea(0x23b)],0x1);log[_0xb7ddea(0x1e9)]({'sessionId':_0x446559,'seq':_0x234215[_0xb7ddea(0x23b)],'isFirstChunk':_0x350093,'targetId':_0x234215[_0xb7ddea(0x265)],'deltaLength':_0x36d2ff[_0xb7ddea(0x1ef)]},_0x3e6c22[_0xb7ddea(0x1fd)]);if(_0x234215[_0xb7ddea(0x1e3)]){if(_0x3e6c22[_0xb7ddea(0x22d)]===_0x3e6c22[_0xb7ddea(0x266)]){_0x4fe788[_0xb7ddea(0x200)]({'sessionId':_0x3e0bb8},_0x3e6c22[_0xb7ddea(0x287)]);return;}else{const _0x330545=await this['streamAPI'][_0xb7ddea(0x283)]({'fromUserId':this[_0xb7ddea(0x23e)](_0x446559),'toGroupId':_0x234215[_0xb7ddea(0x265)],'content':_0x36d2ff,'isFirstChunk':_0x350093,'isLastChunk':![],'seq':_0x234215[_0xb7ddea(0x23b)],'messageUID':_0x234215['messageUID']||null});if(_0x330545[_0xb7ddea(0x230)])_0x234215[_0xb7ddea(0x230)]=_0x330545[_0xb7ddea(0x230)];}}else{if(_0x3e6c22['AokVl']!==_0x3e6c22['AokVl'])_0x13a60a=_0x95f84d[_0xb7ddea(0x1c5)];else{const _0x4b9689=await this[_0xb7ddea(0x28d)][_0xb7ddea(0x290)]({'fromUserId':this['getFromUserId'](_0x446559),'toUserId':_0x234215[_0xb7ddea(0x265)],'content':_0x36d2ff,'isFirstChunk':_0x350093,'isLastChunk':![],'seq':_0x234215[_0xb7ddea(0x23b)],'messageUID':_0x234215[_0xb7ddea(0x230)]||null});if(_0x4b9689['messageUID'])_0x234215[_0xb7ddea(0x230)]=_0x4b9689['messageUID'];}}_0x234215[_0xb7ddea(0x23b)]++,_0x234215['hasSentStream']=!![],_0x234215['lastSentTime']=Date[_0xb7ddea(0x1b4)](),log[_0xb7ddea(0x1e9)]({'sessionId':_0x446559,'seq':_0x3e6c22[_0xb7ddea(0x228)](_0x234215['seq'],0x1)},_0x3e6c22[_0xb7ddea(0x1f4)]);}catch(_0x1ca034){log[_0xb7ddea(0x1c5)]({'err':_0x1ca034,'sessionId':_0x446559,'delta':_0x36d2ff[_0xb7ddea(0x1d1)](0x0,0x32)},_0x3e6c22[_0xb7ddea(0x1eb)]);}}),await this[_0xb2ebbd(0x25c)];}async['handleSessionIdle'](_0x5a41b1){const _0x191c51=a0_0x5a8c9d,_0xb36e88={'cUOQJ':'Stream\x20already\x20active\x20via\x20delta,\x20ignoring\x20part.updated','lKzQe':_0x191c51(0x22e),'DfoDm':function(_0x434909,_0x247179){return _0x434909!==_0x247179;},'iSpYa':'qXxSX','CUzzB':_0x191c51(0x232),'QngVv':function(_0x2d6355,_0x3e14c0){return _0x2d6355===_0x3e14c0;},'kAheT':_0x191c51(0x237),'gLSDO':_0x191c51(0x299),'ilBIB':_0x191c51(0x2b0),'Gison':_0x191c51(0x1c9),'eEIin':_0x191c51(0x286),'SSQpG':_0x191c51(0x1fc),'flcLI':_0x191c51(0x27e),'zcqXr':_0x191c51(0x29d),'woWkk':function(_0x129ec9,_0x54f549){return _0x129ec9===_0x54f549;},'jTsST':'VxOst','iRLHd':_0x191c51(0x24d),'uSywT':_0x191c51(0x223),'QZtkm':_0x191c51(0x1e1),'mVsbi':_0x191c51(0x258),'RxQLB':_0x191c51(0x2a7),'aEYBu':_0x191c51(0x2b2),'nDDKB':'success'},_0x35194a=_0x5a41b1[_0x191c51(0x2a4)];if(this['sentSessions'][_0x191c51(0x1dc)](_0x35194a)){log[_0x191c51(0x22c)]({'sessionId':_0x35194a},_0xb36e88[_0x191c51(0x256)]);return;}this[_0x191c51(0x216)][_0x191c51(0x21c)](_0x35194a);const _0x3290a5=this[_0x191c51(0x288)][_0x191c51(0x210)](_0x35194a);if(_0x3290a5&&_0x3290a5[_0x191c51(0x1d5)]){if(_0xb36e88[_0x191c51(0x226)]!==_0xb36e88[_0x191c51(0x226)]){_0x2caac2[_0x191c51(0x22c)]({'sessionId':_0x592250},_0xb36e88[_0x191c51(0x20e)]);return;}else{log[_0x191c51(0x1e9)]({'sessionId':_0x35194a,'streamSeq':_0x3290a5[_0x191c51(0x23b)]},_0xb36e88['eEIin']),this[_0x191c51(0x25c)]=this[_0x191c51(0x25c)][_0x191c51(0x295)](async()=>{const _0x4a0702=_0x191c51,_0x5c4515={'tCLCA':_0xb36e88[_0x4a0702(0x256)]};try{if(_0x3290a5['isGroup'])await this[_0x4a0702(0x28d)][_0x4a0702(0x283)]({'fromUserId':this['getFromUserId'](_0x35194a),'toGroupId':_0x3290a5[_0x4a0702(0x265)],'content':'','isFirstChunk':![],'isLastChunk':!![],'seq':_0x3290a5[_0x4a0702(0x23b)],'messageUID':_0x3290a5[_0x4a0702(0x230)]||null});else{if(_0xb36e88['DfoDm'](_0x4a0702(0x24c),_0xb36e88[_0x4a0702(0x202)]))await this[_0x4a0702(0x28d)][_0x4a0702(0x290)]({'fromUserId':this[_0x4a0702(0x23e)](_0x35194a),'toUserId':_0x3290a5[_0x4a0702(0x265)],'content':'','isFirstChunk':![],'isLastChunk':!![],'seq':_0x3290a5[_0x4a0702(0x23b)],'messageUID':_0x3290a5['messageUID']||null});else{_0x2425bf[_0x4a0702(0x22c)]({'sessionId':_0x180caf},ViJwbR[_0x4a0702(0x269)]);return;}}log['info']({'sessionId':_0x35194a,'seq':_0x3290a5[_0x4a0702(0x23b)]},_0xb36e88[_0x4a0702(0x2af)]);}catch(_0xe22960){_0xb36e88[_0x4a0702(0x1db)]('cUeWQ',_0xb36e88[_0x4a0702(0x1e2)])?this[_0x4a0702(0x29e)]=![]:log[_0x4a0702(0x1c5)]({'err':_0xe22960,'sessionId':_0x35194a},_0xb36e88[_0x4a0702(0x1d4)]);}}),await this[_0x191c51(0x25c)];if(_0x3290a5['fullContent'][_0x191c51(0x268)]())try{const _0x5c90cc=JSON['stringify']({'__stream_history__':!![],'streamId':_0x3290a5[_0x191c51(0x230)]||_0x35194a,'text':_0x3290a5[_0x191c51(0x236)],'sentTime':Date[_0x191c51(0x1b4)]()});await this[_0x191c51(0x27d)][_0x191c51(0x208)](_0x3290a5[_0x191c51(0x265)],_0x5c90cc,_0x3290a5[_0x191c51(0x1e3)]?0x3:0x1),log[_0x191c51(0x1e9)]({'sessionId':_0x35194a,'textLength':_0x3290a5[_0x191c51(0x236)][_0x191c51(0x1ef)]},_0x191c51(0x1dd));}catch(_0x2b1f69){log[_0x191c51(0x1c5)]({'err':_0x2b1f69,'sessionId':_0x35194a},_0xb36e88[_0x191c51(0x1b6)]);}this[_0x191c51(0x288)][_0x191c51(0x273)](_0x35194a),this['sessionManager'][_0x191c51(0x1c2)](_0x3290a5[_0x191c51(0x219)],_0xb36e88[_0x191c51(0x1bd)]);return;}}_0x3290a5&&this[_0x191c51(0x288)][_0x191c51(0x273)](_0x35194a);log[_0x191c51(0x1e9)]({'sessionId':_0x35194a},_0xb36e88['zcqXr']);const _0x49cb53=this['sessionManager'][_0x191c51(0x218)](_0x35194a);if(!_0x49cb53){if(_0xb36e88[_0x191c51(0x29a)](_0xb36e88[_0x191c51(0x23f)],'VxOst')){log[_0x191c51(0x200)]({'sessionId':_0x35194a},_0xb36e88['iRLHd']);return;}else this[_0x191c51(0x288)]['delete'](_0x20be81);}const _0x58b6bf=await this[_0x191c51(0x25f)]['fetchLastMessageText'](_0x35194a);log[_0x191c51(0x1e9)]({'sessionId':_0x35194a,'chatId':_0x49cb53,'hasText':!!_0x58b6bf},_0x191c51(0x2ac));if(_0x58b6bf){const _0x1a2f2f=_0x49cb53[_0x191c51(0x1f8)](_0xb36e88[_0x191c51(0x26b)]),_0x5c86f7=_0x49cb53[_0x191c51(0x1f8)](_0x191c51(0x1e1)),_0x39e26c=_0x1a2f2f?_0x49cb53[_0x191c51(0x214)](_0x191c51(0x223),''):_0x5c86f7?_0x49cb53[_0x191c51(0x214)](_0xb36e88[_0x191c51(0x24a)],''):_0x49cb53[_0x191c51(0x214)](_0xb36e88[_0x191c51(0x255)],''),_0x3a2a82=_0x1a2f2f?0x3:0x1;log['info']({'targetId':_0x39e26c,'textLength':_0x58b6bf['length'],'isGroup':_0x1a2f2f,'isServiceChat':_0x5c86f7},_0x191c51(0x20c));if(_0x5c86f7){if('pWZoa'!==_0xb36e88[_0x191c51(0x24b)]){const _0x290fdd=JSON[_0x191c51(0x1d0)]({'msg_type':_0xb36e88[_0x191c51(0x2b3)],'content':_0x58b6bf,'sessionId':_0x35194a,'userId':_0x39e26c,'status':_0xb36e88[_0x191c51(0x22f)],'timestamp':Math['floor'](Date['now']()/0x3e8)});await this[_0x191c51(0x27d)][_0x191c51(0x208)](_0x39e26c,_0x290fdd,_0x3a2a82);}else{_0x47b7b9[_0x191c51(0x200)]({'sessionId':_0x1af84b},_0xb36e88[_0x191c51(0x1cf)]);return;}}else await this['rongClient'][_0x191c51(0x208)](_0x39e26c,_0x58b6bf,_0x3a2a82);}this['sessionManager'][_0x191c51(0x1c2)](_0x49cb53,_0x191c51(0x27e));}async[a0_0x5a8c9d(0x1bb)](_0xff8509){const _0x2f9f79=a0_0x5a8c9d,_0x455b90={'OLCEj':function(_0x313d2f,_0x85d8d){return _0x313d2f===_0x85d8d;},'kndsa':function(_0x23f2df,_0x30761d){return _0x23f2df>_0x30761d;},'Lbhnv':_0x2f9f79(0x2b1),'CAdUW':_0x2f9f79(0x211),'yhFji':_0x2f9f79(0x24d),'ahsNj':function(_0xe4c585,_0x8e344){return _0xe4c585===_0x8e344;},'JEKuj':_0x2f9f79(0x1f1),'lajwB':function(_0x15d1a4,_0x8d1e59){return _0x15d1a4!==_0x8d1e59;},'hKPAb':_0x2f9f79(0x28b),'IGizv':_0x2f9f79(0x28f),'abMGb':_0x2f9f79(0x251),'ySDTv':_0x2f9f79(0x26f),'mPlWI':_0x2f9f79(0x235),'GjDtv':'NekFe','DjDNr':_0x2f9f79(0x2b0),'IJGWF':_0x2f9f79(0x280),'XxvZS':_0x2f9f79(0x223),'YqOGm':_0x2f9f79(0x1e1),'hyViu':function(_0x4ecf57,_0x4a6664){return _0x4ecf57!==_0x4a6664;},'Mcldn':'YYmth','DNQiQ':_0x2f9f79(0x242),'NWHWO':_0x2f9f79(0x1ea),'AZrcu':function(_0x479806,_0x5f3349){return _0x479806!==_0x5f3349;},'fmTvb':'xPidW','YCzvG':_0x2f9f79(0x2ad)},_0x3bff74=_0xff8509[_0x2f9f79(0x2a4)];if(this[_0x2f9f79(0x288)][_0x2f9f79(0x1dc)](_0x3bff74)){if(_0x455b90['lajwB'](_0x455b90[_0x2f9f79(0x1be)],_0x2f9f79(0x1bf))){log[_0x2f9f79(0x22c)]({'sessionId':_0x3bff74},_0x455b90[_0x2f9f79(0x1cd)]);return;}else{const _0x3d9080=_0x2741d6[_0x2f9f79(0x1e9)]?.[_0x2f9f79(0x27b)]||_0x5074d3[_0x2f9f79(0x27b)];if(_0x455b90[_0x2f9f79(0x25b)](_0x3d9080,_0x2f9f79(0x296))||_0x455b90[_0x2f9f79(0x25b)](_0x3d9080,'model')){if(_0x40b2d9[_0x2f9f79(0x2aa)]&&_0x455b90['kndsa'](_0x20babd['parts'][_0x2f9f79(0x1ef)],0x0)){const _0x13e22e=_0x3af455[_0x2f9f79(0x2aa)][_0x2f9f79(0x297)](_0xc714b2=>_0xc714b2[_0x2f9f79(0x294)]===_0x2f9f79(0x244));_0x13e22e?.[_0x2f9f79(0x244)]&&_0x5b6956[_0x2f9f79(0x22c)]({'sessionId':_0x163105,'textLength':_0x13e22e[_0x2f9f79(0x244)][_0x2f9f79(0x1ef)]},_0x2f9f79(0x21a));}}}}if(!this[_0x2f9f79(0x2ae)][_0x2f9f79(0x20a)]){if(_0x455b90[_0x2f9f79(0x231)]===_0x455b90[_0x2f9f79(0x1ed)])_0x565b84[_0x2f9f79(0x1c5)]({'err':_0x264bf0,'sessionId':_0x364b9b,'targetId':_0x2cde30},_0x455b90[_0x2f9f79(0x220)]),this[_0x2f9f79(0x288)][_0x2f9f79(0x273)](_0x574aad);else{log[_0x2f9f79(0x22c)]({'sessionId':_0x3bff74},_0x455b90['mPlWI']);return;}}const _0x23798c=this[_0x2f9f79(0x2a6)][_0x2f9f79(0x218)](_0x3bff74);if(!_0x23798c){if(_0x455b90[_0x2f9f79(0x29f)](_0x2f9f79(0x248),_0x455b90['GjDtv'])){log[_0x2f9f79(0x200)]({'sessionId':_0x3bff74},_0x455b90[_0x2f9f79(0x261)]);return;}else{_0x3a7cb5[_0x2f9f79(0x200)]({'sessionId':_0x1fa436},lQPuAM[_0x2f9f79(0x1c1)]);return;}}if(this[_0x2f9f79(0x216)]['has'](_0x3bff74)){log['debug']({'sessionId':_0x3bff74},_0x455b90[_0x2f9f79(0x205)]);return;}const _0x595dac=_0x23798c[_0x2f9f79(0x1f8)](_0x2f9f79(0x223)),_0x38d302=_0x595dac?_0x23798c[_0x2f9f79(0x214)](_0x455b90[_0x2f9f79(0x26a)],''):_0x23798c[_0x2f9f79(0x1f8)](_0x455b90[_0x2f9f79(0x29b)])?_0x23798c[_0x2f9f79(0x214)](_0x455b90[_0x2f9f79(0x29b)],''):_0x23798c['replace']('claw-','');try{const _0xc4294=await this[_0x2f9f79(0x25f)][_0x2f9f79(0x25d)](_0x3bff74);if(!_0xc4294)return;let _0x165939=this['streamStates']['get'](_0x3bff74);if(!_0x165939){const _0x480cb5=this[_0x2f9f79(0x2a6)][_0x2f9f79(0x218)](_0x3bff74);if(!_0x480cb5){if(_0x455b90['hyViu'](_0x455b90[_0x2f9f79(0x2a0)],_0x455b90[_0x2f9f79(0x270)])){log[_0x2f9f79(0x200)]({'sessionId':_0x3bff74},_0x455b90[_0x2f9f79(0x261)]);return;}else{_0x2d953c['warn']({'sessionId':_0x2fdcdc},lQPuAM[_0x2f9f79(0x1d2)]);return;}}_0x165939={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':Date[_0x2f9f79(0x1b4)](),'fullContent':'','hasSentStream':![],'chatId':_0x480cb5,'targetId':_0x480cb5[_0x2f9f79(0x1f8)](_0x2f9f79(0x223))?_0x480cb5[_0x2f9f79(0x214)](_0x2f9f79(0x223),''):_0x480cb5['startsWith'](_0x455b90[_0x2f9f79(0x29b)])?_0x480cb5[_0x2f9f79(0x214)](_0x455b90['YqOGm'],''):_0x480cb5[_0x2f9f79(0x214)](_0x2f9f79(0x258),''),'isGroup':_0x480cb5[_0x2f9f79(0x1f8)](_0x455b90[_0x2f9f79(0x26a)])},this['streamStates'][_0x2f9f79(0x1df)](_0x3bff74,_0x165939);}const _0x54d9d5=_0xc4294[_0x2f9f79(0x2a3)](_0x165939[_0x2f9f79(0x28c)]['length']);if(!_0x54d9d5)return;_0x165939[_0x2f9f79(0x236)]+=_0x54d9d5,log[_0x2f9f79(0x1e9)]({'sessionId':_0x3bff74,'seq':_0x165939['seq'],'newLength':_0x54d9d5[_0x2f9f79(0x1ef)]},_0x455b90['NWHWO']),this['streamQueue']=this[_0x2f9f79(0x25c)]['then'](async()=>{const _0x1e3658=_0x2f9f79;try{if(_0x595dac){const _0x6a16da=await this[_0x1e3658(0x28d)][_0x1e3658(0x283)]({'fromUserId':this[_0x1e3658(0x23e)](_0x3bff74),'toGroupId':_0x38d302,'content':_0x54d9d5,'isFirstChunk':_0x165939['seq']===0x1,'isLastChunk':![],'seq':_0x165939[_0x1e3658(0x23b)],'messageUID':_0x165939[_0x1e3658(0x230)]||null});if(_0x6a16da[_0x1e3658(0x230)])_0x165939[_0x1e3658(0x230)]=_0x6a16da[_0x1e3658(0x230)];}else{const _0x23459d=await this[_0x1e3658(0x28d)]['sendStreamPrivate']({'fromUserId':this['getFromUserId'](_0x3bff74),'toUserId':_0x38d302,'content':_0x54d9d5,'isFirstChunk':_0x165939[_0x1e3658(0x23b)]===0x1,'isLastChunk':![],'seq':_0x165939[_0x1e3658(0x23b)],'messageUID':_0x165939[_0x1e3658(0x230)]||null});if(_0x23459d[_0x1e3658(0x230)])_0x165939[_0x1e3658(0x230)]=_0x23459d[_0x1e3658(0x230)];}_0x165939[_0x1e3658(0x23b)]++,_0x165939[_0x1e3658(0x1d5)]=!![],_0x165939[_0x1e3658(0x28c)]=_0xc4294,_0x165939[_0x1e3658(0x262)]=Date[_0x1e3658(0x1b4)]();}catch(_0x2045ab){_0x455b90['ahsNj'](_0x455b90[_0x1e3658(0x241)],_0x455b90['JEKuj'])?(log[_0x1e3658(0x1c5)]({'err':_0x2045ab,'sessionId':_0x3bff74,'targetId':_0x38d302},_0x455b90[_0x1e3658(0x220)]),this[_0x1e3658(0x288)]['delete'](_0x3bff74)):_0xaa3335=_0x79f7a2[_0x1e3658(0x1c5)][_0x1e3658(0x1d8)]['message'];}}),await this['streamQueue'];}catch(_0x14fe41){_0x455b90[_0x2f9f79(0x2ab)](_0x455b90['fmTvb'],_0x455b90['fmTvb'])?_0x533b80=_0x4b4674[_0x2f9f79(0x1c5)]['message']:(log[_0x2f9f79(0x1c5)]({'err':_0x14fe41,'sessionId':_0x3bff74,'targetId':_0x38d302},_0x455b90[_0x2f9f79(0x272)]),this[_0x2f9f79(0x288)][_0x2f9f79(0x273)](_0x3bff74));}}async[a0_0x5a8c9d(0x1f7)](_0x4be74d){const _0xfba55=a0_0x5a8c9d,_0x403005={'SqUCi':'No\x20chatId\x20found\x20for\x20message.part.updated','cQdby':'group_','OZcUY':_0xfba55(0x1e1),'xRyAX':_0xfba55(0x258),'RpdXV':_0xfba55(0x2ad),'dGZET':_0xfba55(0x247),'PtjKD':function(_0x3e2960,_0x389ec0){return _0x3e2960!==_0x389ec0;},'TPZoX':_0xfba55(0x239),'SrFbU':_0xfba55(0x225),'sxPWS':_0xfba55(0x2a8),'VdyJL':_0xfba55(0x1e5),'YwkUI':_0xfba55(0x1ec),'uhpeK':function(_0xd906b7,_0x9228b6){return _0xd906b7===_0x9228b6;},'GfdeC':'model','fkzJM':function(_0x3d492d,_0x4c7950){return _0x3d492d!==_0x4c7950;},'RWEsT':'ZNQdC','gYvuB':'AI\x20response\x20content\x20updated'},_0x434c5f=_0x4be74d['sessionID'];if(this[_0xfba55(0x288)][_0xfba55(0x1dc)](_0x434c5f))return;if(this[_0xfba55(0x216)]['has'](_0x434c5f))return;const _0x573098=this[_0xfba55(0x2a6)][_0xfba55(0x218)](_0x434c5f);if(!_0x573098){log['warn']({'sessionId':_0x434c5f},_0x403005[_0xfba55(0x27c)]);return;}const _0xf2a58a=this[_0xfba55(0x2a6)]['getSession'](_0x573098);if(!_0xf2a58a||_0x403005[_0xfba55(0x289)](_0xf2a58a[_0xfba55(0x29c)],_0x403005['TPZoX'])){if(_0x403005['SrFbU']!==_0x403005[_0xfba55(0x259)])return;else return;}const _0x25687f=_0x4be74d[_0xfba55(0x1c0)];if(_0x25687f){if(_0x403005[_0xfba55(0x1cc)]===_0x403005[_0xfba55(0x1ba)]){const _0x45d698=this['sessionManager'][_0xfba55(0x218)](_0x14baf9);if(!_0x45d698){_0x340d7a[_0xfba55(0x200)]({'sessionId':_0x150212},bivuwT[_0xfba55(0x250)]);return;}_0x17aac6={'messageUID':'','seq':0x1,'lastContent':'','lastSentTime':_0x448061[_0xfba55(0x1b4)](),'fullContent':'','hasSentStream':![],'chatId':_0x45d698,'targetId':_0x45d698[_0xfba55(0x1f8)](_0xfba55(0x223))?_0x45d698['replace'](bivuwT[_0xfba55(0x282)],''):_0x45d698[_0xfba55(0x1f8)](_0xfba55(0x1e1))?_0x45d698[_0xfba55(0x214)](bivuwT['OZcUY'],''):_0x45d698[_0xfba55(0x214)](bivuwT['xRyAX'],''),'isGroup':_0x45d698['startsWith'](bivuwT['cQdby'])},this[_0xfba55(0x288)]['set'](_0xe3b455,_0x53ce07);}else{const _0x261695=_0x25687f[_0xfba55(0x1e9)]?.['role']||_0x25687f['role'];if(_0x261695===_0xfba55(0x296)||_0x403005[_0xfba55(0x2a9)](_0x261695,_0x403005['GfdeC'])){if(_0x25687f[_0xfba55(0x2aa)]&&_0x25687f[_0xfba55(0x2aa)]['length']>0x0){if(_0x403005[_0xfba55(0x1c4)](_0x403005['RWEsT'],_0x403005[_0xfba55(0x1b5)]))_0x327642[_0xfba55(0x1c5)]({'err':_0x2d530b,'sessionId':_0x1bb811,'targetId':_0x2f2f5b},bivuwT[_0xfba55(0x25a)]),this[_0xfba55(0x288)]['delete'](_0x8b2d90);else{const _0x140318=_0x25687f[_0xfba55(0x2aa)][_0xfba55(0x297)](_0x8502cb=>_0x8502cb[_0xfba55(0x294)]==='text');_0x140318?.[_0xfba55(0x244)]&&log[_0xfba55(0x22c)]({'sessionId':_0x434c5f,'textLength':_0x140318['text'][_0xfba55(0x1ef)]},_0x403005[_0xfba55(0x20f)]);}}}}}}[a0_0x5a8c9d(0x213)](_0x5cea13){const _0x399d35=a0_0x5a8c9d,_0x5abe5f={'FHyrF':_0x399d35(0x206),'KQEHd':function(_0x2f630f,_0x5366a8){return _0x2f630f===_0x5366a8;},'nLMMr':'busy','nHsSd':_0x399d35(0x1b3),'XCqkn':_0x399d35(0x20b)},_0x108356=this[_0x399d35(0x2a6)][_0x399d35(0x218)](_0x5cea13[_0x399d35(0x2a4)]);_0x108356&&_0x5abe5f[_0x399d35(0x1f3)](_0x5cea13['status']['type'],_0x5abe5f[_0x399d35(0x25e)])&&(this[_0x399d35(0x2a6)]['updateStatus'](_0x108356,_0x399d35(0x239)),this[_0x399d35(0x216)][_0x399d35(0x273)](_0x5cea13[_0x399d35(0x2a4)])&&(_0x5abe5f[_0x399d35(0x1e8)]===_0x399d35(0x240)?_0x567d42['error']({'err':_0x46f0c3,'sessionId':_0x60262c,'delta':_0x4fbb6a[_0x399d35(0x1d1)](0x0,0x32)},USIwDi['FHyrF']):log[_0x399d35(0x22c)]({'sessionId':_0x5cea13[_0x399d35(0x2a4)]},_0x5abe5f[_0x399d35(0x1de)])));}async[a0_0x5a8c9d(0x1e7)](_0x55e3bc){const _0x393e3c=a0_0x5a8c9d,_0x5545a1={'XQmhB':_0x393e3c(0x1b7),'OnJJy':_0x393e3c(0x24e),'RVTEq':'group_','CXazv':_0x393e3c(0x258)};if(!_0x55e3bc[_0x393e3c(0x2a4)])return;const _0x4f2fcf=this['sessionManager']['getChatIdBySession'](_0x55e3bc[_0x393e3c(0x2a4)]);if(!_0x4f2fcf)return;let _0x469566;if(typeof _0x55e3bc[_0x393e3c(0x1c5)]===_0x393e3c(0x24f))_0x469566=_0x55e3bc[_0x393e3c(0x1c5)];else{if(_0x55e3bc[_0x393e3c(0x1c5)]?.[_0x393e3c(0x1d8)]?.[_0x393e3c(0x1c0)])_0x469566=_0x55e3bc[_0x393e3c(0x1c5)][_0x393e3c(0x1d8)][_0x393e3c(0x1c0)];else _0x55e3bc[_0x393e3c(0x1c5)]?.[_0x393e3c(0x1c0)]?_0x469566=_0x55e3bc[_0x393e3c(0x1c5)]['message']:_0x469566=_0x5545a1['XQmhB'];}this[_0x393e3c(0x216)]['add'](_0x55e3bc[_0x393e3c(0x2a4)]);const _0x4e8d75=this[_0x393e3c(0x288)][_0x393e3c(0x210)](_0x55e3bc[_0x393e3c(0x2a4)]);_0x4e8d75&&this[_0x393e3c(0x288)][_0x393e3c(0x273)](_0x55e3bc[_0x393e3c(0x2a4)]);log['error']({'sessionId':_0x55e3bc[_0x393e3c(0x2a4)],'error':_0x469566},_0x5545a1['OnJJy']);const _0x5d8275=_0x4f2fcf[_0x393e3c(0x1f8)](_0x393e3c(0x223)),_0x3777b3=_0x5d8275?_0x4f2fcf[_0x393e3c(0x214)](_0x5545a1[_0x393e3c(0x212)],''):_0x4f2fcf[_0x393e3c(0x214)](_0x5545a1[_0x393e3c(0x215)],''),_0x2187ed=_0x5d8275?0x3:0x1,_0x6110e0=_0x393e3c(0x1d9)+_0x469566;await this[_0x393e3c(0x27d)]['sendMessage'](_0x3777b3,_0x6110e0,_0x2187ed),this[_0x393e3c(0x2a6)][_0x393e3c(0x1c2)](_0x4f2fcf,_0x393e3c(0x27e));}}function a0_0x30f9(){const _0x1573f0=['u1nfihn0CMvHBsbLCNjVCG','zMT6sK0','zxjYB3i','C3rVCa','ndGXmtq2ve95DffO','sgzcCKO','y1HjwLq','vwDxuNq','zxH0CMe','vMr5sKW','suDPENy','qNnrq1G','AwXcsui','C3rYAw5NAwz5','C3vIC3rYAw5N','EwHgAMK','AgfUzgXLtwvZC2fNzvbHCNrezwX0yq','z0Xtre8','AgfZu2vUDfn0CMvHBq','otjAAgrNv2u','EgDovLm','zgf0yq','quKG5Ase55cg5yE66zszoIa','z2v0u2vZC2LVBG','uw5NvNy','AgfZ','u3rYzwfTigHPC3rVCNKGC2vUDa','wenXA24','C2v0','mte4nZGYuvzkr2vi','C2vYDMLJzs0','A0fOzvq','AxnhCM91Ca','tuLuwgW','v25Syvm','vw5Oyw5KBgvKigv2zw50ihr5Cgu','AgfUzgXLrxjYB3i','BKHZu2q','Aw5MBW','u2vUzgLUzYbZDhjLyw0Gy2H1BMSGkgzYB20GCgfYDc51CgrHDgvKkq','sMjMsKK','Eefyrge','Evnevhy','u2vZC2LVBIbPzgXLigv2zw50','BgvUz3rO','vNvOu04','B1DNu1u','AgfUzgXLu2vZC2LVBKLKBgu','s1ffsgq','vMLUvhi','nJqYmJi0zMrnyxHv','zxjLq1e','AgfUzgXLtwvZC2fNzvvWzgf0zwq','C3rHCNrZv2L0Aa','AKHqrKC','z3nsuM4','yNv4qxm','rMfPBgvKihrVihnLBMqGC3rYzwfTigHPC3rVCNK','q0jbEwG','Cgf5Bg9Hza','twvZC2fNzsb1CgrHDgvKigv2zw50','D2fYBG','D3LQy2C','AvnWwwe','u3rYzwfTAw5NihnRAxbWzwq6igfWCfnLy3jLDcbUB3qGy29UzMLNDxjLza','ELrwyuu','suPhv0y','u3rYzwfTigrLBhrHihnLBMqGzMfPBgvK','u2vZC2LVBIbHBhjLywr5ihnLBNqSihnRAxbWAw5Nihn0CMvHBsbKzwX0yq','C2vUze1LC3nHz2u','rxzLBNqGAgfUzgXLCIbZDgfYDgvK','yxbWu2vJCMv0','q2XLyxjLzcbZzw50igzSywCGzM9Yig5LDYbTzxnZywDLihr1CM4','u2vUzgLUzYbYzxbSEsb2AweGBM9YBwfSig1LC3nHz2u','u3n5B2C','y1vpuuO','z1L2Dui','z2v0','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNbHCNqUzgvSDge','uLzurxe','AgfUzgXLu3rHDhvZq2HHBMDL','CMvWBgfJzq','q1HHENy','C2vUDfnLC3nPB25Z','zMXcsMm','z2v0q2HHDeLKqNLtzxnZAw9U','y2HHDeLK','quKGCMvZCg9UC2uGy29UDgvUDcb1CgrHDgvK','tKLdBei','ywrK','qLP1r3q','q3PsBNm','ChjVCgvYDgLLCW','tgjOBNy','BLnPEgW','y2P1rM4','z3jVDxbF','AgfUzgXLrxzLBNq','s0n4vhu','r2LZB24','rxjYB3iGAgfUzgXPBMCGzxzLBNq','zMT3BLq','zxjwsLe','qxvQzvO','vNPAyu4','zgvIDwC','y25OzLG','qwXYzwfKEsbZzw50ihjLCgX5igzVCIb0AgLZihnLC3nPB24SihnRAxbWAw5N','BKres0i','BwvZC2fNzvvjra','ywjnr2i','u3rYzwfTigXHC3qGy2H1BMSGC2vUDa','ohWWFdv8nNWZFdD8mNW0Fde','C2vYDMLJzvrHCMDLDeLK','u3rYzwfTAw5NihnRAxbWzwq6igfWCfnLy3jLDcbUB3qGy29UzMLNDxjLzcWGzMfSBgLUzYbIywnRihrVihnLC3nPB24UAwrSzsbYzxbSEq','zNvSBenVBNrLBNq','zvH4zgG','u2vUzgLUzYbZDhjLyw0GzgvSDge','yNvZEq','C2jJAuK','C2vX','rxzLBNriyw5KBgvY','C2vZC2LVBI5PzgXL','z2v0rNjVBvvZzxjjza','ALrZu1q','zgTlzfO','sKvlDwO','DwvfBuu','mJa2otC2og5VvMn4Aq','Dgv4Da','wxnorMC','rg5nqMW','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNvWzgf0zwq','AfvfswG','C3bSAxq','uvP0A20','uNHrtei','zLb1A00','tM8Gy2HHDeLKigzVDw5KigzVCIbZzxnZAw9U','u2vZC2LVBIbLCNjVCG','C3rYAw5N','u3fvq2K','DK5NzuS','rLzdExy','zgvSDge','CMvZB2X2zq','BvzZyMK','BeT6uwu','mtqWmdCZrNPHrgDh','y2XHDY0','C3Hqv1m','uNbKwfy','t0XdrwO','C3rYzwfTuxvLDwu','zMv0y2Hmyxn0twvZC2fNzvrLEhq','BKXntxi','B3bLBMnVzgu','twTRy0y','rgPetNi','BgfZDfnLBNruAw1L','u1nfigv2zw50ihjLy2vPDMvK','sLDkEKS','DgfYz2v0swq','q090v1C','zgvYqM4','DhjPBq','Denmq0e','whH2wLm','Dvn5D1q','uujPywO','twvZC2fNzsbWyxj0ihvWzgf0zwqGzxzLBNq','r0nRvLu','t0vkAg4','re5rAve','mLrltxnoDa','wun6DKC','zgvSzxrL','BwvZC2fNzs51CgrHDgvK','mtmWsxDUDNHN','r1f4zKq','A29Ayxu','yxbWs2v5','BwvZC2fNzs5Wyxj0lNvWzgf0zwq','tKfcBMG','CM9Szq','zeDArvq','CM9Uz0nSAwvUDa','AwrSzq','vM1JCuq','u2vZC2LVBIbHBhjLywr5ihnLBNqSihnRAxbWAw5Nihn0CMvHBq','q21Nzue','y1fKyNK','C2vUzfn0CMvHBuDYB3vW','mtGWndqXnxr0qMrVrG','qK13vem','rMLUAxnOAw5Nihn0CMvHBsb3AxrOigXHC3qGy2H1BMS','rwHSAvK','C3rYzwfTu3rHDgvZ','uhrQs0q','C3rHCNq','BfPcD0m','BgfZDenVBNrLBNq','C3rYzwfTqvbj','C2vZC2LVBI5ZDgf0Dxm','u3rYzwfTigfSCMvHzhKGywn0AxzLihzPysbKzwX0ysWGAwDUB3jPBMCGCgfYDc51CgrHDgvK','C2vUzfn0CMvHBvbYAxzHDgu','r3zTAey','mZqXodmXmJDHuNDRExq','C2vZC2LVBI5LCNjVCG','DhLWzq','DgHLBG','yxnZAxn0yw50','zMLUza','CMvUsei','rMfPBgvKihrVihnLBMqGC3rYzwfTigXHC3qGy2H1BMS','D29xA2S','wxfpr20','C3rHDhvZ','sgfUzgXPBMCGC2vZC2LVBIbPzgXLicHUBYbZDhjLyw0P','AxnsDw5UAw5N','BgfQD0i','twnSzg4','CuLTtNK','t3zjA0C','C2XPy2u','C2vZC2LVBKLe','u2vUzgLUzYbZDhjLyw0Gy2H1BMSGDg8GuM9Uz0nSB3vK','C2vZC2LVBK1HBMfNzxi','D1vLzNC','AMzcu2W','DwHWzuS','CgfYDhm','qvPYy3u','rMv0y2HLzcbSyxn0ig1LC3nHz2u','u3rYzwfTihbYB2nLC3nPBMCGzMfPBgvK','y29UzMLN','q1v6EKi','tM8Gy2HHDeLKigzVDw5KigzVCIbTzxnZywDLlNbHCNqUDxbKyxrLza','u3rYzwfTihnLBMqGzMfPBgvK','C2vYDMLJzv9JAgf0x3jLC3bVBNnL','yuvzqNu','uhrjtxC','BM93','uLDfC1q','u1nrCeC','quKG5Ase55cg5AsX6lsL77Ym6k+356In5zco6yEn6k+v','otfltMPLDNK','CgfYDa','wxDRvuK','AgfUzgXLtwvZC2fNzvbHCNrvCgrHDgvK','Ae52vve','zMXJteK','AeTqqwi','vvH5C1C','BwvZC2fNzq','q0fKvvC','DxbKyxrLu3rHDhvZ'];a0_0x30f9=function(){return _0x1573f0;};return a0_0x30f9();}
|
package/dist/plugin.d.ts
CHANGED