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.
Files changed (2) hide show
  1. package/lib/index.js +39 -25
  2. 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
- return sendResult_forward(session, config, result, logger);
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
- try {
276
- if (!(session.onebot && session.onebot._request))
277
- throw new Error("onebot is not defined");
278
- await session.onebot._request('send_group_forward_msg', {
279
- group_id: session.guildId,
280
- messages: forwardNodes,
281
- news: [{ text: result.description || '' }],
282
- prompt: result.title || '',
283
- summary: 'Powered by furryaxw',
284
- source: result.title || ''
285
- });
286
- if (config.logLevel === 'full') {
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
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "koishi-plugin-share-links-analysis",
3
3
  "description": "自用插件",
4
4
  "license": "MIT",
5
- "version": "0.2.0",
5
+ "version": "0.2.2",
6
6
  "main": "lib/index.js",
7
7
  "typings": "lib/index.d.ts",
8
8
  "files": [