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,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.register = register;
|
|
4
|
+
const send_image_1 = require("../send-image");
|
|
5
|
+
const ranking_service_1 = require("../ranking-service");
|
|
6
|
+
function register(deps) {
|
|
7
|
+
const { ctx, client, userMgr, renderer, config } = deps;
|
|
8
|
+
for (const [label, kind] of [['异色', 'shining'], ['炫彩', 'glass']]) {
|
|
9
|
+
ctx.command(`${label}排行榜 [args:text]`, `查询${label}精灵收集排行榜`)
|
|
10
|
+
.alias(`${label}榜`)
|
|
11
|
+
.alias(`洛克${label}排行榜`)
|
|
12
|
+
.action(async ({ session }, args = '') => {
|
|
13
|
+
if (!session)
|
|
14
|
+
return;
|
|
15
|
+
const primaryUid = String(userMgr.getPrimaryBinding(session.userId)?.role_id || '');
|
|
16
|
+
let parsed;
|
|
17
|
+
try {
|
|
18
|
+
parsed = (0, ranking_service_1.parseRankingArgs)(args, primaryUid);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return error.message;
|
|
22
|
+
}
|
|
23
|
+
const payload = await client.getPetCollectionRanking(ctx, kind, parsed.limit, parsed.uid, { userIdentifier: session.userId });
|
|
24
|
+
if (payload === null)
|
|
25
|
+
return `排行榜查询失败:${client.getLastErrorBrief()}`;
|
|
26
|
+
const data = (0, ranking_service_1.buildRankingView)(payload, kind, config.apiBaseUrl.replace(/\/$/, ''), parsed.uid);
|
|
27
|
+
const image = await renderer.renderPages(ctx, 'pet-ranking', data, { maxPageHeight: 3500 });
|
|
28
|
+
await (0, send_image_1.sendImageWithFallback)(session, image, (0, ranking_service_1.buildRankingText)(data), 'ranking', config);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.register = register;
|
|
4
|
+
const send_image_1 = require("../send-image");
|
|
5
|
+
const share_code_service_1 = require("../share-code-service");
|
|
6
|
+
function register(deps) {
|
|
7
|
+
const { ctx, client, renderer, config } = deps;
|
|
8
|
+
const baseUrl = config.apiBaseUrl.replace(/\/$/, '');
|
|
9
|
+
const send = async (session, template, data, fallback) => {
|
|
10
|
+
const image = await renderer.renderPages(ctx, template, data);
|
|
11
|
+
await (0, send_image_1.sendImageWithFallback)(session, image, fallback, `share-code:${template}`, config);
|
|
12
|
+
};
|
|
13
|
+
// 信笺风模板(share-code-classic)的本地素材与 Wiki 性格映射。
|
|
14
|
+
const useClassic = config.shareCodeUiStyle !== 'panel';
|
|
15
|
+
const classicAssets = () => {
|
|
16
|
+
const root = 'render-templates/share-code-classic/assets';
|
|
17
|
+
const assetUrl = (rel) => deps.renderer.resourceUrl(`${root}/${rel}`);
|
|
18
|
+
return {
|
|
19
|
+
frame: assetUrl('立绘背景框.png'),
|
|
20
|
+
logo: assetUrl('eit-logo.png'),
|
|
21
|
+
rocoIcon: assetUrl('roco_icon.png'),
|
|
22
|
+
star: assetUrl('img_xingxingdi.png'),
|
|
23
|
+
wax: assetUrl('火漆印.png'),
|
|
24
|
+
typeIcon: name => assetUrl(`宠物属性/${name}.png`),
|
|
25
|
+
bloodIcon: element => assetUrl(`血脉/${element}.png`),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const classicNatureLookup = async (id) => {
|
|
29
|
+
try {
|
|
30
|
+
const payload = await deps.wikiService.getOptionsPayload();
|
|
31
|
+
const item = (payload?.pet?.natures || []).find((entry) => String(entry?.id ?? '') === id);
|
|
32
|
+
if (!item)
|
|
33
|
+
return {};
|
|
34
|
+
return { name: String(item.name || ''), up: String(item.up || ''), down: String(item.down || ''), summary: String(item.summary || '') };
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// 性格 id 全量缓存,避免每只精灵各查一次。
|
|
41
|
+
const classicNatureMap = new Map();
|
|
42
|
+
const classicLookup = async (id) => {
|
|
43
|
+
if (!classicNatureMap.has(id))
|
|
44
|
+
classicNatureMap.set(id, await classicNatureLookup(id));
|
|
45
|
+
return classicNatureMap.get(id) || {};
|
|
46
|
+
};
|
|
47
|
+
const sendShareView = async (session, view) => {
|
|
48
|
+
const fallback = (0, share_code_service_1.buildShareCodeText)(view);
|
|
49
|
+
if (!useClassic) {
|
|
50
|
+
await send(session, 'share-code-team', view, fallback);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const ids = (view.teams || []).map((team) => String(team.personality?.id ?? ''));
|
|
54
|
+
await Promise.all(ids.map(id => classicLookup(id)));
|
|
55
|
+
const classic = (0, share_code_service_1.buildShareCodeClassicView)(view, classicAssets(), id2 => classicNatureMap.get(id2) || {});
|
|
56
|
+
await send(session, 'share-code-classic', classic, fallback);
|
|
57
|
+
};
|
|
58
|
+
const command = ctx.command('阵容码', '阵容分享码工具');
|
|
59
|
+
command.subcommand('解析 <input:text>', '解析分享码或链接')
|
|
60
|
+
.alias('阵容码解析')
|
|
61
|
+
.action(async ({ session }, input) => {
|
|
62
|
+
if (!session)
|
|
63
|
+
return;
|
|
64
|
+
let code = '';
|
|
65
|
+
try {
|
|
66
|
+
code = (0, share_code_service_1.extractShareCode)(input || '');
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return error.message;
|
|
70
|
+
}
|
|
71
|
+
if (!code)
|
|
72
|
+
return '请提供分享码或包含 shareData 的链接。用法:阵容码 解析 <分享码或链接>';
|
|
73
|
+
const payload = await client.parseShareCode(ctx, code, session.userId);
|
|
74
|
+
if (!payload)
|
|
75
|
+
return `分享码解析失败:${client.getLastErrorBrief()}`;
|
|
76
|
+
const data = (0, share_code_service_1.buildShareCodeView)(payload, 'parse', undefined, baseUrl);
|
|
77
|
+
if (!data.teams.length)
|
|
78
|
+
return '分享码中没有可展示的精灵数据。';
|
|
79
|
+
await sendShareView(session, data);
|
|
80
|
+
});
|
|
81
|
+
command.subcommand('查询 <input:text>', '查询分享码历史记录')
|
|
82
|
+
.alias('阵容码查询')
|
|
83
|
+
.action(async ({ session }, input) => {
|
|
84
|
+
if (!session)
|
|
85
|
+
return;
|
|
86
|
+
let code = '';
|
|
87
|
+
try {
|
|
88
|
+
code = (0, share_code_service_1.extractShareCode)(input || '');
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return error.message;
|
|
92
|
+
}
|
|
93
|
+
if (!code)
|
|
94
|
+
return '请提供分享码。用法:阵容码 查询 <分享码>';
|
|
95
|
+
const res = await client.getShareCodeRecords(ctx, { shareCode: code, pageNo: 1, pageSize: 1 }, session.userId);
|
|
96
|
+
if (!res)
|
|
97
|
+
return `分享码记录查询失败:${client.getLastErrorBrief()}`;
|
|
98
|
+
const record = Array.isArray(res.items) ? res.items[0] : null;
|
|
99
|
+
if (!record)
|
|
100
|
+
return '未找到该分享码的解析记录,请先使用:阵容码 解析 <分享码或链接>';
|
|
101
|
+
let data = (0, share_code_service_1.buildShareCodeView)(record, 'record', record, baseUrl);
|
|
102
|
+
if (!data.teams.length) {
|
|
103
|
+
const parsed = await client.parseShareCode(ctx, code, session.userId);
|
|
104
|
+
if (parsed)
|
|
105
|
+
data = (0, share_code_service_1.buildShareCodeView)(parsed, 'record', record, baseUrl);
|
|
106
|
+
}
|
|
107
|
+
if (!data.teams.length)
|
|
108
|
+
return '已找到分享码记录,但无法还原阵容详情,请稍后重试。';
|
|
109
|
+
await sendShareView(session, data);
|
|
110
|
+
});
|
|
111
|
+
}
|
package/lib/commands/tools.js
CHANGED
|
@@ -5,23 +5,14 @@ const koishi_1 = require("koishi");
|
|
|
5
5
|
const activities_service_1 = require("../activities-service");
|
|
6
6
|
const send_image_1 = require("../send-image");
|
|
7
7
|
const subscription_send_1 = require("../subscription-send");
|
|
8
|
+
const permissions_1 = require("../permissions");
|
|
9
|
+
const subscription_runner_1 = require("../subscription-runner");
|
|
10
|
+
const announcement_service_1 = require("../announcement-service");
|
|
8
11
|
const logger = new koishi_1.Logger('rocom-tools');
|
|
9
12
|
const activitiesService = new activities_service_1.ActivitiesService();
|
|
10
13
|
function trimText(value) {
|
|
11
14
|
return String(value ?? '').trim();
|
|
12
15
|
}
|
|
13
|
-
function stripHtml(value) {
|
|
14
|
-
return trimText(value)
|
|
15
|
-
.replace(/<br\s*\/?>/gi, '\n')
|
|
16
|
-
.replace(/<\/p>/gi, '\n')
|
|
17
|
-
.replace(/<[^>]+>/g, '')
|
|
18
|
-
.replace(/ /g, ' ')
|
|
19
|
-
.replace(/&/g, '&')
|
|
20
|
-
.replace(/</g, '<')
|
|
21
|
-
.replace(/>/g, '>')
|
|
22
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
23
|
-
.trim();
|
|
24
|
-
}
|
|
25
16
|
function formatDate(value) {
|
|
26
17
|
const text = trimText(value);
|
|
27
18
|
if (!text)
|
|
@@ -72,37 +63,52 @@ function announcementTimestamp(item) {
|
|
|
72
63
|
return 0;
|
|
73
64
|
}
|
|
74
65
|
function announcementSubscriptionKey(session) {
|
|
75
|
-
const privateChat =
|
|
66
|
+
const privateChat = (0, permissions_1.isDirectSession)(session);
|
|
76
67
|
return [session?.platform || '', session?.channelId || 'private', privateChat ? (session?.userId || '') : '', 'announcement'].join(':');
|
|
77
68
|
}
|
|
78
|
-
//
|
|
79
|
-
async function checkAnnouncementSubscriptions(deps) {
|
|
69
|
+
// 轮询最新公告,向订阅会话推送新公告提醒。
|
|
70
|
+
async function checkAnnouncementSubscriptions(deps, signal) {
|
|
80
71
|
const { ctx, client, announcementSubMgr } = deps;
|
|
81
72
|
const subs = announcementSubMgr.getAll();
|
|
82
73
|
const subEntries = Object.entries(subs);
|
|
83
74
|
if (!subEntries.length)
|
|
84
75
|
return { subscriptions: 0, pushed: 0 };
|
|
85
|
-
|
|
76
|
+
if (signal?.aborted)
|
|
77
|
+
return { subscriptions: 0, pushed: 0 };
|
|
78
|
+
const latest = await client.getLatestAnnouncement(ctx, { category_id: 99 }, '', signal);
|
|
79
|
+
if (signal?.aborted)
|
|
80
|
+
return { subscriptions: 0, pushed: 0 };
|
|
86
81
|
const item = latest?.detail || latest?.announcement || latest;
|
|
87
82
|
const latestId = announcementId(item);
|
|
88
83
|
if (!latestId)
|
|
89
84
|
return { subscriptions: subEntries.length, pushed: 0 };
|
|
90
85
|
const latestTs = announcementTimestamp(item);
|
|
86
|
+
const view = (0, announcement_service_1.buildAnnouncementView)(latest, deps.config.apiBaseUrl);
|
|
87
|
+
let image;
|
|
91
88
|
let pushed = 0;
|
|
92
89
|
for (const [key, sub] of subEntries) {
|
|
90
|
+
if (signal?.aborted)
|
|
91
|
+
break;
|
|
92
|
+
if (JSON.stringify(announcementSubMgr.getAll()[key]) !== JSON.stringify(sub))
|
|
93
|
+
continue;
|
|
93
94
|
if (latestId === String(sub.last_id || ''))
|
|
94
95
|
continue;
|
|
95
96
|
if (latestTs && sub.since_ts && latestTs <= sub.since_ts)
|
|
96
97
|
continue;
|
|
97
|
-
const message =
|
|
98
|
+
const message = (0, announcement_service_1.announcementViewText)(view);
|
|
99
|
+
if (image === undefined)
|
|
100
|
+
image = await deps.renderer.renderPages(ctx, 'announcement/detail', view, { signal });
|
|
101
|
+
if (signal?.aborted)
|
|
102
|
+
break;
|
|
98
103
|
try {
|
|
99
|
-
const sent = await (0, subscription_send_1.
|
|
104
|
+
const sent = await (0, subscription_send_1.sendScheduledImageWithFallback)(ctx, {
|
|
100
105
|
platform: sub.platform,
|
|
106
|
+
selfId: sub.self_id,
|
|
101
107
|
channelId: sub.channel_id || sub.guild_id || sub.user_id || '',
|
|
102
108
|
guildId: sub.guild_id || '',
|
|
103
109
|
userId: sub.user_id || '',
|
|
104
|
-
}, message);
|
|
105
|
-
if (!sent)
|
|
110
|
+
}, image, message, false, signal);
|
|
111
|
+
if (!sent || signal?.aborted || JSON.stringify(announcementSubMgr.getAll()[key]) !== JSON.stringify(sub))
|
|
106
112
|
continue;
|
|
107
113
|
}
|
|
108
114
|
catch (e) {
|
|
@@ -141,36 +147,14 @@ function buildAnnouncementListText(data, page) {
|
|
|
141
147
|
lines.push('详情:洛克.公告详情 <公告ID>');
|
|
142
148
|
return lines.join('\n');
|
|
143
149
|
}
|
|
144
|
-
function buildAnnouncementDetailText(data) {
|
|
145
|
-
const item = data?.detail || data?.announcement || data;
|
|
146
|
-
if (!item || typeof item !== 'object')
|
|
147
|
-
return '公告详情为空。';
|
|
148
|
-
const title = trimText(item?.title) || '未命名公告';
|
|
149
|
-
const id = announcementId(item);
|
|
150
|
-
const summary = trimText(item?.summary);
|
|
151
|
-
const content = stripHtml(item?.content?.text || item?.text || item?.content);
|
|
152
|
-
const lines = [
|
|
153
|
-
`公告详情${id ? ` #${id}` : ''}`,
|
|
154
|
-
title,
|
|
155
|
-
`发布时间:${formatDate(item?.publishAt || item?.published_at || item?.createdAt)}`,
|
|
156
|
-
];
|
|
157
|
-
if (summary)
|
|
158
|
-
lines.push(`摘要:${summary}`);
|
|
159
|
-
if (content) {
|
|
160
|
-
lines.push('');
|
|
161
|
-
lines.push(content.length > 900 ? `${content.slice(0, 900)}...` : content);
|
|
162
|
-
}
|
|
163
|
-
const images = Array.isArray(item?.content?.indexes)
|
|
164
|
-
? item.content.indexes.flatMap((entry) => Array.isArray(entry?.imageUrl) ? entry.imageUrl : [])
|
|
165
|
-
: [];
|
|
166
|
-
if (images.length) {
|
|
167
|
-
lines.push('');
|
|
168
|
-
lines.push(`图片资源:${images.slice(0, 3).join('\n')}`);
|
|
169
|
-
}
|
|
170
|
-
return lines.join('\n');
|
|
171
|
-
}
|
|
172
150
|
function register(deps) {
|
|
173
151
|
const { ctx, client, config, renderer } = deps;
|
|
152
|
+
const runner = (0, subscription_runner_1.createRunner)(ctx);
|
|
153
|
+
const sendDetail = async (session, data) => {
|
|
154
|
+
const view = (0, announcement_service_1.buildAnnouncementView)(data, config.apiBaseUrl);
|
|
155
|
+
const pages = await renderer.renderPages(ctx, 'announcement/detail', view);
|
|
156
|
+
await (0, send_image_1.sendImageWithFallback)(session, pages, (0, announcement_service_1.announcementViewText)(view), 'announcement:detail', config);
|
|
157
|
+
};
|
|
174
158
|
ctx.command('洛克').subcommand('.日历 [mode:string]', '查看洛克活动日历')
|
|
175
159
|
.alias('洛克日历')
|
|
176
160
|
.action(async ({ session }, mode = '') => {
|
|
@@ -191,7 +175,8 @@ function register(deps) {
|
|
|
191
175
|
const data = await client.getAnnouncementList(ctx, { category_id: 99, page: currentPage, limit: 10 }, session?.userId || '');
|
|
192
176
|
if (!data)
|
|
193
177
|
return `公告列表查询失败:${client.getLastErrorBrief()}`;
|
|
194
|
-
|
|
178
|
+
const pages = await renderer.renderPages(ctx, 'announcement/list', (0, announcement_service_1.buildAnnouncementListView)(data, currentPage));
|
|
179
|
+
await (0, send_image_1.sendImageWithFallback)(session, pages, buildAnnouncementListText(data, currentPage), 'announcement:list', config);
|
|
195
180
|
});
|
|
196
181
|
ctx.command('洛克').subcommand('.最新公告', '查看最新洛克公告')
|
|
197
182
|
.alias('洛克最新公告')
|
|
@@ -199,7 +184,7 @@ function register(deps) {
|
|
|
199
184
|
const data = await client.getLatestAnnouncement(ctx, { category_id: 99 }, session?.userId || '');
|
|
200
185
|
if (!data)
|
|
201
186
|
return `最新公告查询失败:${client.getLastErrorBrief()}`;
|
|
202
|
-
|
|
187
|
+
await sendDetail(session, data);
|
|
203
188
|
});
|
|
204
189
|
ctx.command('洛克').subcommand('.公告详情 <threadId:string>', '查看公告详情')
|
|
205
190
|
.alias('洛克公告详情')
|
|
@@ -210,20 +195,23 @@ function register(deps) {
|
|
|
210
195
|
const data = await client.getAnnouncementDetail(ctx, id, session?.userId || '');
|
|
211
196
|
if (!data)
|
|
212
197
|
return `公告详情查询失败:${client.getLastErrorBrief()}`;
|
|
213
|
-
|
|
198
|
+
await sendDetail(session, data);
|
|
214
199
|
});
|
|
215
|
-
ctx.command('订阅洛克公告', '订阅洛克王国新公告推送')
|
|
200
|
+
ctx.command('订阅洛克公告', '订阅洛克王国新公告推送').userFields(['authority'])
|
|
216
201
|
.action(async ({ session }) => {
|
|
217
|
-
const privateChat =
|
|
218
|
-
if (!
|
|
219
|
-
return '
|
|
202
|
+
const privateChat = (0, permissions_1.isDirectSession)(session);
|
|
203
|
+
if (!(0, permissions_1.canManageSubscription)(config, session))
|
|
204
|
+
return '此指令仅限群管理员或机器人管理员使用。';
|
|
220
205
|
const key = announcementSubscriptionKey(session);
|
|
221
206
|
// 以当前最新公告为基线,只推送之后的新公告。
|
|
222
207
|
const latest = await client.getLatestAnnouncement(ctx, { category_id: 99 }, session?.userId || '');
|
|
208
|
+
if (!latest)
|
|
209
|
+
return '获取公告基线失败,请稍后重新订阅。';
|
|
223
210
|
const item = latest?.detail || latest?.announcement || latest;
|
|
224
211
|
deps.announcementSubMgr.upsert(key, {
|
|
225
212
|
key,
|
|
226
213
|
platform: session?.platform || '',
|
|
214
|
+
self_id: session?.selfId || session?.bot?.selfId || '',
|
|
227
215
|
channel_id: session?.channelId || '',
|
|
228
216
|
guild_id: session?.guildId || '',
|
|
229
217
|
user_id: privateChat ? (session?.userId || '') : '',
|
|
@@ -234,11 +222,11 @@ function register(deps) {
|
|
|
234
222
|
});
|
|
235
223
|
return '已订阅洛克王国新公告推送,检测到新公告时会在当前会话提醒。';
|
|
236
224
|
});
|
|
237
|
-
ctx.command('取消订阅洛克公告', '取消洛克王国新公告推送')
|
|
225
|
+
ctx.command('取消订阅洛克公告', '取消洛克王国新公告推送').userFields(['authority'])
|
|
238
226
|
.action(async ({ session }) => {
|
|
239
|
-
const privateChat =
|
|
240
|
-
if (!
|
|
241
|
-
return '
|
|
227
|
+
const privateChat = (0, permissions_1.isDirectSession)(session);
|
|
228
|
+
if (!(0, permissions_1.canManageSubscription)(config, session))
|
|
229
|
+
return '此指令仅限群管理员或机器人管理员使用。';
|
|
242
230
|
const deleted = deps.announcementSubMgr.deleteMatching({
|
|
243
231
|
platform: session?.platform || '',
|
|
244
232
|
channelId: session?.channelId || '',
|
|
@@ -248,7 +236,7 @@ function register(deps) {
|
|
|
248
236
|
});
|
|
249
237
|
if (config.announcementSubscriptionEnabled) {
|
|
250
238
|
ctx.setInterval(() => {
|
|
251
|
-
checkAnnouncementSubscriptions(deps).catch(err => logger.warn(`公告订阅检查失败: ${err}`));
|
|
239
|
+
runner(signal => checkAnnouncementSubscriptions(deps, signal)).catch(err => logger.warn(`公告订阅检查失败: ${err}`));
|
|
252
240
|
}, Math.max(1, config.announcementPollIntervalMinutes || 10) * 60000);
|
|
253
241
|
}
|
|
254
242
|
ctx.command('洛克').subcommand('.同步配置', '手动同步 RoCom 远端配置')
|
package/lib/commands/wiki.js
CHANGED
|
@@ -128,7 +128,7 @@ function register(deps) {
|
|
|
128
128
|
let lastPercent = -20;
|
|
129
129
|
try {
|
|
130
130
|
const { imageCount, totalBytes } = await atlasService.download(ctx, async (percent, stage) => {
|
|
131
|
-
// 20%
|
|
131
|
+
// 20% 粒度进度提醒
|
|
132
132
|
if (percent - lastPercent >= 20 || percent >= 100) {
|
|
133
133
|
lastPercent = percent;
|
|
134
134
|
await session?.send?.(`图鉴下载进度 ${percent}%:${stage}`);
|
package/lib/egg-service.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare class EggService {
|
|
|
27
27
|
private rangeMatchScore;
|
|
28
28
|
private formatPetCard;
|
|
29
29
|
private formatSizeApiCard;
|
|
30
|
+
private rangePair;
|
|
30
31
|
private splitNewSizeApiItems;
|
|
31
32
|
private sizeApiResultGroups;
|
|
32
33
|
private mergeCardsByName;
|
|
@@ -182,6 +183,13 @@ export declare class EggService {
|
|
|
182
183
|
};
|
|
183
184
|
buildWantPetData(pet: any): {
|
|
184
185
|
target: {
|
|
186
|
+
probability: number;
|
|
187
|
+
match_count: number;
|
|
188
|
+
match_info_label: string;
|
|
189
|
+
size_variant: string;
|
|
190
|
+
size_variant_label: string;
|
|
191
|
+
size_variant_class: string;
|
|
192
|
+
size_variant_hint: string;
|
|
185
193
|
id: any;
|
|
186
194
|
name: string;
|
|
187
195
|
icon: string;
|
|
@@ -195,15 +203,19 @@ export declare class EggService {
|
|
|
195
203
|
weight_min: number;
|
|
196
204
|
weight_max: number;
|
|
197
205
|
weight_label: string;
|
|
198
|
-
probability: number;
|
|
199
|
-
match_count: number;
|
|
200
|
-
match_info_label: string;
|
|
201
206
|
};
|
|
202
207
|
egg_groups_label: string;
|
|
203
208
|
female_rate: any;
|
|
204
209
|
male_rate: any;
|
|
205
210
|
is_undiscovered: boolean;
|
|
206
211
|
fathers: {
|
|
212
|
+
probability: number;
|
|
213
|
+
match_count: number;
|
|
214
|
+
match_info_label: string;
|
|
215
|
+
size_variant: string;
|
|
216
|
+
size_variant_label: string;
|
|
217
|
+
size_variant_class: string;
|
|
218
|
+
size_variant_hint: string;
|
|
207
219
|
id: any;
|
|
208
220
|
name: string;
|
|
209
221
|
icon: string;
|
|
@@ -217,9 +229,6 @@ export declare class EggService {
|
|
|
217
229
|
weight_min: number;
|
|
218
230
|
weight_max: number;
|
|
219
231
|
weight_label: string;
|
|
220
|
-
probability: number;
|
|
221
|
-
match_count: number;
|
|
222
|
-
match_info_label: string;
|
|
223
232
|
}[];
|
|
224
233
|
father_count: number;
|
|
225
234
|
commandHint: string;
|
|
@@ -229,6 +238,13 @@ export declare class EggService {
|
|
|
229
238
|
keyword: string;
|
|
230
239
|
count: number;
|
|
231
240
|
candidates: {
|
|
241
|
+
probability: number;
|
|
242
|
+
match_count: number;
|
|
243
|
+
match_info_label: string;
|
|
244
|
+
size_variant: string;
|
|
245
|
+
size_variant_label: string;
|
|
246
|
+
size_variant_class: string;
|
|
247
|
+
size_variant_hint: string;
|
|
232
248
|
id: any;
|
|
233
249
|
name: string;
|
|
234
250
|
icon: string;
|
|
@@ -242,13 +258,71 @@ export declare class EggService {
|
|
|
242
258
|
weight_min: number;
|
|
243
259
|
weight_max: number;
|
|
244
260
|
weight_label: string;
|
|
245
|
-
|
|
246
|
-
|
|
261
|
+
}[];
|
|
262
|
+
commandHint: string;
|
|
263
|
+
copyright: string;
|
|
264
|
+
};
|
|
265
|
+
buildCandidatesFromEggApi(keyword: string, candidates: any[]): {
|
|
266
|
+
keyword: string;
|
|
267
|
+
count: number;
|
|
268
|
+
candidates: {
|
|
269
|
+
id: any;
|
|
270
|
+
name: string;
|
|
271
|
+
icon: any;
|
|
272
|
+
image: any;
|
|
273
|
+
type_label: string;
|
|
274
|
+
egg_group_ids: any[];
|
|
275
|
+
egg_groups_label: string;
|
|
276
|
+
height_min: number;
|
|
277
|
+
height_max: number;
|
|
278
|
+
height_label: string;
|
|
279
|
+
weight_min: number;
|
|
280
|
+
weight_max: number;
|
|
281
|
+
weight_label: string;
|
|
282
|
+
probability: any;
|
|
283
|
+
match_count: any;
|
|
247
284
|
match_info_label: string;
|
|
248
285
|
}[];
|
|
249
286
|
commandHint: string;
|
|
250
287
|
copyright: string;
|
|
251
288
|
};
|
|
289
|
+
buildSearchDataFromEggApi(pet: any, compatibleByGroup?: Record<string, any>): {
|
|
290
|
+
pet_name: string;
|
|
291
|
+
pet_id: any;
|
|
292
|
+
pet_icon: any;
|
|
293
|
+
pet_image: any;
|
|
294
|
+
type_label: string;
|
|
295
|
+
egg_groups_label: string;
|
|
296
|
+
egg_groups: number[];
|
|
297
|
+
egg_group_labels: Record<number, string>;
|
|
298
|
+
male_rate: any;
|
|
299
|
+
female_rate: any;
|
|
300
|
+
hatch_label: string;
|
|
301
|
+
weight_label: string;
|
|
302
|
+
height_label: string;
|
|
303
|
+
total_compatible: number;
|
|
304
|
+
compatible_total_known: boolean;
|
|
305
|
+
is_undiscovered: boolean;
|
|
306
|
+
egg_group_sections: any[];
|
|
307
|
+
total_stats: string;
|
|
308
|
+
egg_details: {
|
|
309
|
+
has_data: boolean;
|
|
310
|
+
};
|
|
311
|
+
commandHint: string;
|
|
312
|
+
copyright: string;
|
|
313
|
+
};
|
|
314
|
+
private formatEggApiCard;
|
|
315
|
+
private formatEggApiMember;
|
|
316
|
+
private eggApiGroups;
|
|
317
|
+
private eggGroupId;
|
|
318
|
+
private eggGroupLabel;
|
|
319
|
+
private eggGroupDesc;
|
|
320
|
+
private isUndiscoveredEggGroup;
|
|
321
|
+
private eggPetDisplayName;
|
|
322
|
+
private eggApiTypeLabel;
|
|
323
|
+
private eggGroupsLabel;
|
|
324
|
+
private eggHeightRangeM;
|
|
325
|
+
private eggWeightRangeKg;
|
|
252
326
|
buildSizeSearchData(height?: number, weight?: number, results?: {
|
|
253
327
|
perfect: any[];
|
|
254
328
|
range: any[];
|