koishi-plugin-maichuni-scorehelper 0.0.12-test → 0.0.13-test
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.
|
@@ -302,7 +302,31 @@ class MaimaiStatus extends koishi_1.Service {
|
|
|
302
302
|
catch (err) {
|
|
303
303
|
const snippet = data.slice(0, 200);
|
|
304
304
|
this.clientLogger.warn(`Heartbeat JSON parse failed: ${err.message}; snippet=${snippet}`);
|
|
305
|
-
|
|
305
|
+
// 如果返回的是 CC HTML,尝试使用 Puppeteer 绕过
|
|
306
|
+
if (this.ctx.puppeteer && snippet.includes('<!DOCTYPE')) {
|
|
307
|
+
try {
|
|
308
|
+
const page = await this.ctx.puppeteer.page();
|
|
309
|
+
const body = await page.evaluate(async (url, ua) => {
|
|
310
|
+
const res = await fetch(url, { headers: { 'User-Agent': ua } });
|
|
311
|
+
return await res.text();
|
|
312
|
+
}, this.API_URL, this.UA);
|
|
313
|
+
await page.close();
|
|
314
|
+
try {
|
|
315
|
+
data = JSON.parse(body);
|
|
316
|
+
}
|
|
317
|
+
catch (err2) {
|
|
318
|
+
this.clientLogger.warn(`Puppeteer heartbeat parse failed: ${err2.message}; body=${body.slice(0, 200)}`);
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
catch (pe) {
|
|
323
|
+
this.clientLogger.warn(`Puppeteer heartbeat fetch failed: ${pe.message}`);
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
306
330
|
}
|
|
307
331
|
}
|
|
308
332
|
// 返回原始对象,包含 heartbeatList 和 uptimeList
|
package/package.json
CHANGED
|
@@ -355,13 +355,34 @@ export class MaimaiStatus extends Service {
|
|
|
355
355
|
|
|
356
356
|
// 如果不是对象,尝试解析 JSON (因为 Object.keys 打印出了索引,说明是字符串)
|
|
357
357
|
if (typeof data === 'string') {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
358
|
+
try {
|
|
359
|
+
data = JSON.parse(data)
|
|
360
|
+
} catch (err) {
|
|
361
|
+
const snippet = data.slice(0, 200)
|
|
362
|
+
this.clientLogger.warn(`Heartbeat JSON parse failed: ${(err as any).message}; snippet=${snippet}`)
|
|
363
|
+
// 如果返回的是 CC HTML,尝试使用 Puppeteer 绕过
|
|
364
|
+
if (this.ctx.puppeteer && snippet.includes('<!DOCTYPE')) {
|
|
365
|
+
try {
|
|
366
|
+
const page = await this.ctx.puppeteer.page()
|
|
367
|
+
const body = await page.evaluate(async (url: string, ua: string) => {
|
|
368
|
+
const res = await fetch(url, { headers: { 'User-Agent': ua } })
|
|
369
|
+
return await res.text()
|
|
370
|
+
}, this.API_URL, this.UA)
|
|
371
|
+
await page.close()
|
|
372
|
+
try {
|
|
373
|
+
data = JSON.parse(body)
|
|
374
|
+
} catch (err2) {
|
|
375
|
+
this.clientLogger.warn(`Puppeteer heartbeat parse failed: ${(err2 as any).message}; body=${body.slice(0,200)}`)
|
|
376
|
+
return null
|
|
377
|
+
}
|
|
378
|
+
} catch (pe) {
|
|
379
|
+
this.clientLogger.warn(`Puppeteer heartbeat fetch failed: ${(pe as any).message}`)
|
|
363
380
|
return null
|
|
381
|
+
}
|
|
382
|
+
} else {
|
|
383
|
+
return null
|
|
364
384
|
}
|
|
385
|
+
}
|
|
365
386
|
}
|
|
366
387
|
|
|
367
388
|
// 返回原始对象,包含 heartbeatList 和 uptimeList
|