koishi-plugin-rocom 1.0.12 → 1.0.13

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 (42) hide show
  1. package/lib/client.d.ts +17 -1
  2. package/lib/client.js +121 -21
  3. package/lib/commands/merchant.js +340 -89
  4. package/lib/commands/query.js +22 -6
  5. package/lib/index.d.ts +4 -0
  6. package/lib/index.js +480 -122
  7. package/lib/render-templates/home/img/rocomuid/a_title.png +0 -0
  8. package/lib/render-templates/home/img/rocomuid/banner_bg.png +0 -0
  9. package/lib/render-templates/home/img/rocomuid/bg.jpg +0 -0
  10. package/lib/render-templates/home/img/rocomuid/img_head.png +0 -0
  11. package/lib/render-templates/home/img/rocomuid/jindu_bar.png +0 -0
  12. package/lib/render-templates/home/img/rocomuid/jindu_tc.png +0 -0
  13. package/lib/render-templates/home/img/rocomuid/level_icon.png +0 -0
  14. package/lib/render-templates/home/img/rocomuid/pet_bg.png +0 -0
  15. package/lib/render-templates/home/img/rocomuid/plant_bg.png +0 -0
  16. package/lib/render-templates/home/img/rocomuid/star_1.png +0 -0
  17. package/lib/render-templates/home/img/rocomuid/star_8.png +0 -0
  18. package/lib/render-templates/home/img/rocomuid/star_9.png +0 -0
  19. package/lib/render-templates/home/img/rocomuid/title_fg.png +0 -0
  20. package/lib/render-templates/home/img/rocomuid/top_bg.png +0 -0
  21. package/lib/render-templates/home/img/rocomuid/touxiang_mask.png +0 -0
  22. package/lib/render-templates/home/index.html +81 -97
  23. package/lib/render-templates/home/style.css +316 -375
  24. package/lib/render-templates/yuanxing-shangren/CHANGELOG.md +138 -0
  25. package/lib/render-templates/yuanxing-shangren/README.md +86 -0
  26. package/lib/render-templates/yuanxing-shangren/img/coin.png +0 -0
  27. package/lib/render-templates/yuanxing-shangren/img//345/272/225/351/203/250/344/277/241/346/201/257/346/241/206.png +0 -0
  28. package/lib/render-templates/yuanxing-shangren/img//346/240/207/351/242/230.png +0 -0
  29. package/lib/render-templates/yuanxing-shangren/img//347/203/255/351/224/200.png +0 -0
  30. package/lib/render-templates/yuanxing-shangren/img//347/274/226/345/217/267/350/203/214/346/231/257/346/241/206.png +0 -0
  31. package/lib/render-templates/yuanxing-shangren/index.html +198 -170
  32. package/lib/render-templates/yuanxing-shangren/index.html.backup +356 -0
  33. package/lib/render-templates/yuanxing-shangren/merchant.html +461 -0
  34. package/lib/render-templates/yuanxing-shangren/style.css +201 -256
  35. package/lib/render-templates/yuanxing-shangren/today.html +461 -0
  36. package/lib/render-templates/yuanxing-shangren/today.style.css +366 -0
  37. package/lib/render.js +11 -4
  38. package/lib/subscription-send.js +4 -5
  39. package/lib/ttf/rocom_skill_origin.ttf +0 -0
  40. package/lib/ttf//351/200/240/345/255/227/345/267/245/346/210/277/345/220/257/351/273/221/344/275/223.ttf +0 -0
  41. package/lib/types.d.ts +4 -0
  42. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>远行商人</title>
6
+ <title>今日远行商人</title>
7
7
  <style>
8
8
  @font-face {
9
9
  font-family: "fzlant";
@@ -31,10 +31,13 @@
31
31
  --card-bg: rgba(255, 252, 247, 0.82);
32
32
  --tag-bg: rgba(255, 214, 153, 0.4);
33
33
  --tag-text: #9a5f19;
34
+ --round-current-bg: rgba(255, 214, 153, 0.25);
35
+ --round-current-border: rgba(200, 140, 40, 0.4);
36
+ --round-current-text: #b06800;
34
37
  --accent-color: #a0631d;
35
38
  --warning-color: #bf5f3f;
36
39
  --border-color: rgba(179, 123, 45, 0.2);
37
- --border-color-light: rgba(118, 97, 74, 0.14);
40
+ --border-color-light: rgba(118, 97, 74, 0.12);
38
41
  --weekend-color: #c04030;
39
42
  --normal-color: #2a8040;
40
43
  --round-color: #2a60b0;
@@ -49,15 +52,17 @@ body {
49
52
  height: auto;
50
53
  font-family: var(--font-family);
51
54
  color: var(--text-1);
52
- background: linear-gradient(135deg, #fff8eb, #fff0d2);
55
+ background: #ece3d3;
53
56
  }
54
57
 
55
58
  .merchant-page {
56
59
  position: relative;
57
- width: min(1280px, 100%);
60
+ width: min(1040px, calc(100vw - 24px));
58
61
  margin: 0 auto;
62
+ padding: 14px;
59
63
  overflow: hidden;
60
- background: linear-gradient(135deg, #fff8eb, #fff0d2);
64
+ background: #ece3d3;
65
+ border-radius: 30px;
61
66
  }
62
67
 
63
68
  .background {
@@ -74,14 +79,14 @@ body {
74
79
  position: relative;
75
80
  z-index: 1;
76
81
  width: 100%;
77
- padding: 18px 18px 24px;
82
+ padding: 2px 0 4px;
78
83
  }
79
84
 
80
85
  .header {
81
86
  display: flex;
82
87
  justify-content: space-between;
83
- gap: 20px;
84
- padding: 22px 24px;
88
+ gap: 16px;
89
+ padding: 20px 22px;
85
90
  border: 1px solid var(--line);
86
91
  border-radius: 24px;
87
92
  background: linear-gradient(135deg, rgba(255,255,255,0.86), rgba(245,236,221,0.9));
@@ -97,110 +102,175 @@ body {
97
102
  .title-main {
98
103
  display: flex;
99
104
  align-items: center;
100
- gap: 14px;
105
+ gap: 12px;
101
106
  }
102
107
 
103
108
  .title-badge {
104
- width: 56px;
105
- height: 56px;
109
+ width: 60px;
110
+ height: 60px;
106
111
  display: flex;
107
112
  align-items: center;
108
113
  justify-content: center;
109
114
  background: transparent;
110
115
  color: #fffaf0;
111
- font-size: 32px;
116
+ font-size: 28px;
112
117
  font-weight: 900;
113
118
  }
114
119
 
115
120
  .title-badge img {
116
- width: 56px;
117
- height: 56px;
121
+ width: 60px;
122
+ height: 60px;
118
123
  object-fit: contain;
119
124
  }
120
125
 
121
126
  .title-text {
122
127
  font-family: var(--font-family-accent);
123
- font-size: 42px;
128
+ font-size: 36px;
124
129
  font-weight: 900;
125
- letter-spacing: 2px;
130
+ letter-spacing: 1px;
126
131
  }
127
132
 
128
133
  .subtitle {
129
134
  color: var(--text-2);
130
- font-size: 18px;
135
+ font-size: 16px;
131
136
  }
132
137
 
133
138
  .header-side {
134
- min-width: 320px;
139
+ min-width: 200px;
135
140
  display: flex;
136
141
  flex-direction: column;
137
142
  align-items: flex-end;
138
143
  justify-content: center;
139
- gap: 14px;
144
+ gap: 12px;
140
145
  }
141
146
 
142
147
  .summary-chip {
143
- padding: 10px 16px;
148
+ padding: 9px 14px;
144
149
  border-radius: 999px;
145
150
  background: rgba(255,255,255,0.72);
146
151
  border: 1px solid var(--border-color);
147
152
  color: var(--text-2);
148
- font-size: 18px;
153
+ font-size: 16px;
149
154
  }
150
155
 
151
156
  .summary-chip strong {
152
157
  font-family: var(--font-family-accent);
153
158
  color: var(--accent-color);
154
- font-size: 28px;
159
+ font-size: 24px;
155
160
  margin-left: 8px;
156
161
  }
157
162
 
158
- .round-info {
163
+ .category-section {
164
+ margin-top: 18px;
165
+ }
166
+
167
+ .category-header {
159
168
  display: flex;
160
169
  align-items: center;
161
170
  gap: 12px;
162
- flex-wrap: wrap;
163
- justify-content: flex-end;
171
+ margin-bottom: 12px;
172
+ padding: 0 4px;
173
+ }
174
+
175
+ .category-title {
176
+ font-family: var(--font-family-accent);
177
+ font-size: 24px;
178
+ font-weight: 800;
179
+ color: var(--text-1);
164
180
  }
165
181
 
166
- .round-pill,
167
- .countdown-pill {
168
- padding: 8px 14px;
182
+ .category-count {
183
+ padding: 4px 10px;
169
184
  border-radius: 999px;
170
- background: rgba(255,255,255,0.78);
171
- border: 1px solid var(--line);
172
- font-size: 17px;
185
+ font-size: 14px;
186
+ font-weight: 700;
187
+ }
188
+
189
+ .category-count.normal {
190
+ background: var(--normal-bg);
191
+ color: var(--normal-color);
192
+ }
193
+
194
+ .category-count.round {
195
+ background: var(--round-bg);
196
+ color: var(--round-color);
197
+ }
198
+
199
+ .category-count.weekend {
200
+ background: var(--weekend-bg);
201
+ color: var(--weekend-color);
202
+ }
203
+
204
+ .round-section {
205
+ padding: 14px 18px;
206
+ border: 1px solid var(--round-current-border);
207
+ border-radius: 16px;
208
+ background: linear-gradient(135deg, rgba(255,248,235,0.88), rgba(255,240,210,0.9));
209
+ box-shadow: 0 6px 22px rgba(180, 120, 20, 0.08);
210
+ margin-bottom: 10px;
211
+ }
212
+
213
+ .round-section:last-child {
214
+ margin-bottom: 0;
215
+ }
216
+
217
+ .round-section.is-current {
218
+ background: linear-gradient(135deg, rgba(255,248,235,1), rgba(255,240,210,1));
219
+ border-color: rgba(200, 140, 40, 0.6);
220
+ box-shadow: 0 6px 28px rgba(180, 120, 20, 0.12);
173
221
  }
174
222
 
175
- .countdown-pill {
176
- color: var(--warning-color);
223
+ .round-header {
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 10px;
227
+ margin-bottom: 10px;
228
+ }
229
+
230
+ .round-title {
231
+ font-family: var(--font-family-accent);
232
+ font-size: 18px;
177
233
  font-weight: 700;
234
+ color: var(--text-2);
235
+ }
236
+
237
+ .round-badge {
238
+ padding: 3px 8px;
239
+ border-radius: 999px;
240
+ background: var(--tag-bg);
241
+ color: var(--tag-text);
242
+ font-size: 12px;
243
+ font-weight: 700;
244
+ }
245
+
246
+ .round-badge.current {
247
+ background: var(--round-current-bg);
248
+ color: var(--round-current-text);
178
249
  }
179
250
 
180
251
  .products-grid {
181
- display: flex;
182
- flex-direction: column;
183
- gap: 20px;
184
- margin-top: 18px;
252
+ display: grid;
253
+ grid-template-columns: 1fr;
254
+ gap: 14px;
185
255
  }
186
256
 
187
257
  .product-card {
188
258
  display: grid;
189
- grid-template-columns: 120px 1fr auto;
190
- gap: 18px;
259
+ grid-template-columns: 80px 1fr auto;
260
+ gap: 14px;
191
261
  align-items: center;
192
- min-height: 148px;
193
- padding: 18px 28px;
194
- border: 1px solid rgba(200, 140, 40, 0.4);
195
- border-radius: 22px;
196
- background: linear-gradient(135deg, rgba(255,248,235,0.88), rgba(255,240,210,0.9));
197
- box-shadow: 0 6px 22px rgba(180, 120, 20, 0.08);
262
+ min-height: 96px;
263
+ padding: 12px 16px;
264
+ border: 1px solid rgba(200, 140, 40, 0.3);
265
+ border-radius: 16px;
266
+ background: linear-gradient(135deg, rgba(255,248,235,0.75), rgba(255,240,210,0.85));
267
+ box-shadow: 0 4px 14px rgba(180, 120, 20, 0.06);
198
268
  }
199
269
 
200
270
  .product-image-container {
201
- width: 120px;
202
- height: 120px;
203
- border-radius: 50%;
271
+ width: 80px;
272
+ height: 80px;
273
+ border-radius: 12px;
204
274
  background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.94), rgba(255,240,210,0.92));
205
275
  display: flex;
206
276
  align-items: center;
@@ -220,26 +290,20 @@ body {
220
290
 
221
291
  .product-name {
222
292
  font-family: var(--font-family-accent);
223
- font-size: 34px;
293
+ font-size: 22px;
224
294
  font-weight: 800;
225
295
  line-height: 1.2;
226
296
  word-break: break-word;
227
297
  }
228
298
 
229
- .product-sub {
230
- margin-top: 10px;
231
- color: var(--text-2);
232
- font-size: 18px;
233
- }
234
-
235
299
  .product-time {
236
300
  display: inline-flex;
237
- margin-top: 14px;
238
- padding: 8px 14px;
301
+ margin-top: 8px;
302
+ padding: 5px 10px;
239
303
  border-radius: 999px;
240
304
  background: var(--tag-bg);
241
305
  color: var(--tag-text);
242
- font-size: 16px;
306
+ font-size: 14px;
243
307
  font-weight: 700;
244
308
  }
245
309
 
@@ -251,161 +315,123 @@ body {
251
315
  }
252
316
 
253
317
  .product-slot {
254
- padding: 10px 14px;
255
- border-radius: 16px;
318
+ padding: 7px 10px;
319
+ border-radius: 12px;
256
320
  background: rgba(255,255,255,0.72);
257
321
  border: 1px solid var(--border-color);
258
322
  color: var(--accent-color);
259
- font-size: 18px;
323
+ font-size: 14px;
260
324
  font-weight: 700;
261
325
  }
262
326
 
263
- .product-empty {
327
+ .round-empty {
328
+ text-align: center;
329
+ padding: 18px 14px;
330
+ border-radius: 14px;
331
+ border: 1px dashed rgba(200, 140, 40, 0.3);
332
+ color: #8b7a66;
333
+ font-size: 16px;
334
+ background: rgba(255,248,235,0.5);
335
+ }
336
+
337
+ .all-empty {
264
338
  text-align: center;
265
- padding: 30px 18px;
266
- border-radius: 22px;
339
+ padding: 40px 18px;
340
+ margin-top: 18px;
341
+ border-radius: 20px;
267
342
  border: 1px dashed rgba(200, 140, 40, 0.35);
268
343
  color: #5c4a37;
269
- font-size: 22px;
344
+ font-size: 20px;
270
345
  background: rgba(255,248,235,0.6);
271
346
  }
272
347
 
273
- .category-section {
274
- margin-top: 16px;
275
- display: flex;
276
- flex-direction: column;
277
- gap: 14px;
278
- }
279
-
280
- .category-header {
281
- display: flex;
282
- align-items: center;
283
- gap: 10px;
284
- padding: 0 4px;
285
- }
286
-
287
- .category-title {
288
- font-family: var(--font-family-accent);
289
- font-size: 22px;
290
- font-weight: 800;
291
- color: var(--text-1);
292
- }
293
-
294
- .category-tag {
295
- padding: 3px 10px;
348
+ .category-label {
349
+ display: inline-flex;
350
+ padding: 3px 8px;
296
351
  border-radius: 999px;
297
- font-size: 14px;
352
+ font-size: 12px;
298
353
  font-weight: 700;
354
+ margin-left: 8px;
355
+ vertical-align: middle;
299
356
  }
300
357
 
301
- .category-tag.weekend {
358
+ .category-label.weekend {
302
359
  background: var(--weekend-bg);
303
360
  color: var(--weekend-color);
304
361
  }
305
362
 
306
- .category-tag.normal {
363
+ .category-label.normal {
307
364
  background: var(--normal-bg);
308
365
  color: var(--normal-color);
309
366
  }
310
367
 
311
- .category-tag.round {
368
+ .category-label.round {
312
369
  background: var(--round-bg);
313
370
  color: var(--round-color);
314
371
  }
315
-
316
- @media (max-width: 760px) {
317
- .merchant-page {
318
- width: 100%;
319
- }
320
-
321
- .content-container {
322
- padding: 10px 10px 14px;
323
- }
324
-
325
- .header {
326
- flex-direction: column;
327
- gap: 10px;
328
- padding: 14px 16px;
329
- }
330
-
331
- .header-side {
332
- min-width: 0;
333
- align-items: flex-start;
334
- }
335
-
336
- .round-info {
337
- justify-content: flex-start;
338
- }
339
-
340
- .title-badge,
341
- .title-badge img {
342
- width: 48px;
343
- height: 48px;
344
- }
345
-
346
- .title-text {
347
- font-size: 30px;
348
- }
349
-
350
- .product-card {
351
- grid-template-columns: 80px 1fr;
352
- min-height: 0;
353
- padding: 12px 14px;
354
- }
355
-
356
- .product-image-container {
357
- width: 80px;
358
- height: 80px;
359
- }
360
-
361
- .product-name {
362
- font-size: 24px;
363
- }
364
-
365
- .product-side {
366
- grid-column: 1 / -1;
367
- justify-content: flex-start;
368
- padding-left: 94px;
369
- }
370
- }
371
372
  </style>
372
373
  </head>
373
374
  <body>
374
- <div class="merchant-page">
375
+ <div id="container" class="merchant-page">
375
376
  <div class="background" style="background-image: url('{{background}}');"></div>
376
377
  <div class="content-container">
377
378
  <div class="header">
378
379
  <div class="title-section">
379
380
  <div class="title-main">
380
381
  <div class="title-badge">
381
- {{if titleIcon}}
382
- <img src="{{_res_path}}img/yuanxingshangren.png" alt="{{title}}">
383
- {{else}}
384
-
385
- {{/if}}
382
+ <img src="{{_res_path}}img/yuanxingshangren.png" alt="今日远行商人">
386
383
  </div>
387
384
  <span class="title-text">{{title}}</span>
388
385
  </div>
389
386
  <div class="subtitle">{{subtitle}}</div>
390
387
  </div>
391
388
  <div class="header-side">
392
- <div class="summary-chip">当前商品数 <strong>{{product_count}}</strong></div>
393
- <div class="round-info">
394
- <div class="round-pill">第 {{round_info.current || '未开放'}} / {{round_info.total}} 轮</div>
395
- <div class="countdown-pill">剩余 {{round_info.countdown}}</div>
396
- </div>
389
+ <div class="summary-chip">今日商品数 <strong>{{total_products}}</strong></div>
397
390
  </div>
398
391
  </div>
399
392
 
400
- <div class="products-grid">
401
- {{if categories && categories.length > 0}}
402
- {{each categories cat}}
403
- <div class="category-section">
404
- <div class="category-header">
405
- <span class="category-title">{{cat.label}}</span>
406
- <span class="category-tag {{cat.key}}">{{cat.products.length}} 件</span>
393
+ {{if total_products > 0}}
394
+ {{each categories cat}}
395
+ <div class="category-section">
396
+ <div class="category-header">
397
+ <span class="category-title">{{cat.label}}</span>
398
+ <span class="category-count {{cat.key}}">{{cat.product_count}} 件</span>
399
+ </div>
400
+ {{if cat.key === 'round'}}
401
+ {{each cat.roundGroups group}}
402
+ <div class="round-section {{if group.is_current}}is-current{{/if}}">
403
+ <div class="round-header">
404
+ <span class="round-title">第{{group.round_id}}轮 {{group.label}}</span>
405
+ {{if group.is_current}}
406
+ <span class="round-badge current">当前轮次</span>
407
+ {{/if}}
407
408
  </div>
408
- {{each cat.products product}}
409
+ {{if group.products && group.products.length > 0}}
410
+ <div class="products-grid">
411
+ {{each group.products product}}
412
+ <div class="product-card">
413
+ <div class="product-image-container">
414
+ <img class="product-image" src="{{product.image}}" alt="{{product.name}}">
415
+ </div>
416
+ <div class="product-main">
417
+ <div class="product-name">{{product.name}}</div>
418
+ <div class="product-time">北京时间 {{product.time_label}}</div>
419
+ </div>
420
+ <div class="product-side">
421
+ <div class="product-slot">第{{group.round_id}}轮</div>
422
+ </div>
423
+ </div>
424
+ {{/each}}
425
+ </div>
426
+ {{else}}
427
+ <div class="round-empty">该轮次暂无商品</div>
428
+ {{/if}}
429
+ </div>
430
+ {{/each}}
431
+ {{else}}
432
+ <div class="products-grid">
433
+ {{each cat.roundGroups group}}
434
+ {{each group.products product}}
409
435
  <div class="product-card">
410
436
  <div class="product-image-container">
411
437
  <img class="product-image" src="{{product.image}}" alt="{{product.name}}">
@@ -416,12 +442,14 @@ body {
416
442
  </div>
417
443
  </div>
418
444
  {{/each}}
445
+ {{/each}}
419
446
  </div>
420
- {{/each}}
421
- {{else}}
422
- <div class="product-empty">本轮暂无商品,稍后再来看看。</div>
423
447
  {{/if}}
424
448
  </div>
449
+ {{/each}}
450
+ {{else}}
451
+ <div class="all-empty">今日暂无已公布的远行商人商品,稍后再来看看。</div>
452
+ {{/if}}
425
453
  </div>
426
454
  </div>
427
455
  </body>