koishi-plugin-share-links-analysis 0.2.0 → 0.2.2
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/index.js +39 -25
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -126,12 +126,25 @@ function escapeHtml(str) {
|
|
|
126
126
|
}
|
|
127
127
|
async function sendResult(session, config, result, logger) {
|
|
128
128
|
if (config.useForward) {
|
|
129
|
-
|
|
129
|
+
try {
|
|
130
|
+
await sendResult_forward(session, config, result, logger);
|
|
131
|
+
return; // 成功,结束
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
logger.warn('合并转发失败,回退到普通消息:', err);
|
|
135
|
+
await sendResult_plain(session, config, result, logger);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
await sendResult_plain(session, config, result, logger);
|
|
141
|
+
return;
|
|
130
142
|
}
|
|
131
|
-
else
|
|
132
|
-
return sendResult_plain(session, config, result, logger);
|
|
133
143
|
}
|
|
134
144
|
async function sendResult_plain(session, config, result, logger) {
|
|
145
|
+
if (config.logLevel === 'full') {
|
|
146
|
+
logger.info('进入普通消息发送');
|
|
147
|
+
}
|
|
135
148
|
let message = config.format;
|
|
136
149
|
// 对所有文本内容进行 HTML 转义
|
|
137
150
|
message = message.replace(/{title}/g, escapeHtml(result.title || ''));
|
|
@@ -144,16 +157,15 @@ async function sendResult_plain(session, config, result, logger) {
|
|
|
144
157
|
message = message.replace(/{stats}/g, escapeHtml(result.stats || ''));
|
|
145
158
|
// 【修复】只要 videoUrl 存在就处理,仅当 duration 明确超长时才替换为提示
|
|
146
159
|
if (result.videoUrl) {
|
|
160
|
+
message = message.replace(/{videoUrl}/g, escapeHtml(result.videoUrl));
|
|
147
161
|
// 仅当 duration 是有效数字且超长时,才显示提示
|
|
148
162
|
if (typeof result.duration === 'number' && result.duration > config.Maximumduration * 60) {
|
|
149
163
|
const tip = escapeHtml(config.Maximumduration_tip || '');
|
|
150
164
|
message = message.replace(/{video}/g, tip);
|
|
151
|
-
message = message.replace(/{videoUrl}/g, '');
|
|
152
165
|
}
|
|
153
166
|
else {
|
|
154
167
|
// 正常发送视频和链接
|
|
155
168
|
message = message.replace(/{video}/g, koishi_1.h.video(result.videoUrl).toString());
|
|
156
|
-
message = message.replace(/{videoUrl}/g, escapeHtml(result.videoUrl));
|
|
157
169
|
if (config.logLevel === 'link_only' || config.logLevel === 'full') {
|
|
158
170
|
logger.info(`视频直链 (${result.platform}): ${result.videoUrl}`);
|
|
159
171
|
}
|
|
@@ -174,6 +186,9 @@ async function sendResult_plain(session, config, result, logger) {
|
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
async function sendResult_forward(session, config, result, logger) {
|
|
189
|
+
if (config.logLevel === 'full') {
|
|
190
|
+
logger.info('进入合并转发发送');
|
|
191
|
+
}
|
|
177
192
|
let message = config.format;
|
|
178
193
|
// Step 1: 替换纯文本字段
|
|
179
194
|
message = message.replace(/{title}/g, escapeHtml(result.title || ''));
|
|
@@ -181,6 +196,13 @@ async function sendResult_forward(session, config, result, logger) {
|
|
|
181
196
|
message = message.replace(/{description}/g, escapeHtml(result.description || ''));
|
|
182
197
|
message = message.replace(/{sourceUrl}/g, escapeHtml(result.sourceUrl || ''));
|
|
183
198
|
message = message.replace(/{stats}/g, escapeHtml(result.stats || ''));
|
|
199
|
+
if (result.videoUrl) {
|
|
200
|
+
message = message.replace(/{videoUrl}/g, escapeHtml(result.videoUrl));
|
|
201
|
+
}
|
|
202
|
+
if (typeof result.duration === 'number' && result.duration > config.Maximumduration * 60) {
|
|
203
|
+
const tip = escapeHtml(config.Maximumduration_tip || '');
|
|
204
|
+
message = message.replace(/{video}/g, tip);
|
|
205
|
+
}
|
|
184
206
|
// Step 2: 检查是否包含视频占位符
|
|
185
207
|
const hasVideoInTemplate = message.includes('{video}');
|
|
186
208
|
// Step 3: 构建富媒体映射
|
|
@@ -260,7 +282,6 @@ async function sendResult_forward(session, config, result, logger) {
|
|
|
260
282
|
nickname: '分享助手',
|
|
261
283
|
content: [
|
|
262
284
|
{ type: 'video', data: { file: result.videoUrl } },
|
|
263
|
-
{ type: 'text', data: { text: `\n视频直链: ${result.videoUrl}` } }
|
|
264
285
|
]
|
|
265
286
|
}
|
|
266
287
|
});
|
|
@@ -272,24 +293,17 @@ async function sendResult_forward(session, config, result, logger) {
|
|
|
272
293
|
if (forwardNodes.length === 0)
|
|
273
294
|
return;
|
|
274
295
|
// Step 6: 发送合并转发
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
logger.info(`解析结果: \n ${JSON.stringify(result, null, 2)}`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
catch (err) {
|
|
291
|
-
logger.warn('合并转发发送失败:', err);
|
|
292
|
-
// 失败时回退到普通消息
|
|
293
|
-
await sendResult_plain(session, config, result, logger);
|
|
296
|
+
if (!(session.onebot && session.onebot._request))
|
|
297
|
+
throw new Error("onebot is not defined");
|
|
298
|
+
await session.onebot._request('send_group_forward_msg', {
|
|
299
|
+
group_id: session.guildId,
|
|
300
|
+
messages: forwardNodes,
|
|
301
|
+
news: [{ text: result.description || '' }],
|
|
302
|
+
prompt: result.title || '',
|
|
303
|
+
summary: 'Powered by furryaxw',
|
|
304
|
+
source: result.title || ''
|
|
305
|
+
});
|
|
306
|
+
if (config.logLevel === 'full') {
|
|
307
|
+
logger.info(`解析结果: \n ${JSON.stringify(result, null, 2)}`);
|
|
294
308
|
}
|
|
295
309
|
}
|