koishi-plugin-rocom 1.0.18 → 1.0.24
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/announcement-service.d.ts +21 -0
- package/lib/announcement-service.js +63 -0
- package/lib/async-control.d.ts +3 -0
- package/lib/async-control.js +48 -0
- package/lib/atlas-service.js +1 -1
- package/lib/client.d.ts +58 -7
- package/lib/client.js +282 -127
- package/lib/commands/egg.js +66 -4
- package/lib/commands/merchant.d.ts +105 -0
- package/lib/commands/merchant.js +600 -182
- package/lib/commands/query.d.ts +18 -0
- package/lib/commands/query.js +585 -145
- package/lib/commands/ranking.d.ts +2 -0
- package/lib/commands/ranking.js +31 -0
- package/lib/commands/share-code.d.ts +2 -0
- package/lib/commands/share-code.js +111 -0
- package/lib/commands/tools.js +48 -60
- package/lib/commands/wiki.js +1 -1
- package/lib/egg-service.d.ts +82 -8
- package/lib/egg-service.js +235 -19
- package/lib/element-colors.d.ts +3 -0
- package/lib/element-colors.js +34 -0
- package/lib/icon-metrics.d.ts +32 -0
- package/lib/icon-metrics.js +255 -0
- package/lib/img//345/274/202/350/211/262.png +0 -0
- package/lib/img//347/202/253/345/275/251.png +0 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +11857 -175
- package/lib/merchant-catalog.d.ts +47 -0
- package/lib/merchant-catalog.js +193 -0
- package/lib/merchant-clock.d.ts +22 -0
- package/lib/merchant-clock.js +95 -0
- package/lib/merchant-price-log.d.ts +63 -0
- package/lib/merchant-price-log.js +187 -0
- package/lib/merchant-service.d.ts +38 -0
- package/lib/merchant-service.js +216 -0
- package/lib/permissions.d.ts +16 -0
- package/lib/permissions.js +66 -0
- package/lib/pet-data-service.d.ts +13 -0
- package/lib/pet-data-service.js +117 -10
- package/lib/pet-size.d.ts +13 -0
- package/lib/pet-size.js +54 -0
- package/lib/player-service.d.ts +37 -0
- package/lib/player-service.js +201 -0
- package/lib/ranking-service.d.ts +46 -0
- package/lib/ranking-service.js +137 -0
- package/lib/render-templates/announcement/detail.html +8 -0
- package/lib/render-templates/announcement/list.html +5 -0
- package/lib/render-templates/announcement/style.css +1 -0
- package/lib/render-templates/home/style.css +15 -14
- package/lib/render-templates/home-pets/index.html +80 -0
- package/lib/render-templates/home-pets/style.css +338 -0
- package/lib/render-templates/pet-detail-classic/index.html +151 -0
- package/lib/render-templates/pet-detail-classic/style.css +503 -0
- package/lib/render-templates/pet-detail-classic/texture2D/a_title.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/bg.jpg +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/footer.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/icon.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/img_head.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/jinhua_bg.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/level_icon.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/line.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/mask_bar.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/pet_bg.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/pet_rocom.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/pet_rocom_bg.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/poro_bar.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/right_jinhua.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/skill_bg.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/skill_mask.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/star.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/star_1.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/star_8.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/star_9.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/table.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/tags.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/title.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/top_bg.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/xuancai_overlay.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/yise_overlay.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D/ys_bar.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/10.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/11.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/12.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/13.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/14.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/15.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/16.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/17.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/18.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/19.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/2.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/20.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/23.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/3.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/4.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/5.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/6.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/8.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/9.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/205/211.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/206/260.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/234/260.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/271/273.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/271/275.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/201/266.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/227/240.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/231/256/351/200/232.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/234/272/346/242/260.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/255/246.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/257/222.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/260/264.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/201/253.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/224/265.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/277/274.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/215/211.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/220/214.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/231/253.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//351/276/231.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/1.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/10.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/11.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/12.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/13.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/14.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/15.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/16.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/17.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/18.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/19.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/2.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/21.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/23.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/24.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/3.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/4.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/5.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/6.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/7.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/8.png +0 -0
- package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/9.png +0 -0
- package/lib/render-templates/pet-ranking/index.html +99 -0
- package/lib/render-templates/pet-ranking/style.css +338 -0
- package/lib/render-templates/player-search/index.html +7 -0
- package/lib/render-templates/searcheggs/index.html +1 -1
- package/lib/render-templates/searcheggs/size.html +70 -68
- package/lib/render-templates/share-code-classic/assets/eit-logo.png +0 -0
- package/lib/render-templates/share-code-classic/assets/img_xingxingdi.png +0 -0
- package/lib/render-templates/share-code-classic/assets/roco_icon.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/255/227/344/275/223/Rocofontblack-Regular .ttf +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//345/205/211.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//345/206/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//345/234/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//345/271/273.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//345/271/275.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/201/266.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/227/240.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/231/256/351/200/232.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/234/272/346/242/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/255/246.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/257/222.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//346/260/264.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//347/201/253.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//347/224/265.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//347/277/274.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//350/215/211.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//350/220/214.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//350/231/253.png +0 -0
- package/lib/render-templates/share-code-classic/assets//345/256/240/347/211/251/345/261/236/346/200/247//351/276/231.png +0 -0
- package/lib/render-templates/share-code-classic/assets//347/201/253/346/274/206/345/215/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//347/253/213/347/273/230/350/203/214/346/231/257/346/241/206.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/205/211.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/206/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/234/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/245/207/345/274/202.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/271/273.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/271/275.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/201/266.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/231/256/351/200/232.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/234/272/346/242/260.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/255/246.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/257/222.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/260/264.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/261/241/346/237/223.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/201/253.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/224/265.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/277/274.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/215/211.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/220/214.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/231/253.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//351/246/226/351/242/206.png +0 -0
- package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//351/276/231.png +0 -0
- package/lib/render-templates/share-code-classic/index.html +119 -0
- package/lib/render-templates/share-code-classic/style.css +646 -0
- package/lib/render-templates/share-code-team/index.html +105 -0
- package/lib/render-templates/share-code-team/style.css +345 -0
- package/lib/render-templates/yuanxing-shangren/merchant.html +479 -461
- package/lib/render-templates/yuanxing-shangren/today.html +407 -461
- package/lib/render.d.ts +18 -2
- package/lib/render.js +138 -39
- package/lib/send-image.d.ts +1 -1
- package/lib/send-image.js +22 -1
- package/lib/share-code-service.d.ts +68 -0
- package/lib/share-code-service.js +257 -0
- package/lib/subscription-runner.d.ts +6 -0
- package/lib/subscription-runner.js +21 -0
- package/lib/subscription-send.d.ts +4 -2
- package/lib/subscription-send.js +45 -20
- package/lib/ttf/rocom_origin.ttf +0 -0
- package/lib/types.d.ts +14 -1
- package/lib/user.d.ts +11 -0
- package/lib/wiki-catalog.js +1 -1
- package/lib/wiki-service.js +1 -1
- package/package.json +5 -1
- package/readme.md +125 -124
- package/lib/ttf/rocom_skill_origin.ttf +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type AnnouncementBlock = {
|
|
2
|
+
text: string;
|
|
3
|
+
image: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function plainAnnouncementText(value: unknown): string;
|
|
6
|
+
export declare function buildAnnouncementView(data: any, baseUrl: string): {
|
|
7
|
+
title: string;
|
|
8
|
+
id: string;
|
|
9
|
+
publishedAt: string;
|
|
10
|
+
blocks: AnnouncementBlock[];
|
|
11
|
+
commandHint: string;
|
|
12
|
+
copyright: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function announcementViewText(view: ReturnType<typeof buildAnnouncementView>): string;
|
|
15
|
+
export declare function buildAnnouncementListView(data: any, page: number): {
|
|
16
|
+
title: string;
|
|
17
|
+
page: number;
|
|
18
|
+
items: any;
|
|
19
|
+
commandHint: string;
|
|
20
|
+
copyright: string;
|
|
21
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.plainAnnouncementText = plainAnnouncementText;
|
|
4
|
+
exports.buildAnnouncementView = buildAnnouncementView;
|
|
5
|
+
exports.announcementViewText = announcementViewText;
|
|
6
|
+
exports.buildAnnouncementListView = buildAnnouncementListView;
|
|
7
|
+
const player_service_1 = require("./player-service");
|
|
8
|
+
function plainAnnouncementText(value) {
|
|
9
|
+
return String(value ?? '').replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, '')
|
|
10
|
+
.replace(/<br\s*\/?>|<\/(?:p|div|h[1-6]|li)>/gi, '\n')
|
|
11
|
+
.replace(/<[^>]*>/g, '').replace(/ /g, ' ').replace(/&/g, '&')
|
|
12
|
+
.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"')
|
|
13
|
+
.replace(/\n{3,}/g, '\n\n').trim();
|
|
14
|
+
}
|
|
15
|
+
function buildAnnouncementView(data, baseUrl) {
|
|
16
|
+
const item = data?.detail || data?.announcement || data || {};
|
|
17
|
+
const content = typeof item.content === 'object' ? item.content?.text : item.content;
|
|
18
|
+
const html = String(content || item.text || item.summary || '')
|
|
19
|
+
.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, '');
|
|
20
|
+
const blocks = [];
|
|
21
|
+
const images = new Set();
|
|
22
|
+
const addText = (value) => {
|
|
23
|
+
const text = plainAnnouncementText(value);
|
|
24
|
+
if (text)
|
|
25
|
+
blocks.push({ text, image: '' });
|
|
26
|
+
};
|
|
27
|
+
const addImage = (value) => {
|
|
28
|
+
const url = (0, player_service_1.resourceUrl)(value, baseUrl);
|
|
29
|
+
if (!/^https?:\/\//i.test(url) || images.has(url))
|
|
30
|
+
return;
|
|
31
|
+
images.add(url);
|
|
32
|
+
blocks.push({ text: '', image: url });
|
|
33
|
+
};
|
|
34
|
+
let offset = 0;
|
|
35
|
+
for (const match of html.matchAll(/<img\b[^>]*\bsrc\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))[^>]*>/gi)) {
|
|
36
|
+
addText(html.slice(offset, match.index));
|
|
37
|
+
addImage(match[1] || match[2] || match[3]);
|
|
38
|
+
offset = match.index + match[0].length;
|
|
39
|
+
}
|
|
40
|
+
addText(html.slice(offset));
|
|
41
|
+
for (const index of Array.isArray(item.content?.indexes) ? item.content.indexes : []) {
|
|
42
|
+
for (const image of Array.isArray(index?.imageUrl) ? index.imageUrl : [])
|
|
43
|
+
addImage(image);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
title: String(item.title || '洛克公告'), id: String(item.thread_id || item.id || ''),
|
|
47
|
+
publishedAt: String(item.publishAt || item.published_at || item.createdAt || ''),
|
|
48
|
+
blocks, commandHint: '洛克.公告详情 <公告ID>', copyright: 'Koishi · 洛克王国',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function announcementViewText(view) {
|
|
52
|
+
return [view.title, view.publishedAt, ...view.blocks.map(block => block.text || block.image)].filter(Boolean).join('\n');
|
|
53
|
+
}
|
|
54
|
+
function buildAnnouncementListView(data, page) {
|
|
55
|
+
const items = Array.isArray(data?.items) ? data.items : Array.isArray(data?.list) ? data.list : [];
|
|
56
|
+
return {
|
|
57
|
+
title: '洛克公告', page,
|
|
58
|
+
items: items.map((item) => ({ id: String(item.thread_id || item.id || ''),
|
|
59
|
+
title: String(item.title || '未命名公告'), summary: plainAnnouncementText(item.summary),
|
|
60
|
+
publishedAt: String(item.publishAt || item.published_at || item.createdAt || '') })),
|
|
61
|
+
commandHint: '洛克.公告 [页码] · 洛克.公告详情 <公告ID>', copyright: 'Koishi · 洛克王国',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** A deadline cancels the underlying operation as well as the caller's wait. */
|
|
2
|
+
export declare function withDeadline<T>(timeoutMs: number, parent: AbortSignal | undefined, task: (signal: AbortSignal) => Promise<T>, onAbort?: () => void): Promise<T>;
|
|
3
|
+
export declare function delay(ms: number, signal?: AbortSignal): Promise<void>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withDeadline = withDeadline;
|
|
4
|
+
exports.delay = delay;
|
|
5
|
+
/** A deadline cancels the underlying operation as well as the caller's wait. */
|
|
6
|
+
async function withDeadline(timeoutMs, parent, task, onAbort) {
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
const forward = () => controller.abort(parent?.reason ?? new Error('操作已取消'));
|
|
9
|
+
if (parent?.aborted)
|
|
10
|
+
forward();
|
|
11
|
+
else
|
|
12
|
+
parent?.addEventListener('abort', forward, { once: true });
|
|
13
|
+
const timer = setTimeout(() => controller.abort(new Error('操作超时')), Math.max(1, timeoutMs));
|
|
14
|
+
let stop = () => { };
|
|
15
|
+
const cancelled = new Promise((_, reject) => {
|
|
16
|
+
stop = () => {
|
|
17
|
+
onAbort?.();
|
|
18
|
+
reject(controller.signal.reason);
|
|
19
|
+
};
|
|
20
|
+
if (controller.signal.aborted)
|
|
21
|
+
stop();
|
|
22
|
+
else
|
|
23
|
+
controller.signal.addEventListener('abort', stop, { once: true });
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
return await Promise.race([cancelled, Promise.resolve().then(() => {
|
|
27
|
+
controller.signal.throwIfAborted();
|
|
28
|
+
return task(controller.signal);
|
|
29
|
+
})]);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
clearTimeout(timer);
|
|
33
|
+
parent?.removeEventListener('abort', forward);
|
|
34
|
+
controller.signal.removeEventListener('abort', stop);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function delay(ms, signal) {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
if (signal?.aborted)
|
|
40
|
+
return reject(signal.reason);
|
|
41
|
+
const cancel = () => { clearTimeout(timer); reject(signal?.reason); };
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
signal?.removeEventListener('abort', cancel);
|
|
44
|
+
resolve();
|
|
45
|
+
}, Math.max(0, ms));
|
|
46
|
+
signal?.addEventListener('abort', cancel, { once: true });
|
|
47
|
+
});
|
|
48
|
+
}
|
package/lib/atlas-service.js
CHANGED
|
@@ -149,7 +149,7 @@ class AtlasService {
|
|
|
149
149
|
}
|
|
150
150
|
return text;
|
|
151
151
|
}
|
|
152
|
-
//
|
|
152
|
+
// 解析简单结构的 pets.yaml:`正式名:` + 缩进 `- 别名` 列表。
|
|
153
153
|
loadPetAliases() {
|
|
154
154
|
const filePath = this.aliasPath();
|
|
155
155
|
if (!node_fs_1.default.existsSync(filePath))
|
package/lib/client.d.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { Context } from 'koishi';
|
|
2
|
+
export type JsonObject = Record<string, unknown>;
|
|
3
|
+
export declare const isObject: (v: unknown) => v is JsonObject;
|
|
4
|
+
export declare function inheritGoodsMapping<T extends JsonObject>(parent: JsonObject, child: T): T & {
|
|
5
|
+
_goods_mapping?: unknown;
|
|
6
|
+
};
|
|
7
|
+
/** 传给 ingame 请求的可选授权上下文:指定 UID 查询时透传凭证,不自动替换为主账号。 */
|
|
8
|
+
export interface IngameAuthContext {
|
|
9
|
+
fwToken?: string;
|
|
10
|
+
userIdentifier?: string;
|
|
11
|
+
}
|
|
2
12
|
export interface IngameTaskPollOptions {
|
|
3
13
|
/** 服务端同步等待毫秒(long-poll),这段时间内服务端会尽量直接返回结果而不入队 */
|
|
4
14
|
waitMs?: number;
|
|
@@ -8,6 +18,8 @@ export interface IngameTaskPollOptions {
|
|
|
8
18
|
timeoutMs?: number;
|
|
9
19
|
/** 任务进入排队(拿到 task_id)时回调一次,可用于向用户发送“排队中”提示 */
|
|
10
20
|
onQueued?: (taskId: string) => void | Promise<void>;
|
|
21
|
+
/** 取消信号;插件卸载或调用方放弃时用于中止在途请求与轮询 */
|
|
22
|
+
signal?: AbortSignal;
|
|
11
23
|
}
|
|
12
24
|
export declare class RocomClient {
|
|
13
25
|
private baseUrl;
|
|
@@ -17,6 +29,7 @@ export declare class RocomClient {
|
|
|
17
29
|
private lastErrorBrief;
|
|
18
30
|
constructor(baseUrl: string, apiKey: string, timeout?: number);
|
|
19
31
|
private sanitizeUid;
|
|
32
|
+
private attachGoodsMapping;
|
|
20
33
|
private wegameHeaders;
|
|
21
34
|
private rocomHeaders;
|
|
22
35
|
private formatHttpError;
|
|
@@ -38,9 +51,10 @@ export declare class RocomClient {
|
|
|
38
51
|
private static normalizeTaskStatus;
|
|
39
52
|
private static extractTaskId;
|
|
40
53
|
private static isCompletedGatewayPayload;
|
|
41
|
-
private static
|
|
54
|
+
private static inspectIngamePayload;
|
|
42
55
|
private static taskErrorMessage;
|
|
43
56
|
private pollIngameTask;
|
|
57
|
+
private queuedQuery;
|
|
44
58
|
qqQrLogin(ctx: Context, userIdentifier: string): Promise<any>;
|
|
45
59
|
qqQrStatus(ctx: Context, fwToken: string, userIdentifier: string): Promise<any>;
|
|
46
60
|
wechatQrLogin(ctx: Context, userIdentifier: string): Promise<any>;
|
|
@@ -61,12 +75,37 @@ export declare class RocomClient {
|
|
|
61
75
|
getBattleOverview(ctx: Context, fwToken: string, userIdentifier?: string): Promise<any>;
|
|
62
76
|
getBattleList(ctx: Context, fwToken: string, pageSize?: number, afterTime?: string, userIdentifier?: string): Promise<any>;
|
|
63
77
|
private isIngamePlayerPayload;
|
|
64
|
-
ingamePlayerSearch(ctx: Context, uid: string
|
|
78
|
+
ingamePlayerSearch(ctx: Context, uid: string, options?: IngameTaskPollOptions & {
|
|
79
|
+
auth?: IngameAuthContext;
|
|
80
|
+
}): Promise<any>;
|
|
81
|
+
ingamePlayerCard(ctx: Context, uid: string, options?: IngameTaskPollOptions & {
|
|
82
|
+
auth?: IngameAuthContext;
|
|
83
|
+
source?: string;
|
|
84
|
+
}): Promise<any>;
|
|
65
85
|
getPets(ctx: Context, fwToken: string, petSubset?: number, pageNo?: number, pageSize?: number, userIdentifier?: string): Promise<any>;
|
|
66
86
|
getLineupList(ctx: Context, fwToken: string, pageNo?: number, category?: string, userIdentifier?: string): Promise<any>;
|
|
67
87
|
getExchangePosters(ctx: Context, fwToken: string, pageNo?: number, userIdentifier?: string): Promise<any>;
|
|
68
|
-
getMerchantInfo(ctx: Context, refresh?: boolean
|
|
88
|
+
getMerchantInfo(ctx: Context, refresh?: boolean, options?: IngameTaskPollOptions & {
|
|
89
|
+
auth?: IngameAuthContext;
|
|
90
|
+
}): Promise<any>;
|
|
91
|
+
getLegacyMerchantInfo(ctx: Context, refresh?: boolean, options?: {
|
|
92
|
+
signal?: AbortSignal;
|
|
93
|
+
auth?: IngameAuthContext;
|
|
94
|
+
}): Promise<any>;
|
|
69
95
|
queryPetSize(ctx: Context, diameter: number, weight: number, pool?: string, pageNo?: number, pageSize?: number, userIdentifier?: string): Promise<any>;
|
|
96
|
+
searchEggBySize(ctx: Context, heightMeters: number, weightKg: number, pageNo?: number, pageSize?: number, userIdentifier?: string): Promise<any>;
|
|
97
|
+
getPetCollectionRanking(ctx: Context, rankType: 'shining' | 'glass', limit?: number, uid?: string, options?: {
|
|
98
|
+
userIdentifier?: string;
|
|
99
|
+
}): Promise<any>;
|
|
100
|
+
parseShareCode(ctx: Context, shareCode: string, userIdentifier?: string): Promise<any>;
|
|
101
|
+
getShareCodeRecords(ctx: Context, options?: {
|
|
102
|
+
shareCode?: string;
|
|
103
|
+
hash?: string;
|
|
104
|
+
pageNo?: number;
|
|
105
|
+
pageSize?: number;
|
|
106
|
+
modeId?: number;
|
|
107
|
+
magicId?: number;
|
|
108
|
+
}, userIdentifier?: string): Promise<any>;
|
|
70
109
|
getActivitiesInfo(ctx: Context, refresh?: boolean, userIdentifier?: string): Promise<any>;
|
|
71
110
|
syncConfig(ctx: Context, userIdentifier?: string): Promise<any>;
|
|
72
111
|
getAnnouncementList(ctx: Context, params?: {
|
|
@@ -78,7 +117,7 @@ export declare class RocomClient {
|
|
|
78
117
|
getLatestAnnouncement(ctx: Context, params?: {
|
|
79
118
|
category_id?: number | string;
|
|
80
119
|
order?: string;
|
|
81
|
-
}, userIdentifier?: string): Promise<any>;
|
|
120
|
+
}, userIdentifier?: string, signal?: AbortSignal): Promise<any>;
|
|
82
121
|
getAnnouncementDetail(ctx: Context, threadId: number | string, userIdentifier?: string): Promise<any>;
|
|
83
122
|
getEggGroups(ctx: Context, userIdentifier?: string): Promise<any>;
|
|
84
123
|
getEggGroupPets(ctx: Context, groupIds: string | number[], matchMode?: 'any' | 'all', pageNo?: number, pageSize?: number, userIdentifier?: string): Promise<any>;
|
|
@@ -92,12 +131,24 @@ export declare class RocomClient {
|
|
|
92
131
|
getEggExchangeSubscriptions(ctx: Context, userIdentifier?: string): Promise<any>;
|
|
93
132
|
deleteEggExchangeSubscription(ctx: Context, subscriptionId: string | number, userIdentifier?: string): Promise<any>;
|
|
94
133
|
getEggExchangeEvents(ctx: Context, subscriptionId: string | number, afterEventId?: string, limit?: number, userIdentifier?: string): Promise<any>;
|
|
95
|
-
ingameHomeInfo(ctx: Context, uid: string, options?: IngameTaskPollOptions
|
|
96
|
-
|
|
134
|
+
ingameHomeInfo(ctx: Context, uid: string, options?: IngameTaskPollOptions & {
|
|
135
|
+
auth?: IngameAuthContext;
|
|
136
|
+
}): Promise<any>;
|
|
137
|
+
ingameMerchantInfo(ctx: Context, shopId?: string | number | null, options?: IngameTaskPollOptions & {
|
|
138
|
+
auth?: IngameAuthContext;
|
|
139
|
+
}): Promise<any>;
|
|
140
|
+
ingameHomeEggs(ctx: Context, uid: string, options?: IngameTaskPollOptions & {
|
|
141
|
+
auth?: IngameAuthContext;
|
|
142
|
+
}): Promise<any>;
|
|
143
|
+
ingameHomePetData(ctx: Context, uid: string, options?: IngameTaskPollOptions & {
|
|
144
|
+
auth?: IngameAuthContext;
|
|
145
|
+
}): Promise<any>;
|
|
97
146
|
ingamePetData(ctx: Context, uid: string, extras?: {
|
|
98
147
|
petGid?: string | number;
|
|
99
148
|
npcId?: string | number;
|
|
100
|
-
}, options?: IngameTaskPollOptions
|
|
149
|
+
}, options?: IngameTaskPollOptions & {
|
|
150
|
+
auth?: IngameAuthContext;
|
|
151
|
+
}): Promise<any>;
|
|
101
152
|
getFriendship(ctx: Context, fwToken: string, userIds: string, userIdentifier?: string): Promise<any>;
|
|
102
153
|
getStudentState(ctx: Context, fwToken: string, accountType?: number, userIdentifier?: string): Promise<any>;
|
|
103
154
|
getStudentPerks(ctx: Context, fwToken: string, area?: number, accountType?: number, userIdentifier?: string): Promise<any>;
|