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.
Files changed (216) hide show
  1. package/lib/announcement-service.d.ts +21 -0
  2. package/lib/announcement-service.js +63 -0
  3. package/lib/async-control.d.ts +3 -0
  4. package/lib/async-control.js +48 -0
  5. package/lib/atlas-service.js +1 -1
  6. package/lib/client.d.ts +58 -7
  7. package/lib/client.js +282 -127
  8. package/lib/commands/egg.js +66 -4
  9. package/lib/commands/merchant.d.ts +105 -0
  10. package/lib/commands/merchant.js +600 -182
  11. package/lib/commands/query.d.ts +18 -0
  12. package/lib/commands/query.js +585 -145
  13. package/lib/commands/ranking.d.ts +2 -0
  14. package/lib/commands/ranking.js +31 -0
  15. package/lib/commands/share-code.d.ts +2 -0
  16. package/lib/commands/share-code.js +111 -0
  17. package/lib/commands/tools.js +48 -60
  18. package/lib/commands/wiki.js +1 -1
  19. package/lib/egg-service.d.ts +82 -8
  20. package/lib/egg-service.js +235 -19
  21. package/lib/element-colors.d.ts +3 -0
  22. package/lib/element-colors.js +34 -0
  23. package/lib/icon-metrics.d.ts +32 -0
  24. package/lib/icon-metrics.js +255 -0
  25. package/lib/img//345/274/202/350/211/262.png +0 -0
  26. package/lib/img//347/202/253/345/275/251.png +0 -0
  27. package/lib/index.d.ts +10 -0
  28. package/lib/index.js +11857 -175
  29. package/lib/merchant-catalog.d.ts +47 -0
  30. package/lib/merchant-catalog.js +193 -0
  31. package/lib/merchant-clock.d.ts +22 -0
  32. package/lib/merchant-clock.js +95 -0
  33. package/lib/merchant-price-log.d.ts +63 -0
  34. package/lib/merchant-price-log.js +187 -0
  35. package/lib/merchant-service.d.ts +38 -0
  36. package/lib/merchant-service.js +216 -0
  37. package/lib/permissions.d.ts +16 -0
  38. package/lib/permissions.js +66 -0
  39. package/lib/pet-data-service.d.ts +13 -0
  40. package/lib/pet-data-service.js +117 -10
  41. package/lib/pet-size.d.ts +13 -0
  42. package/lib/pet-size.js +54 -0
  43. package/lib/player-service.d.ts +37 -0
  44. package/lib/player-service.js +201 -0
  45. package/lib/ranking-service.d.ts +46 -0
  46. package/lib/ranking-service.js +137 -0
  47. package/lib/render-templates/announcement/detail.html +8 -0
  48. package/lib/render-templates/announcement/list.html +5 -0
  49. package/lib/render-templates/announcement/style.css +1 -0
  50. package/lib/render-templates/home/style.css +15 -14
  51. package/lib/render-templates/home-pets/index.html +80 -0
  52. package/lib/render-templates/home-pets/style.css +338 -0
  53. package/lib/render-templates/pet-detail-classic/index.html +151 -0
  54. package/lib/render-templates/pet-detail-classic/style.css +503 -0
  55. package/lib/render-templates/pet-detail-classic/texture2D/a_title.png +0 -0
  56. package/lib/render-templates/pet-detail-classic/texture2D/bg.jpg +0 -0
  57. package/lib/render-templates/pet-detail-classic/texture2D/footer.png +0 -0
  58. package/lib/render-templates/pet-detail-classic/texture2D/icon.png +0 -0
  59. package/lib/render-templates/pet-detail-classic/texture2D/img_head.png +0 -0
  60. package/lib/render-templates/pet-detail-classic/texture2D/jinhua_bg.png +0 -0
  61. package/lib/render-templates/pet-detail-classic/texture2D/level_icon.png +0 -0
  62. package/lib/render-templates/pet-detail-classic/texture2D/line.png +0 -0
  63. package/lib/render-templates/pet-detail-classic/texture2D/mask_bar.png +0 -0
  64. package/lib/render-templates/pet-detail-classic/texture2D/pet_bg.png +0 -0
  65. package/lib/render-templates/pet-detail-classic/texture2D/pet_rocom.png +0 -0
  66. package/lib/render-templates/pet-detail-classic/texture2D/pet_rocom_bg.png +0 -0
  67. package/lib/render-templates/pet-detail-classic/texture2D/poro_bar.png +0 -0
  68. package/lib/render-templates/pet-detail-classic/texture2D/right_jinhua.png +0 -0
  69. package/lib/render-templates/pet-detail-classic/texture2D/skill_bg.png +0 -0
  70. package/lib/render-templates/pet-detail-classic/texture2D/skill_mask.png +0 -0
  71. package/lib/render-templates/pet-detail-classic/texture2D/star.png +0 -0
  72. package/lib/render-templates/pet-detail-classic/texture2D/star_1.png +0 -0
  73. package/lib/render-templates/pet-detail-classic/texture2D/star_8.png +0 -0
  74. package/lib/render-templates/pet-detail-classic/texture2D/star_9.png +0 -0
  75. package/lib/render-templates/pet-detail-classic/texture2D/table.png +0 -0
  76. package/lib/render-templates/pet-detail-classic/texture2D/tags.png +0 -0
  77. package/lib/render-templates/pet-detail-classic/texture2D/title.png +0 -0
  78. package/lib/render-templates/pet-detail-classic/texture2D/top_bg.png +0 -0
  79. package/lib/render-templates/pet-detail-classic/texture2D/xuancai_overlay.png +0 -0
  80. package/lib/render-templates/pet-detail-classic/texture2D/yise_overlay.png +0 -0
  81. package/lib/render-templates/pet-detail-classic/texture2D/ys_bar.png +0 -0
  82. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/10.png +0 -0
  83. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/11.png +0 -0
  84. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/12.png +0 -0
  85. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/13.png +0 -0
  86. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/14.png +0 -0
  87. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/15.png +0 -0
  88. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/16.png +0 -0
  89. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/17.png +0 -0
  90. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/18.png +0 -0
  91. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/19.png +0 -0
  92. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/2.png +0 -0
  93. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/20.png +0 -0
  94. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/23.png +0 -0
  95. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/3.png +0 -0
  96. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/4.png +0 -0
  97. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/5.png +0 -0
  98. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/6.png +0 -0
  99. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/8.png +0 -0
  100. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247/9.png +0 -0
  101. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/205/211.png +0 -0
  102. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/206/260.png +0 -0
  103. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/234/260.png +0 -0
  104. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/271/273.png +0 -0
  105. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//345/271/275.png +0 -0
  106. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/201/266.png +0 -0
  107. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/227/240.png +0 -0
  108. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/231/256/351/200/232.png +0 -0
  109. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/234/272/346/242/260.png +0 -0
  110. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/255/246.png +0 -0
  111. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/257/222.png +0 -0
  112. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//346/260/264.png +0 -0
  113. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/201/253.png +0 -0
  114. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/224/265.png +0 -0
  115. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//347/277/274.png +0 -0
  116. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/215/211.png +0 -0
  117. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/220/214.png +0 -0
  118. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//350/231/253.png +0 -0
  119. package/lib/render-templates/pet-detail-classic/texture2D//345/261/236/346/200/247//351/276/231.png +0 -0
  120. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/1.png +0 -0
  121. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/10.png +0 -0
  122. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/11.png +0 -0
  123. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/12.png +0 -0
  124. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/13.png +0 -0
  125. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/14.png +0 -0
  126. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/15.png +0 -0
  127. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/16.png +0 -0
  128. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/17.png +0 -0
  129. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/18.png +0 -0
  130. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/19.png +0 -0
  131. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/2.png +0 -0
  132. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/21.png +0 -0
  133. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/23.png +0 -0
  134. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/24.png +0 -0
  135. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/3.png +0 -0
  136. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/4.png +0 -0
  137. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/5.png +0 -0
  138. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/6.png +0 -0
  139. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/7.png +0 -0
  140. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/8.png +0 -0
  141. package/lib/render-templates/pet-detail-classic/texture2D//350/241/200/350/204/211/9.png +0 -0
  142. package/lib/render-templates/pet-ranking/index.html +99 -0
  143. package/lib/render-templates/pet-ranking/style.css +338 -0
  144. package/lib/render-templates/player-search/index.html +7 -0
  145. package/lib/render-templates/searcheggs/index.html +1 -1
  146. package/lib/render-templates/searcheggs/size.html +70 -68
  147. package/lib/render-templates/share-code-classic/assets/eit-logo.png +0 -0
  148. package/lib/render-templates/share-code-classic/assets/img_xingxingdi.png +0 -0
  149. package/lib/render-templates/share-code-classic/assets/roco_icon.png +0 -0
  150. package/lib/render-templates/share-code-classic/assets//345/255/227/344/275/223/Rocofontblack-Regular .ttf +0 -0
  151. 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
  152. 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
  153. 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
  154. 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
  155. 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
  156. 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
  157. 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
  158. 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
  159. 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
  160. 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
  161. 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
  162. 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
  163. 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
  164. 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
  165. 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
  166. 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
  167. 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
  168. 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
  169. 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
  170. package/lib/render-templates/share-code-classic/assets//347/201/253/346/274/206/345/215/260.png +0 -0
  171. 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
  172. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/205/211.png +0 -0
  173. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/206/260.png +0 -0
  174. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/234/260.png +0 -0
  175. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/245/207/345/274/202.png +0 -0
  176. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/271/273.png +0 -0
  177. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//345/271/275.png +0 -0
  178. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/201/266.png +0 -0
  179. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/231/256/351/200/232.png +0 -0
  180. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/234/272/346/242/260.png +0 -0
  181. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/255/246.png +0 -0
  182. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/257/222.png +0 -0
  183. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/260/264.png +0 -0
  184. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//346/261/241/346/237/223.png +0 -0
  185. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/201/253.png +0 -0
  186. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/224/265.png +0 -0
  187. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//347/277/274.png +0 -0
  188. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/215/211.png +0 -0
  189. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/220/214.png +0 -0
  190. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//350/231/253.png +0 -0
  191. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//351/246/226/351/242/206.png +0 -0
  192. package/lib/render-templates/share-code-classic/assets//350/241/200/350/204/211//351/276/231.png +0 -0
  193. package/lib/render-templates/share-code-classic/index.html +119 -0
  194. package/lib/render-templates/share-code-classic/style.css +646 -0
  195. package/lib/render-templates/share-code-team/index.html +105 -0
  196. package/lib/render-templates/share-code-team/style.css +345 -0
  197. package/lib/render-templates/yuanxing-shangren/merchant.html +479 -461
  198. package/lib/render-templates/yuanxing-shangren/today.html +407 -461
  199. package/lib/render.d.ts +18 -2
  200. package/lib/render.js +138 -39
  201. package/lib/send-image.d.ts +1 -1
  202. package/lib/send-image.js +22 -1
  203. package/lib/share-code-service.d.ts +68 -0
  204. package/lib/share-code-service.js +257 -0
  205. package/lib/subscription-runner.d.ts +6 -0
  206. package/lib/subscription-runner.js +21 -0
  207. package/lib/subscription-send.d.ts +4 -2
  208. package/lib/subscription-send.js +45 -20
  209. package/lib/ttf/rocom_origin.ttf +0 -0
  210. package/lib/types.d.ts +14 -1
  211. package/lib/user.d.ts +11 -0
  212. package/lib/wiki-catalog.js +1 -1
  213. package/lib/wiki-service.js +1 -1
  214. package/package.json +5 -1
  215. package/readme.md +125 -124
  216. 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(/&nbsp;/g, ' ').replace(/&amp;/g, '&')
12
+ .replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/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
+ }
@@ -149,7 +149,7 @@ class AtlasService {
149
149
  }
150
150
  return text;
151
151
  }
152
- // 解析上游简单结构的 pets.yaml:`正式名:` + 缩进 `- 别名` 列表。
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 extractCompletedIngamePayload;
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): Promise<any>;
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): Promise<any>;
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): Promise<any>;
96
- ingameMerchantInfo(ctx: Context, shopId: string | number): Promise<any>;
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): Promise<any>;
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>;