@zhin.js/plugin-group-suite 1.1.14 → 1.1.16

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 (97) hide show
  1. package/README.md +12 -0
  2. package/commands/checkin/index.js +3 -3
  3. package/commands/checkin/index.ts +3 -3
  4. package/commands/forget/index.js +3 -3
  5. package/commands/forget/index.ts +3 -3
  6. package/commands/keyword-add/[keyword]/index.js +4 -3
  7. package/commands/keyword-add/[keyword]/index.ts +4 -3
  8. package/commands/keyword-list/index.js +4 -3
  9. package/commands/keyword-list/index.ts +4 -3
  10. package/commands/keyword-remove/[keyword]/index.js +5 -4
  11. package/commands/keyword-remove/[keyword]/index.ts +5 -4
  12. package/commands/mypoints/index.js +3 -3
  13. package/commands/mypoints/index.ts +3 -3
  14. package/commands/mystats/index.js +3 -3
  15. package/commands/mystats/index.ts +3 -3
  16. package/commands/rank/index.js +3 -3
  17. package/commands/rank/index.ts +3 -3
  18. package/commands/stats/index.js +6 -5
  19. package/commands/stats/index.ts +6 -5
  20. package/commands/stats-card/index.js +4 -3
  21. package/commands/stats-card/index.ts +4 -3
  22. package/commands/stats-rank/index.js +6 -5
  23. package/commands/stats-rank/index.ts +6 -5
  24. package/commands/stats-week/index.js +6 -5
  25. package/commands/stats-week/index.ts +6 -5
  26. package/commands/teach/index.js +3 -3
  27. package/commands/teach/index.ts +3 -3
  28. package/commands/teach-list/[[page]]/index.js +3 -3
  29. package/commands/teach-list/[[page]]/index.ts +3 -3
  30. package/commands/teach-regex/index.js +3 -3
  31. package/commands/teach-regex/index.ts +3 -3
  32. package/handlers/welcome/index.js +9 -1
  33. package/handlers/welcome/index.ts +8 -1
  34. package/lib/analysis-card.d.ts +1 -1
  35. package/lib/analysis-card.d.ts.map +1 -1
  36. package/lib/analysis-card.js +12 -11
  37. package/lib/analysis-card.js.map +1 -1
  38. package/lib/analysis.d.ts +2 -2
  39. package/lib/analysis.d.ts.map +1 -1
  40. package/lib/analysis.js +14 -20
  41. package/lib/analysis.js.map +1 -1
  42. package/lib/checkin-lib.d.ts +1 -1
  43. package/lib/checkin-lib.d.ts.map +1 -1
  44. package/lib/checkin-lib.js +23 -22
  45. package/lib/checkin-lib.js.map +1 -1
  46. package/lib/conversation-scope.d.ts +1 -0
  47. package/lib/conversation-scope.d.ts.map +1 -1
  48. package/lib/conversation-scope.js.map +1 -1
  49. package/lib/i18n.d.ts +2 -0
  50. package/lib/i18n.d.ts.map +1 -0
  51. package/lib/i18n.js +480 -0
  52. package/lib/i18n.js.map +1 -0
  53. package/lib/keywords.d.ts +1 -0
  54. package/lib/keywords.d.ts.map +1 -1
  55. package/lib/keywords.js +8 -7
  56. package/lib/keywords.js.map +1 -1
  57. package/lib/shared-runtime.d.ts +1 -0
  58. package/lib/shared-runtime.d.ts.map +1 -1
  59. package/lib/shared-runtime.js +2 -1
  60. package/lib/shared-runtime.js.map +1 -1
  61. package/lib/stats-card.d.ts +2 -2
  62. package/lib/stats-card.d.ts.map +1 -1
  63. package/lib/stats-card.js +15 -14
  64. package/lib/stats-card.js.map +1 -1
  65. package/lib/stats-data.d.ts +3 -2
  66. package/lib/stats-data.d.ts.map +1 -1
  67. package/lib/stats-data.js +13 -12
  68. package/lib/stats-data.js.map +1 -1
  69. package/lib/stats-lib.d.ts.map +1 -1
  70. package/lib/stats-lib.js +8 -7
  71. package/lib/stats-lib.js.map +1 -1
  72. package/lib/teach-lib.d.ts +1 -1
  73. package/lib/teach-lib.d.ts.map +1 -1
  74. package/lib/teach-lib.js +27 -26
  75. package/lib/teach-lib.js.map +1 -1
  76. package/package.json +12 -12
  77. package/skills/checkin/tools/checkin_query/index.js +5 -4
  78. package/skills/checkin/tools/checkin_query/index.ts +5 -4
  79. package/skills/checkin/tools/checkin_rank/index.js +4 -3
  80. package/skills/checkin/tools/checkin_rank/index.ts +4 -3
  81. package/skills/group-daily-analysis/tools/group_announce/index.js +3 -2
  82. package/skills/group-daily-analysis/tools/group_announce/index.ts +3 -2
  83. package/skills/group-daily-analysis/tools/stats_query/index.js +4 -3
  84. package/skills/group-daily-analysis/tools/stats_query/index.ts +4 -3
  85. package/skills/group-daily-analysis/tools/stats_user/index.js +4 -3
  86. package/skills/group-daily-analysis/tools/stats_user/index.ts +4 -3
  87. package/src/analysis-card.ts +13 -11
  88. package/src/analysis.ts +15 -13
  89. package/src/checkin-lib.ts +23 -21
  90. package/src/conversation-scope.ts +1 -0
  91. package/src/i18n.ts +480 -0
  92. package/src/keywords.ts +9 -7
  93. package/src/shared-runtime.ts +3 -1
  94. package/src/stats-card.ts +17 -16
  95. package/src/stats-data.ts +14 -12
  96. package/src/stats-lib.ts +8 -7
  97. package/src/teach-lib.ts +27 -26
package/lib/i18n.js ADDED
@@ -0,0 +1,480 @@
1
+ import { createMessages } from 'zhin.js/i18n';
2
+ export const messages = createMessages({
3
+ "checkinRetry": {
4
+ "zh-CN": "签到数据库尚未就绪,请稍后重试",
5
+ "en": "The check-in database is not ready; try again later"
6
+ },
7
+ "checkinDb": {
8
+ "zh-CN": "签到数据库尚未就绪",
9
+ "en": "The check-in database is not ready"
10
+ },
11
+ "senderMissing": {
12
+ "zh-CN": "无法获取用户信息",
13
+ "en": "Could not identify the sender"
14
+ },
15
+ "checkinFailed": {
16
+ "zh-CN": "签到失败,请重试",
17
+ "en": "Check-in failed; try again"
18
+ },
19
+ "checkinDone": {
20
+ "zh-CN": "签到成功!",
21
+ "en": "Checked in!"
22
+ },
23
+ "checked": {
24
+ "zh-CN": "今日已签到 ✓",
25
+ "en": "Checked in today ✓"
26
+ },
27
+ "unchecked": {
28
+ "zh-CN": "今日未签到",
29
+ "en": "Not checked in today"
30
+ },
31
+ "checkinEmpty": {
32
+ "zh-CN": "还没有人签到过哦~",
33
+ "en": "No one has checked in yet"
34
+ },
35
+ "groupPoints": {
36
+ "zh-CN": "本群积分排行",
37
+ "en": "Group points leaderboard"
38
+ },
39
+ "channelPoints": {
40
+ "zh-CN": "本频道积分排行",
41
+ "en": "Channel points leaderboard"
42
+ },
43
+ "privatePoints": {
44
+ "zh-CN": "当前私聊积分排行",
45
+ "en": "Private conversation points leaderboard"
46
+ },
47
+ "alreadyChecked": {
48
+ "zh-CN": "你今天已经签到过了哦~\n当前积分: {points}\n连续签到: {days} 天",
49
+ "en": "Already checked in today\nPoints: {points}\nStreak: {days} days"
50
+ },
51
+ "basePoints": {
52
+ "zh-CN": "基础积分: +{points}",
53
+ "en": "Base points: +{points}"
54
+ },
55
+ "bonusPoints": {
56
+ "zh-CN": "连续奖励: +{points} (连续{days}天)",
57
+ "en": "Streak bonus: +{points} ({days} days)"
58
+ },
59
+ "earnedPoints": {
60
+ "zh-CN": "本次获得: +{points}",
61
+ "en": "Earned: +{points}"
62
+ },
63
+ "currentPoints": {
64
+ "zh-CN": "当前积分: {points}",
65
+ "en": "Points: {points}"
66
+ },
67
+ "checkinHint": {
68
+ "zh-CN": "你还没有签到记录,发送「{command}」开始吧!",
69
+ "en": "No check-ins yet. Send “{command}” to start."
70
+ },
71
+ "checkinHintNoHead": {
72
+ "zh-CN": "你还没有签到记录,请使用签到入口开始",
73
+ "en": "No check-ins yet. Use the check-in entry to start."
74
+ },
75
+ "pointsTitle": {
76
+ "zh-CN": "{name} 的积分信息",
77
+ "en": "Points for {name}"
78
+ },
79
+ "points": {
80
+ "zh-CN": "积分: {points}",
81
+ "en": "Points: {points}"
82
+ },
83
+ "checkinTotal": {
84
+ "zh-CN": "累计签到: {days} 天",
85
+ "en": "Check-ins: {days} days"
86
+ },
87
+ "checkinStreak": {
88
+ "zh-CN": "连续签到: {days} 天",
89
+ "en": "Streak: {days} days"
90
+ },
91
+ "checkinMax": {
92
+ "zh-CN": "最长连续: {days} 天",
93
+ "en": "Longest streak: {days} days"
94
+ },
95
+ "pointsRow": {
96
+ "zh-CN": "{prefix} {name} — {points}分 ({days}天)",
97
+ "en": "{prefix} {name} — {points} points ({days} days)"
98
+ },
99
+ "myRankFooter": {
100
+ "zh-CN": "\n你的排名: 第{rank}名",
101
+ "en": "\nYour rank: #{rank}"
102
+ },
103
+ "user": {
104
+ "zh-CN": "用户",
105
+ "en": "User"
106
+ },
107
+ "you": {
108
+ "zh-CN": "你",
109
+ "en": "You"
110
+ },
111
+ "teachRetry": {
112
+ "zh-CN": "问答数据库尚未就绪,请稍后重试",
113
+ "en": "The Q&A database is not ready; try again later"
114
+ },
115
+ "teachDb": {
116
+ "zh-CN": "问答数据库尚未就绪",
117
+ "en": "The Q&A database is not ready"
118
+ },
119
+ "regexDisabled": {
120
+ "zh-CN": "管理员已禁用正则问答",
121
+ "en": "Regex Q&A is disabled by the administrator"
122
+ },
123
+ "unsafeRegex": {
124
+ "zh-CN": "该正则可能导致性能问题,请简化",
125
+ "en": "This regex may cause performance problems; simplify it"
126
+ },
127
+ "teachEmpty": {
128
+ "zh-CN": "还没有教过任何问答哦~",
129
+ "en": "No Q&A entries yet"
130
+ },
131
+ "regex": {
132
+ "zh-CN": "[正则]",
133
+ "en": "[Regex]"
134
+ },
135
+ "exact": {
136
+ "zh-CN": "[精确]",
137
+ "en": "[Exact]"
138
+ },
139
+ "teachTitle": {
140
+ "zh-CN": "本会话问答列表",
141
+ "en": "Q&A in this conversation"
142
+ },
143
+ "questionRequired": {
144
+ "zh-CN": "请提供要删除的问题",
145
+ "en": "Provide the question to remove"
146
+ },
147
+ "regexUsage": {
148
+ "zh-CN": "格式:正则 回答,或 正则|回答",
149
+ "en": "Format: pattern answer, or pattern|answer"
150
+ },
151
+ "teachUsage": {
152
+ "zh-CN": "格式:关键词 回答,或 问题|答案",
153
+ "en": "Format: keyword answer, or question|answer"
154
+ },
155
+ "invalidRegex": {
156
+ "zh-CN": "正则表达式不合法: {error}",
157
+ "en": "Invalid regular expression: {error}"
158
+ },
159
+ "teachLimit": {
160
+ "zh-CN": "该群问答数已达上限 ({limit})",
161
+ "en": "This group has reached its Q&A limit ({limit})"
162
+ },
163
+ "teachUpdated": {
164
+ "zh-CN": "已更新问答:「{question}」→「{answer}」",
165
+ "en": "Q&A updated: “{question}” → “{answer}”"
166
+ },
167
+ "regexLearned": {
168
+ "zh-CN": "学会了!匹配 /{question}/ 的消息我会回复「{answer}」",
169
+ "en": "Learned! Messages matching /{question}/ receive “{answer}”"
170
+ },
171
+ "teachLearned": {
172
+ "zh-CN": "学会了!发送「{question}」我会回复「{answer}」",
173
+ "en": "Learned! Send “{question}” to receive “{answer}”"
174
+ },
175
+ "teachPage": {
176
+ "zh-CN": "{header}\n{lines}\n第 {page}/{pages} 页 · 共 {count} 条",
177
+ "en": "{header}\n{lines}\nPage {page}/{pages} · {count} entries"
178
+ },
179
+ "questionMissing": {
180
+ "zh-CN": "没有找到问题「{question}」",
181
+ "en": "Question “{question}” was not found"
182
+ },
183
+ "questionRemoved": {
184
+ "zh-CN": "已忘记「{question}」的回答",
185
+ "en": "Removed the answer to “{question}”"
186
+ },
187
+ "statsEmpty": {
188
+ "zh-CN": "{title}\n暂无数据",
189
+ "en": "{title}\nNo data"
190
+ },
191
+ "statsRow": {
192
+ "zh-CN": "{prefix} {name} — {count}条",
193
+ "en": "{prefix} {name} — {count} messages"
194
+ },
195
+ "statsFooter": {
196
+ "zh-CN": "\n共 {people} 人, {messages} 条消息",
197
+ "en": "\n{people} participants, {messages} messages"
198
+ },
199
+ "statsMyFooter": {
200
+ "zh-CN": " | 你第{rank}名 ({count}条)",
201
+ "en": " | Your rank: #{rank} ({count} messages)"
202
+ },
203
+ "myStatsTitle": {
204
+ "zh-CN": "{name} 的{scope}消息统计",
205
+ "en": "{name} · {scope} message statistics"
206
+ },
207
+ "todayMessages": {
208
+ "zh-CN": "今日: {count} 条",
209
+ "en": "Today: {count} messages"
210
+ },
211
+ "weekMessages": {
212
+ "zh-CN": "本周: {count} 条",
213
+ "en": "This week: {count} messages"
214
+ },
215
+ "monthMessages": {
216
+ "zh-CN": "本月: {count} 条",
217
+ "en": "This month: {count} messages"
218
+ },
219
+ "totalMessages": {
220
+ "zh-CN": "总计: {count} 条",
221
+ "en": "Total: {count} messages"
222
+ },
223
+ "activeDays": {
224
+ "zh-CN": "活跃天数: {count} 天",
225
+ "en": "Active days: {count}"
226
+ },
227
+ "statsDb": {
228
+ "zh-CN": "统计数据库尚未就绪",
229
+ "en": "The statistics database is not ready"
230
+ },
231
+ "myStatsEmpty": {
232
+ "zh-CN": "暂无你的消息记录",
233
+ "en": "No message history for you yet"
234
+ },
235
+ "thisGroup": {
236
+ "zh-CN": "本群",
237
+ "en": "This group"
238
+ },
239
+ "global": {
240
+ "zh-CN": "全局",
241
+ "en": "All conversations"
242
+ },
243
+ "statsTodayGroup": {
244
+ "zh-CN": "今日本群消息统计",
245
+ "en": "Today's group message statistics"
246
+ },
247
+ "statsTodayAll": {
248
+ "zh-CN": "今日全局消息统计",
249
+ "en": "Today's message statistics"
250
+ },
251
+ "statsWeekGroup": {
252
+ "zh-CN": "本周本群消息统计",
253
+ "en": "This week's group message statistics"
254
+ },
255
+ "statsWeekAll": {
256
+ "zh-CN": "本周全局消息统计",
257
+ "en": "This week's message statistics"
258
+ },
259
+ "statsMonthGroup": {
260
+ "zh-CN": "本月话唠排行",
261
+ "en": "This month's most active members"
262
+ },
263
+ "statsMonthAll": {
264
+ "zh-CN": "全局话唠排行",
265
+ "en": "Most active members"
266
+ },
267
+ "noStats": {
268
+ "zh-CN": "暂无统计数据",
269
+ "en": "No statistics yet"
270
+ },
271
+ "participants": {
272
+ "zh-CN": "参与",
273
+ "en": "Participants"
274
+ },
275
+ "messages": {
276
+ "zh-CN": "消息",
277
+ "en": "Messages"
278
+ },
279
+ "myRank": {
280
+ "zh-CN": "我的排名",
281
+ "en": "Your rank"
282
+ },
283
+ "leaderboard": {
284
+ "zh-CN": "排行榜",
285
+ "en": "Leaderboard"
286
+ },
287
+ "today": {
288
+ "zh-CN": "今日",
289
+ "en": "Today"
290
+ },
291
+ "week": {
292
+ "zh-CN": "本周",
293
+ "en": "This week"
294
+ },
295
+ "month": {
296
+ "zh-CN": "本月",
297
+ "en": "This month"
298
+ },
299
+ "total": {
300
+ "zh-CN": "总计",
301
+ "en": "Total"
302
+ },
303
+ "cardMeta": {
304
+ "zh-CN": "共 {people} 人 · {messages} 条消息{rank}",
305
+ "en": "{people} participants · {messages} messages{rank}"
306
+ },
307
+ "messageCount": {
308
+ "zh-CN": "{count} 条",
309
+ "en": "{count} messages"
310
+ },
311
+ "myStatsSubtitle": {
312
+ "zh-CN": "{scope}消息统计 · 活跃 {days} 天",
313
+ "en": "{scope} message statistics · {days} active days"
314
+ },
315
+ "cardRank": {
316
+ "zh-CN": " · 你第 {rank} 名",
317
+ "en": " · Your rank: #{rank}"
318
+ },
319
+ "analysisNamed": {
320
+ "zh-CN": "{name} · 群日常分析",
321
+ "en": "{name} · Group activity report"
322
+ },
323
+ "analysisRange": {
324
+ "zh-CN": "{start} 至 {end} · 最近 {days} 天",
325
+ "en": "{start} to {end} · Last {days} days"
326
+ },
327
+ "analysis": {
328
+ "zh-CN": "群日常分析",
329
+ "en": "Group activity report"
330
+ },
331
+ "topics": {
332
+ "zh-CN": "热门话题",
333
+ "en": "Popular topics"
334
+ },
335
+ "quotes": {
336
+ "zh-CN": "金句精选",
337
+ "en": "Selected quotes"
338
+ },
339
+ "profiles": {
340
+ "zh-CN": "用户画像",
341
+ "en": "Member profiles"
342
+ },
343
+ "characters": {
344
+ "zh-CN": "字数",
345
+ "en": "Characters"
346
+ },
347
+ "active": {
348
+ "zh-CN": "活跃",
349
+ "en": "Peak activity"
350
+ },
351
+ "hourDistribution": {
352
+ "zh-CN": "每小时消息分布",
353
+ "en": "Hourly message distribution"
354
+ },
355
+ "analysisTextNamed": {
356
+ "zh-CN": "【{name}】群日常分析",
357
+ "en": "[{name}] Group activity report"
358
+ },
359
+ "analysisTextRange": {
360
+ "zh-CN": "📅 统计区间:{start} 至 {end}(最近 {days} 天)",
361
+ "en": "📅 Period: {start} to {end} (last {days} days)"
362
+ },
363
+ "analysisMessages": {
364
+ "zh-CN": "💬 消息总数:{count} 条",
365
+ "en": "💬 Messages: {count}"
366
+ },
367
+ "analysisPeople": {
368
+ "zh-CN": "👥 参与人数:{count} 人",
369
+ "en": "👥 Participants: {count}"
370
+ },
371
+ "analysisChars": {
372
+ "zh-CN": "📝 总字数:{count} 字",
373
+ "en": "📝 Characters: {count}"
374
+ },
375
+ "analysisPeak": {
376
+ "zh-CN": "⏰ 最活跃时段:{start}:00 - {end}:00",
377
+ "en": "⏰ Peak activity: {start}:00 - {end}:00"
378
+ },
379
+ "hourDistributionText": {
380
+ "zh-CN": "📈 每小时消息分布:",
381
+ "en": "📈 Hourly message distribution:"
382
+ },
383
+ "llmTopics": {
384
+ "zh-CN": "🔥 热门话题(LLM 提取):",
385
+ "en": "🔥 Popular topics (AI extracted):"
386
+ },
387
+ "llmQuotes": {
388
+ "zh-CN": "💬 金句(LLM 筛选):",
389
+ "en": "💬 Selected quotes (AI selected):"
390
+ },
391
+ "llmProfiles": {
392
+ "zh-CN": "👤 用户画像/称号(LLM):",
393
+ "en": "👤 Member profiles/titles (AI):"
394
+ },
395
+ "keywordStorage": {
396
+ "zh-CN": "关键词管理需要 Database Host 的持久状态服务;请配置数据库,或显式设置 ephemeralKeywords: true 使用临时词库",
397
+ "en": "Keyword management requires persistent Database Host state; configure a database or explicitly enable ephemeralKeywords: true for temporary storage"
398
+ },
399
+ "keywordLimit": {
400
+ "zh-CN": "群关键词最多 200 条",
401
+ "en": "Group keywords are limited to 200 entries"
402
+ },
403
+ "keywordSize": {
404
+ "zh-CN": "词库 JSON 必须小于 64 KiB(UTF-8);请缩短回复或删除条目",
405
+ "en": "Keyword dictionary JSON must be below 64 KiB (UTF-8); shorten replies or remove entries"
406
+ },
407
+ "keywordLength": {
408
+ "zh-CN": "关键词须为 1–200 字符,回复须为 1–2000 字符",
409
+ "en": "Keyword must contain 1–200 characters and reply 1–2000 characters"
410
+ },
411
+ "keywordRequired": {
412
+ "zh-CN": "请提供关键词和回复内容",
413
+ "en": "Provide a keyword and reply"
414
+ },
415
+ "keywordAdded": {
416
+ "zh-CN": "已添加关键词「{keyword}」→「{reply}」",
417
+ "en": "Keyword added: “{keyword}” → “{reply}”"
418
+ },
419
+ "keywordRemoveRequired": {
420
+ "zh-CN": "请提供要删除的关键词",
421
+ "en": "Provide the keyword to remove"
422
+ },
423
+ "keywordMissing": {
424
+ "zh-CN": "关键词「{keyword}」不存在",
425
+ "en": "Keyword “{keyword}” does not exist"
426
+ },
427
+ "keywordRemoved": {
428
+ "zh-CN": "已删除关键词「{keyword}」",
429
+ "en": "Keyword removed: “{keyword}”"
430
+ },
431
+ "keywordEmpty": {
432
+ "zh-CN": "当前没有设置任何关键词",
433
+ "en": "No keywords configured"
434
+ },
435
+ "keywordList": {
436
+ "zh-CN": "关键词列表(共 {count} 条):\n{lines}",
437
+ "en": "Keywords ({count}):\n{lines}"
438
+ },
439
+ "userCheckinEmpty": {
440
+ "zh-CN": "用户 {user} 没有签到记录",
441
+ "en": "No check-ins for {user}"
442
+ },
443
+ "userCheckinInfo": {
444
+ "zh-CN": "{name}: 积分={points}, 累计={total}天, 连续={streak}天, 最长={max}天, 上次={last}",
445
+ "en": "{name}: points={points}, check-ins={total} days, streak={streak} days, longest={max} days, last={last}"
446
+ },
447
+ "checkinOverview": {
448
+ "zh-CN": "签到系统统计\n总用户: {users}\n总积分: {points}\n今日签到: {today}人",
449
+ "en": "Check-in statistics\nUsers: {users}\nPoints: {points}\nChecked in today: {today}"
450
+ },
451
+ "rankEmpty": {
452
+ "zh-CN": "暂无排行数据",
453
+ "en": "No leaderboard data yet"
454
+ },
455
+ "pointsToolRow": {
456
+ "zh-CN": "{rank}. {name} — {points}分 (连续{days}天)",
457
+ "en": "{rank}. {name} — {points} points ({days}-day streak)"
458
+ },
459
+ "periodStatsEmpty": {
460
+ "zh-CN": "{period} 暂无消息统计数据",
461
+ "en": "{period}: no message statistics yet"
462
+ },
463
+ "statsOverview": {
464
+ "zh-CN": "消息统计 ({period})\n总消息: {total}条, 活跃用户: {users}人\n{lines}",
465
+ "en": "Message statistics ({period})\nMessages: {total}, active members: {users}\n{lines}"
466
+ },
467
+ "userStatsEmpty": {
468
+ "zh-CN": "用户 {user} 暂无消息记录",
469
+ "en": "No message history for {user}"
470
+ },
471
+ "userStatsInfo": {
472
+ "zh-CN": "{name} 的统计\n今日: {today}条\n本周: {week}条\n总计: {total}条\n活跃天数: {days}天",
473
+ "en": "Statistics for {name}\nToday: {today} messages\nThis week: {week} messages\nTotal: {total} messages\nActive days: {days}"
474
+ },
475
+ "announcement": {
476
+ "zh-CN": "📢 群公告:\n{message}",
477
+ "en": "📢 Group announcement:\n{message}"
478
+ }
479
+ });
480
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/lib/keywords.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { ConversationInput } from './conversation-scope.js';
4
4
  export declare const KEYWORD_STORAGE_REQUIREMENT = "\u5173\u952E\u8BCD\u7BA1\u7406\u9700\u8981 Database Host \u7684\u6301\u4E45\u72B6\u6001\u670D\u52A1\uFF1B\u8BF7\u914D\u7F6E\u6570\u636E\u5E93\uFF0C\u6216\u663E\u5F0F\u8BBE\u7F6E ephemeralKeywords: true \u4F7F\u7528\u4E34\u65F6\u8BCD\u5E93";
5
5
  type KeywordRows = readonly (readonly [string, string])[];
6
6
  interface KeywordContext {
7
+ readonly locale?: import('zhin.js/i18n').Locale;
7
8
  readonly config: Readonly<Partial<GroupSuiteConfig>>;
8
9
  use<T>(token: Token<T>): T;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../src/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKjE,eAAO,MAAM,2BAA2B,mPAA8E,CAAC;AAIvH,KAAK,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAC1D,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC5B;AAED,iGAAiG;AACjG,wBAAgB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc;;sBAOxD,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI;EAyBnE;AAED,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc;;sBA5BlE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI;EAkCnE"}
1
+ {"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../src/keywords.ts"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKjE,eAAO,MAAM,2BAA2B,mPAA8E,CAAC;AAIvH,KAAK,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAC1D,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC5B;AAED,iGAAiG;AACjG,wBAAgB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc;;sBAOxD,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI;EAyBnE;AAED,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc;;sBA5BlE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI;EAkCnE"}
package/lib/keywords.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { messages as t } from './i18n.js';
1
2
  import { createDeliveryTarget, databaseHostToken } from 'zhin.js';
2
3
  import { requireConversation } from './conversation-scope.js';
3
4
  import { keywordStore } from './keyword-store.js';
@@ -18,7 +19,7 @@ export function keywords(input, context) {
18
19
  update: async (updater) => {
19
20
  const next = new Map(store);
20
21
  updater(next);
21
- assertLimit(next);
22
+ assertLimit(next, context.locale ?? input?.locale);
22
23
  store.clear();
23
24
  for (const [key, value] of next)
24
25
  store.set(key, value);
@@ -30,7 +31,7 @@ export function keywords(input, context) {
30
31
  return context.use(databaseHostToken).state;
31
32
  }
32
33
  catch (cause) {
33
- throw new KeywordStorageRequirementError(KEYWORD_STORAGE_REQUIREMENT, { cause });
34
+ throw new KeywordStorageRequirementError(t(context.locale ?? input?.locale, 'keywordStorage'), { cause });
34
35
  }
35
36
  })();
36
37
  const state = hostState.forConversation(createDeliveryTarget({ conversation: target }));
@@ -40,7 +41,7 @@ export function keywords(input, context) {
40
41
  await state.update('keywords', current => {
41
42
  const next = new Map(current ?? []);
42
43
  updater(next);
43
- assertLimit(next);
44
+ assertLimit(next, context.locale ?? input?.locale);
44
45
  return [...next.entries()];
45
46
  });
46
47
  },
@@ -57,15 +58,15 @@ export function keywordsForCommand(input, context) {
57
58
  throw error;
58
59
  }
59
60
  }
60
- function assertLimit(store) {
61
+ function assertLimit(store, locale) {
61
62
  if (store.size > 200)
62
- throw new Error('Group keywords are limited to 200 entries');
63
+ throw new Error(t(locale, 'keywordLimit'));
63
64
  if (new TextEncoder().encode(JSON.stringify([...store.entries()])).byteLength >= MAX_KEYWORD_BYTES) {
64
- throw new Error('Keyword dictionary JSON must be below 64 KiB (UTF-8); shorten replies or remove entries');
65
+ throw new Error(t(locale, 'keywordSize'));
65
66
  }
66
67
  for (const [keyword, reply] of store) {
67
68
  if (!keyword || keyword.length > 200 || !reply || reply.length > 2000) {
68
- throw new Error('Keyword must contain 1–200 characters and reply 1–2000 characters');
69
+ throw new Error(t(locale, 'keywordLength'));
69
70
  }
70
71
  }
71
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keywords.js","sourceRoot":"","sources":["../src/keywords.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keywords.js","sourceRoot":"","sources":["../src/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAG9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,2BAA2B,GAAG,2EAA2E,CAAC;AACvH,MAAM,8BAA+B,SAAQ,KAAK;CAAG;AACrD,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AASpC,iGAAiG;AACjG,MAAM,UAAU,QAAQ,CAAC,KAAoC,EAAE,OAAuB;IACpF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtF,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxF,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAgB;YACrD,MAAM,EAAE,KAAK,EAAE,OAA+C,EAAE,EAAE;gBAChE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI;oBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;SACF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC;YAAC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;QAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,8BAA8B,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;IAC9H,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAc,UAAU,CAAC,CAAC,IAAI,EAAE;QAClE,MAAM,EAAE,KAAK,EAAE,OAA+C,EAAE,EAAE;YAChE,MAAM,KAAK,CAAC,MAAM,CAAc,UAAU,EAAE,OAAO,CAAC,EAAE;gBACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,kBAAkB,CAAC,KAAoC,EAAE,OAAuB;IAC9F,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IACxC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,8BAA8B;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAC1E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAA0B,EAAE,MAAsC;IACrF,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC;QACnG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -9,6 +9,7 @@ export declare function resolveContextKey(input: ConversationInput): {
9
9
  id: string;
10
10
  };
11
11
  export declare function resolveSender(input: {
12
+ readonly locale?: import('zhin.js/i18n').Locale;
12
13
  sender?: {
13
14
  readonly id: string;
14
15
  readonly name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared-runtime.d.ts","sourceRoot":"","sources":["../src/shared-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvG,wBAAgB,QAAQ,IAAI,MAAM,CAGjC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,EAAE,IAAI,MAAM,CAE3B;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAGxF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9C,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAK/B"}
1
+ {"version":3,"file":"shared-runtime.d.ts","sourceRoot":"","sources":["../src/shared-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvG,wBAAgB,QAAQ,IAAI,MAAM,CAGjC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,EAAE,IAAI,MAAM,CAE3B;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAGxF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;IAChD,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9C,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAK/B"}
@@ -1,3 +1,4 @@
1
+ import { messages as t } from './i18n.js';
1
2
  import { conversationKey, requireConversation } from './conversation-scope.js';
2
3
  export function todayStr() {
3
4
  const d = new Date();
@@ -22,7 +23,7 @@ export function resolveContextKey(input) {
22
23
  export function resolveSender(input) {
23
24
  const meta = input.metadata ?? {};
24
25
  const id = input.sender?.id ?? String(meta.senderId ?? '');
25
- const name = input.sender?.name ?? String(meta.senderName ?? meta.name ?? '用户');
26
+ const name = input.sender?.name ?? String(meta.senderName ?? meta.name ?? t(input.locale, 'user'));
26
27
  return { id, name };
27
28
  }
28
29
  //# sourceMappingURL=shared-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared-runtime.js","sourceRoot":"","sources":["../src/shared-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA0B,MAAM,yBAAyB,CAAC;AACvG,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,EAAE;IAChB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAG7B;IACC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IAChF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"shared-runtime.js","sourceRoot":"","sources":["../src/shared-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA0B,MAAM,yBAAyB,CAAC;AACvG,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,EAAE;IAChB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAI7B;IACC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { MyStatsReportData, StatsRankReportData } from "./stats-data.js";
2
2
  export declare const STATS_REPORT_CANVAS: "#d8dce3";
3
- export declare function buildStatsRankHtml(data: StatsRankReportData): Promise<string>;
4
- export declare function buildMyStatsHtml(data: MyStatsReportData): Promise<string>;
3
+ export declare function buildStatsRankHtml(data: StatsRankReportData, locale?: import('zhin.js/i18n').Locale): Promise<string>;
4
+ export declare function buildMyStatsHtml(data: MyStatsReportData, locale?: import('zhin.js/i18n').Locale): Promise<string>;
5
5
  //# sourceMappingURL=stats-card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats-card.d.ts","sourceRoot":"","sources":["../src/stats-card.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,eAAO,MAAM,mBAAmB,WAAoB,CAAC;AAIrD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
1
+ {"version":3,"file":"stats-card.d.ts","sourceRoot":"","sources":["../src/stats-card.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,eAAO,MAAM,mBAAmB,WAAoB,CAAC;AAIrD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,mBAAmB,EACzB,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,MAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAmDjB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,iBAAiB,EACvB,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,MAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAwCjB"}