koishi-plugin-chatluna 1.3.32 → 1.3.34
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/chains/chain.d.ts +2 -2
- package/lib/chains/index.cjs +59 -26
- package/lib/chains/index.mjs +59 -26
- package/lib/config.d.ts +1 -0
- package/lib/index.cjs +138 -42
- package/lib/index.mjs +141 -45
- package/lib/llm-core/agent/creator.d.ts +19 -4
- package/lib/llm-core/agent/executor.d.ts +37 -148
- package/lib/llm-core/agent/index.cjs +471 -912
- package/lib/llm-core/agent/index.d.ts +0 -1
- package/lib/llm-core/agent/index.mjs +476 -908
- package/lib/llm-core/agent/openai/index.d.ts +3 -2
- package/lib/llm-core/agent/openai/output_parser.d.ts +4 -3
- package/lib/llm-core/agent/react/index.d.ts +9 -3
- package/lib/llm-core/agent/react/output_parser.d.ts +2 -2
- package/lib/llm-core/agent/types.d.ts +51 -60
- package/lib/llm-core/chain/base.cjs +1 -1
- package/lib/llm-core/chain/base.d.ts +7 -0
- package/lib/llm-core/chain/base.mjs +1 -1
- package/lib/llm-core/chain/infinite_context_chain.d.ts +6 -2
- package/lib/llm-core/chain/plugin_chat_chain.d.ts +7 -5
- package/lib/llm-core/chain/prompt.cjs +11 -14
- package/lib/llm-core/chain/prompt.d.ts +0 -1
- package/lib/llm-core/chain/prompt.mjs +11 -14
- package/lib/llm-core/chat/app.cjs +268 -446
- package/lib/llm-core/chat/app.d.ts +6 -8
- package/lib/llm-core/chat/app.mjs +273 -448
- package/lib/llm-core/chat/helper.d.ts +14 -0
- package/lib/llm-core/chat/infinite_context.d.ts +9 -9
- package/lib/llm-core/memory/message/database_history.d.ts +4 -1
- package/lib/llm-core/memory/message/index.cjs +95 -41
- package/lib/llm-core/memory/message/index.mjs +95 -41
- package/lib/llm-core/platform/api.cjs +0 -6
- package/lib/llm-core/platform/api.mjs +0 -6
- package/lib/llm-core/platform/model.cjs +109 -89
- package/lib/llm-core/platform/model.d.ts +2 -7
- package/lib/llm-core/platform/model.mjs +109 -89
- package/lib/llm-core/platform/service.cjs +43 -0
- package/lib/llm-core/platform/service.d.ts +15 -1
- package/lib/llm-core/platform/service.mjs +43 -0
- package/lib/llm-core/platform/types.d.ts +14 -6
- package/lib/llm-core/prompt/context_manager.d.ts +3 -1
- package/lib/llm-core/prompt/index.cjs +7 -0
- package/lib/llm-core/prompt/index.mjs +7 -0
- package/lib/services/chat.cjs +199 -41
- package/lib/services/chat.d.ts +13 -5
- package/lib/services/chat.mjs +202 -42
- package/lib/services/types.d.ts +8 -2
- package/lib/utils/schema.cjs +17 -7
- package/lib/utils/schema.d.ts +3 -0
- package/lib/utils/schema.mjs +16 -7
- package/lib/utils/string.cjs +1 -1
- package/lib/utils/string.mjs +1 -1
- package/lib/utils/time.d.ts +6 -0
- package/package.json +3 -3
- package/resources/presets/sydney.yml +1 -10
- package/lib/llm-core/agent/agent.d.ts +0 -142
package/lib/chains/chain.d.ts
CHANGED
|
@@ -46,7 +46,7 @@ export declare class ChainMiddleware {
|
|
|
46
46
|
constructor(name: string, execute: ChainMiddlewareFunction, graph: ChatChainDependencyGraph);
|
|
47
47
|
before<T extends keyof ChainMiddlewareName>(name: T): this;
|
|
48
48
|
after<T extends keyof ChainMiddlewareName>(name: T): this;
|
|
49
|
-
run(session: Session, options: ChainMiddlewareContext): Promise<string |
|
|
49
|
+
run(session: Session, options: ChainMiddlewareContext): Promise<string | h[] | h[][] | ChainMiddlewareRunStatus>;
|
|
50
50
|
}
|
|
51
51
|
export interface ChainMiddlewareContext {
|
|
52
52
|
config: Config;
|
|
@@ -64,7 +64,7 @@ export interface ChainMiddlewareContextOptions {
|
|
|
64
64
|
export interface ChainMiddlewareName {
|
|
65
65
|
}
|
|
66
66
|
export type ChainMiddlewareFunction = (session: Session, context: ChainMiddlewareContext) => Promise<string | h[] | h[][] | ChainMiddlewareRunStatus | null>;
|
|
67
|
-
export type ChatChainSender = (session: Session, message: (h[] | h | string)[]) => Promise<void>;
|
|
67
|
+
export type ChatChainSender = (session: Session, message: (h[] | h | string)[], context?: ChainMiddlewareContext) => Promise<void>;
|
|
68
68
|
export declare enum ChainMiddlewareRunStatus {
|
|
69
69
|
SKIPPED = 0,
|
|
70
70
|
STOP = 1,
|
package/lib/chains/index.cjs
CHANGED
|
@@ -65,6 +65,26 @@ var lifecycleNames = [
|
|
|
65
65
|
"lifecycle-send"
|
|
66
66
|
];
|
|
67
67
|
|
|
68
|
+
// src/utils/time.ts
|
|
69
|
+
function formatDuration(ms) {
|
|
70
|
+
if (ms < 1e3) {
|
|
71
|
+
return `${ms}ms`;
|
|
72
|
+
}
|
|
73
|
+
const totalSeconds = Math.floor(ms / 1e3);
|
|
74
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
75
|
+
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
76
|
+
const seconds = totalSeconds % 60;
|
|
77
|
+
if (hours > 0) {
|
|
78
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
79
|
+
}
|
|
80
|
+
if (minutes > 0) {
|
|
81
|
+
return `${minutes}m ${seconds}s`;
|
|
82
|
+
}
|
|
83
|
+
const decimal = (ms / 1e3).toFixed(2);
|
|
84
|
+
return `${decimal}s`;
|
|
85
|
+
}
|
|
86
|
+
__name(formatDuration, "formatDuration");
|
|
87
|
+
|
|
68
88
|
// src/chains/chain.ts
|
|
69
89
|
var logger;
|
|
70
90
|
var ChatChain = class {
|
|
@@ -76,7 +96,7 @@ var ChatChain = class {
|
|
|
76
96
|
this._senders = [];
|
|
77
97
|
const defaultChatChainSender = new DefaultChatChainSender(config);
|
|
78
98
|
this._senders.push(
|
|
79
|
-
(session, messages) => defaultChatChainSender.send(session, messages)
|
|
99
|
+
(session, messages, context) => defaultChatChainSender.send(session, messages, context)
|
|
80
100
|
);
|
|
81
101
|
}
|
|
82
102
|
static {
|
|
@@ -102,8 +122,10 @@ var ChatChain = class {
|
|
|
102
122
|
message: session.content,
|
|
103
123
|
ctx: ctx ?? this.ctx,
|
|
104
124
|
session,
|
|
105
|
-
options: {
|
|
106
|
-
|
|
125
|
+
options: {
|
|
126
|
+
startedAt: Date.now()
|
|
127
|
+
},
|
|
128
|
+
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message, context), "send"),
|
|
107
129
|
recallThinkingMessage: this._createRecallThinkingMessage(
|
|
108
130
|
{}
|
|
109
131
|
)
|
|
@@ -120,11 +142,14 @@ var ChatChain = class {
|
|
|
120
142
|
ctx,
|
|
121
143
|
session,
|
|
122
144
|
command,
|
|
123
|
-
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message), "send"),
|
|
145
|
+
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message, context), "send"),
|
|
124
146
|
recallThinkingMessage: this._createRecallThinkingMessage(
|
|
125
147
|
{}
|
|
126
148
|
),
|
|
127
|
-
options
|
|
149
|
+
options: {
|
|
150
|
+
...options,
|
|
151
|
+
startedAt: Date.now()
|
|
152
|
+
}
|
|
128
153
|
};
|
|
129
154
|
context.recallThinkingMessage = this._createRecallThinkingMessage(context);
|
|
130
155
|
const result = await this._runMiddleware(session, context);
|
|
@@ -184,7 +209,7 @@ var ChatChain = class {
|
|
|
184
209
|
logger.debug("-".repeat(40) + "\n");
|
|
185
210
|
}
|
|
186
211
|
if (context.message != null && context.message !== originMessage) {
|
|
187
|
-
await this.sendMessage(session, context.message);
|
|
212
|
+
await this.sendMessage(session, context.message, context);
|
|
188
213
|
}
|
|
189
214
|
return true;
|
|
190
215
|
}
|
|
@@ -253,9 +278,9 @@ var ChatChain = class {
|
|
|
253
278
|
const shouldLogTime = !middleware.name.startsWith("lifecycle-") && result !== 0 /* SKIPPED */ && middleware.name !== "allow_reply" && executionTime > 100;
|
|
254
279
|
if (shouldLogTime) {
|
|
255
280
|
logger.debug(
|
|
256
|
-
`middleware %c executed in %
|
|
281
|
+
`middleware %c executed in %s`,
|
|
257
282
|
middleware.name,
|
|
258
|
-
executionTime
|
|
283
|
+
formatDuration(executionTime)
|
|
259
284
|
);
|
|
260
285
|
}
|
|
261
286
|
if (result === 1 /* STOP */) {
|
|
@@ -280,15 +305,15 @@ var ChatChain = class {
|
|
|
280
305
|
};
|
|
281
306
|
}
|
|
282
307
|
}
|
|
283
|
-
async sendMessage(session, message) {
|
|
308
|
+
async sendMessage(session, message, context) {
|
|
284
309
|
const messages = message instanceof Array ? message : [message];
|
|
285
310
|
for (const sender of this._senders) {
|
|
286
|
-
await sender(session, messages);
|
|
311
|
+
await sender(session, messages, context);
|
|
287
312
|
}
|
|
288
313
|
}
|
|
289
314
|
async _handleStopStatus(session, context, originMessage, isOutputLog) {
|
|
290
315
|
if (context.message != null && context.message !== originMessage) {
|
|
291
|
-
await this.sendMessage(session, context.message);
|
|
316
|
+
await this.sendMessage(session, context.message, context);
|
|
292
317
|
}
|
|
293
318
|
if (isOutputLog) {
|
|
294
319
|
logger.debug("-".repeat(40) + "\n");
|
|
@@ -297,7 +322,7 @@ var ChatChain = class {
|
|
|
297
322
|
async _handleMiddlewareError(session, middlewareName, error) {
|
|
298
323
|
if (error instanceof import_error.ChatLunaError) {
|
|
299
324
|
const message = error.errorCode === import_error.ChatLunaErrorCode.ABORTED ? session.text("chatluna.aborted") : error.message;
|
|
300
|
-
await this.sendMessage(session, message);
|
|
325
|
+
await this.sendMessage(session, message, void 0);
|
|
301
326
|
return;
|
|
302
327
|
}
|
|
303
328
|
logger.error(`chat-chain: ${middlewareName} error ${error}`);
|
|
@@ -309,7 +334,8 @@ var ChatChain = class {
|
|
|
309
334
|
session.text("chatluna.middleware_error", [
|
|
310
335
|
middlewareName,
|
|
311
336
|
error.message
|
|
312
|
-
])
|
|
337
|
+
]),
|
|
338
|
+
void 0
|
|
313
339
|
);
|
|
314
340
|
}
|
|
315
341
|
};
|
|
@@ -580,7 +606,7 @@ var DefaultChatChainSender = class {
|
|
|
580
606
|
return element;
|
|
581
607
|
});
|
|
582
608
|
}
|
|
583
|
-
async send(session, messages) {
|
|
609
|
+
async send(session, messages, context) {
|
|
584
610
|
if (!messages?.length) return;
|
|
585
611
|
if (isElementArray(messages?.[0]) && messages[0][1]?.type === "markdown-qq") {
|
|
586
612
|
await this.sendAsQQMarkdown(session, messages[0][0]);
|
|
@@ -590,18 +616,21 @@ var DefaultChatChainSender = class {
|
|
|
590
616
|
await this.sendAsForward(session, messages);
|
|
591
617
|
return;
|
|
592
618
|
}
|
|
593
|
-
await this.sendAsNormal(session, messages);
|
|
619
|
+
await this.sendAsNormal(session, messages, context);
|
|
594
620
|
}
|
|
595
621
|
async sendAsQQMarkdown(session, message) {
|
|
596
622
|
const { user } = session.event;
|
|
597
|
-
await session.bot.internal.sendPrivateMessage(
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
623
|
+
await session.bot.internal.sendPrivateMessage(
|
|
624
|
+
user.id,
|
|
625
|
+
{
|
|
626
|
+
msg_type: 2,
|
|
627
|
+
msg_seq: 1,
|
|
628
|
+
msg_id: session.messageId,
|
|
629
|
+
markdown: {
|
|
630
|
+
content: message.attrs["content"]
|
|
631
|
+
}
|
|
603
632
|
}
|
|
604
|
-
|
|
633
|
+
);
|
|
605
634
|
}
|
|
606
635
|
async sendAsForward(session, messages) {
|
|
607
636
|
const sendMessages = this.convertToForwardMessages(messages);
|
|
@@ -625,19 +654,23 @@ var DefaultChatChainSender = class {
|
|
|
625
654
|
}
|
|
626
655
|
throw new Error(`Unsupported message type: ${typeof firstMsg}`);
|
|
627
656
|
}
|
|
628
|
-
async sendAsNormal(session, messages) {
|
|
657
|
+
async sendAsNormal(session, messages, context) {
|
|
629
658
|
for (const message of messages) {
|
|
630
659
|
const messageFragment = await this.buildMessageFragment(
|
|
631
660
|
session,
|
|
632
|
-
message
|
|
661
|
+
message,
|
|
662
|
+
context
|
|
633
663
|
);
|
|
634
664
|
if (!messageFragment?.length) continue;
|
|
635
665
|
const processedFragment = this.processElements(messageFragment);
|
|
636
666
|
await session.sendQueued(processedFragment);
|
|
637
667
|
}
|
|
638
668
|
}
|
|
639
|
-
async buildMessageFragment(session, message) {
|
|
640
|
-
const
|
|
669
|
+
async buildMessageFragment(session, message, context) {
|
|
670
|
+
const start = context?.options?.startedAt;
|
|
671
|
+
const elapsed = start ? Date.now() - start : 0;
|
|
672
|
+
const threshold = (this.config.replyQuoteThreshold ?? 0) * 1e3;
|
|
673
|
+
const shouldAddQuote = this.config.isReplyWithAt && session.isDirect === false && session.messageId && elapsed >= threshold;
|
|
641
674
|
const messageContent = this.convertMessageToArray(message);
|
|
642
675
|
if (messageContent == null || messageContent.length < 1 || messageContent.length === 1 && messageContent.join().length === 0) {
|
|
643
676
|
return;
|
package/lib/chains/index.mjs
CHANGED
|
@@ -20,6 +20,26 @@ var lifecycleNames = [
|
|
|
20
20
|
"lifecycle-send"
|
|
21
21
|
];
|
|
22
22
|
|
|
23
|
+
// src/utils/time.ts
|
|
24
|
+
function formatDuration(ms) {
|
|
25
|
+
if (ms < 1e3) {
|
|
26
|
+
return `${ms}ms`;
|
|
27
|
+
}
|
|
28
|
+
const totalSeconds = Math.floor(ms / 1e3);
|
|
29
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
30
|
+
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
31
|
+
const seconds = totalSeconds % 60;
|
|
32
|
+
if (hours > 0) {
|
|
33
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
34
|
+
}
|
|
35
|
+
if (minutes > 0) {
|
|
36
|
+
return `${minutes}m ${seconds}s`;
|
|
37
|
+
}
|
|
38
|
+
const decimal = (ms / 1e3).toFixed(2);
|
|
39
|
+
return `${decimal}s`;
|
|
40
|
+
}
|
|
41
|
+
__name(formatDuration, "formatDuration");
|
|
42
|
+
|
|
23
43
|
// src/chains/chain.ts
|
|
24
44
|
var logger;
|
|
25
45
|
var ChatChain = class {
|
|
@@ -31,7 +51,7 @@ var ChatChain = class {
|
|
|
31
51
|
this._senders = [];
|
|
32
52
|
const defaultChatChainSender = new DefaultChatChainSender(config);
|
|
33
53
|
this._senders.push(
|
|
34
|
-
(session, messages) => defaultChatChainSender.send(session, messages)
|
|
54
|
+
(session, messages, context) => defaultChatChainSender.send(session, messages, context)
|
|
35
55
|
);
|
|
36
56
|
}
|
|
37
57
|
static {
|
|
@@ -57,8 +77,10 @@ var ChatChain = class {
|
|
|
57
77
|
message: session.content,
|
|
58
78
|
ctx: ctx ?? this.ctx,
|
|
59
79
|
session,
|
|
60
|
-
options: {
|
|
61
|
-
|
|
80
|
+
options: {
|
|
81
|
+
startedAt: Date.now()
|
|
82
|
+
},
|
|
83
|
+
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message, context), "send"),
|
|
62
84
|
recallThinkingMessage: this._createRecallThinkingMessage(
|
|
63
85
|
{}
|
|
64
86
|
)
|
|
@@ -75,11 +97,14 @@ var ChatChain = class {
|
|
|
75
97
|
ctx,
|
|
76
98
|
session,
|
|
77
99
|
command,
|
|
78
|
-
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message), "send"),
|
|
100
|
+
send: /* @__PURE__ */ __name((message) => this.sendMessage(session, message, context), "send"),
|
|
79
101
|
recallThinkingMessage: this._createRecallThinkingMessage(
|
|
80
102
|
{}
|
|
81
103
|
),
|
|
82
|
-
options
|
|
104
|
+
options: {
|
|
105
|
+
...options,
|
|
106
|
+
startedAt: Date.now()
|
|
107
|
+
}
|
|
83
108
|
};
|
|
84
109
|
context.recallThinkingMessage = this._createRecallThinkingMessage(context);
|
|
85
110
|
const result = await this._runMiddleware(session, context);
|
|
@@ -139,7 +164,7 @@ var ChatChain = class {
|
|
|
139
164
|
logger.debug("-".repeat(40) + "\n");
|
|
140
165
|
}
|
|
141
166
|
if (context.message != null && context.message !== originMessage) {
|
|
142
|
-
await this.sendMessage(session, context.message);
|
|
167
|
+
await this.sendMessage(session, context.message, context);
|
|
143
168
|
}
|
|
144
169
|
return true;
|
|
145
170
|
}
|
|
@@ -208,9 +233,9 @@ var ChatChain = class {
|
|
|
208
233
|
const shouldLogTime = !middleware.name.startsWith("lifecycle-") && result !== 0 /* SKIPPED */ && middleware.name !== "allow_reply" && executionTime > 100;
|
|
209
234
|
if (shouldLogTime) {
|
|
210
235
|
logger.debug(
|
|
211
|
-
`middleware %c executed in %
|
|
236
|
+
`middleware %c executed in %s`,
|
|
212
237
|
middleware.name,
|
|
213
|
-
executionTime
|
|
238
|
+
formatDuration(executionTime)
|
|
214
239
|
);
|
|
215
240
|
}
|
|
216
241
|
if (result === 1 /* STOP */) {
|
|
@@ -235,15 +260,15 @@ var ChatChain = class {
|
|
|
235
260
|
};
|
|
236
261
|
}
|
|
237
262
|
}
|
|
238
|
-
async sendMessage(session, message) {
|
|
263
|
+
async sendMessage(session, message, context) {
|
|
239
264
|
const messages = message instanceof Array ? message : [message];
|
|
240
265
|
for (const sender of this._senders) {
|
|
241
|
-
await sender(session, messages);
|
|
266
|
+
await sender(session, messages, context);
|
|
242
267
|
}
|
|
243
268
|
}
|
|
244
269
|
async _handleStopStatus(session, context, originMessage, isOutputLog) {
|
|
245
270
|
if (context.message != null && context.message !== originMessage) {
|
|
246
|
-
await this.sendMessage(session, context.message);
|
|
271
|
+
await this.sendMessage(session, context.message, context);
|
|
247
272
|
}
|
|
248
273
|
if (isOutputLog) {
|
|
249
274
|
logger.debug("-".repeat(40) + "\n");
|
|
@@ -252,7 +277,7 @@ var ChatChain = class {
|
|
|
252
277
|
async _handleMiddlewareError(session, middlewareName, error) {
|
|
253
278
|
if (error instanceof ChatLunaError) {
|
|
254
279
|
const message = error.errorCode === ChatLunaErrorCode.ABORTED ? session.text("chatluna.aborted") : error.message;
|
|
255
|
-
await this.sendMessage(session, message);
|
|
280
|
+
await this.sendMessage(session, message, void 0);
|
|
256
281
|
return;
|
|
257
282
|
}
|
|
258
283
|
logger.error(`chat-chain: ${middlewareName} error ${error}`);
|
|
@@ -264,7 +289,8 @@ var ChatChain = class {
|
|
|
264
289
|
session.text("chatluna.middleware_error", [
|
|
265
290
|
middlewareName,
|
|
266
291
|
error.message
|
|
267
|
-
])
|
|
292
|
+
]),
|
|
293
|
+
void 0
|
|
268
294
|
);
|
|
269
295
|
}
|
|
270
296
|
};
|
|
@@ -535,7 +561,7 @@ var DefaultChatChainSender = class {
|
|
|
535
561
|
return element;
|
|
536
562
|
});
|
|
537
563
|
}
|
|
538
|
-
async send(session, messages) {
|
|
564
|
+
async send(session, messages, context) {
|
|
539
565
|
if (!messages?.length) return;
|
|
540
566
|
if (isElementArray(messages?.[0]) && messages[0][1]?.type === "markdown-qq") {
|
|
541
567
|
await this.sendAsQQMarkdown(session, messages[0][0]);
|
|
@@ -545,18 +571,21 @@ var DefaultChatChainSender = class {
|
|
|
545
571
|
await this.sendAsForward(session, messages);
|
|
546
572
|
return;
|
|
547
573
|
}
|
|
548
|
-
await this.sendAsNormal(session, messages);
|
|
574
|
+
await this.sendAsNormal(session, messages, context);
|
|
549
575
|
}
|
|
550
576
|
async sendAsQQMarkdown(session, message) {
|
|
551
577
|
const { user } = session.event;
|
|
552
|
-
await session.bot.internal.sendPrivateMessage(
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
578
|
+
await session.bot.internal.sendPrivateMessage(
|
|
579
|
+
user.id,
|
|
580
|
+
{
|
|
581
|
+
msg_type: 2,
|
|
582
|
+
msg_seq: 1,
|
|
583
|
+
msg_id: session.messageId,
|
|
584
|
+
markdown: {
|
|
585
|
+
content: message.attrs["content"]
|
|
586
|
+
}
|
|
558
587
|
}
|
|
559
|
-
|
|
588
|
+
);
|
|
560
589
|
}
|
|
561
590
|
async sendAsForward(session, messages) {
|
|
562
591
|
const sendMessages = this.convertToForwardMessages(messages);
|
|
@@ -580,19 +609,23 @@ var DefaultChatChainSender = class {
|
|
|
580
609
|
}
|
|
581
610
|
throw new Error(`Unsupported message type: ${typeof firstMsg}`);
|
|
582
611
|
}
|
|
583
|
-
async sendAsNormal(session, messages) {
|
|
612
|
+
async sendAsNormal(session, messages, context) {
|
|
584
613
|
for (const message of messages) {
|
|
585
614
|
const messageFragment = await this.buildMessageFragment(
|
|
586
615
|
session,
|
|
587
|
-
message
|
|
616
|
+
message,
|
|
617
|
+
context
|
|
588
618
|
);
|
|
589
619
|
if (!messageFragment?.length) continue;
|
|
590
620
|
const processedFragment = this.processElements(messageFragment);
|
|
591
621
|
await session.sendQueued(processedFragment);
|
|
592
622
|
}
|
|
593
623
|
}
|
|
594
|
-
async buildMessageFragment(session, message) {
|
|
595
|
-
const
|
|
624
|
+
async buildMessageFragment(session, message, context) {
|
|
625
|
+
const start = context?.options?.startedAt;
|
|
626
|
+
const elapsed = start ? Date.now() - start : 0;
|
|
627
|
+
const threshold = (this.config.replyQuoteThreshold ?? 0) * 1e3;
|
|
628
|
+
const shouldAddQuote = this.config.isReplyWithAt && session.isDirect === false && session.messageId && elapsed >= threshold;
|
|
596
629
|
const messageContent = this.convertMessageToArray(message);
|
|
597
630
|
if (messageContent == null || messageContent.length < 1 || messageContent.length === 1 && messageContent.join().length === 0) {
|
|
598
631
|
return;
|