@zhin.js/plugin-answers 0.0.0-stage → 0.0.0

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 (57) hide show
  1. package/README.md +61 -2
  2. package/commands//345/245/275/346/227/240/350/201/212/index.js +18 -0
  3. package/commands//345/245/275/346/227/240/350/201/212/index.ts +17 -0
  4. package/commands//347/247/221/347/233/256/344/270/200/index.js +19 -0
  5. package/commands//347/247/221/347/233/256/344/270/200/index.ts +17 -0
  6. package/commands//347/255/224/346/241/210/344/271/213/344/271/246/index.js +22 -0
  7. package/commands//347/255/224/346/241/210/344/271/213/344/271/246/index.ts +21 -0
  8. package/lib/book-data.d.ts +6 -0
  9. package/lib/book-data.d.ts.map +1 -0
  10. package/lib/book-data.js +87 -0
  11. package/lib/book-data.js.map +1 -0
  12. package/lib/book.d.ts +17 -0
  13. package/lib/book.d.ts.map +1 -0
  14. package/lib/book.js +37 -0
  15. package/lib/book.js.map +1 -0
  16. package/lib/config.d.ts +23 -0
  17. package/lib/config.d.ts.map +1 -0
  18. package/lib/config.js +19 -0
  19. package/lib/config.js.map +1 -0
  20. package/lib/driving-quiz-data.d.ts +11 -0
  21. package/lib/driving-quiz-data.d.ts.map +1 -0
  22. package/lib/driving-quiz-data.js +36 -0
  23. package/lib/driving-quiz-data.js.map +1 -0
  24. package/lib/fun-quiz-data.d.ts +7 -0
  25. package/lib/fun-quiz-data.d.ts.map +1 -0
  26. package/lib/fun-quiz-data.js +47 -0
  27. package/lib/fun-quiz-data.js.map +1 -0
  28. package/lib/index.d.ts +9 -0
  29. package/lib/index.d.ts.map +1 -0
  30. package/lib/index.js +9 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/quiz-types.d.ts +14 -0
  33. package/lib/quiz-types.d.ts.map +1 -0
  34. package/lib/quiz-types.js +2 -0
  35. package/lib/quiz-types.js.map +1 -0
  36. package/lib/quiz.d.ts +52 -0
  37. package/lib/quiz.d.ts.map +1 -0
  38. package/lib/quiz.js +111 -0
  39. package/lib/quiz.js.map +1 -0
  40. package/lib/runtime.d.ts +4 -0
  41. package/lib/runtime.d.ts.map +1 -0
  42. package/lib/runtime.js +4 -0
  43. package/lib/runtime.js.map +1 -0
  44. package/middlewares/quiz-answer/index.js +21 -0
  45. package/middlewares/quiz-answer/index.ts +22 -0
  46. package/package.json +92 -3
  47. package/plugin.js +21 -0
  48. package/schema.json +41 -0
  49. package/src/book-data.ts +86 -0
  50. package/src/book.ts +48 -0
  51. package/src/config.ts +23 -0
  52. package/src/driving-quiz-data.ts +37 -0
  53. package/src/fun-quiz-data.ts +48 -0
  54. package/src/index.ts +20 -0
  55. package/src/quiz-types.ts +15 -0
  56. package/src/quiz.ts +136 -0
  57. package/src/runtime.ts +5 -0
package/README.md CHANGED
@@ -1,3 +1,62 @@
1
- # Temporary Holding Version
1
+ # @zhin.js/plugin-answers
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 群聊小玩具合集:**答案之书**、**好无聊**趣味选择题和**科目一**交规小测。不依赖任何平台专属 API,所有适配器都能用。
4
+
5
+ 题库、答案和解析都是本仓库原创内容(MIT),没有从任何第三方题库、书籍或机器人项目复制。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ pnpm exec zhin install @zhin.js/plugin-answers
11
+ ```
12
+
13
+ ## 配置
14
+
15
+ 在应用目录运行安装命令,会安装依赖并挂载到主配置 `plugins` 映射,实例名为 `answers`。在 `zhin.config.yml` 的实例节点修改配置:
16
+
17
+ ```yaml
18
+ configVersion: 2
19
+ plugins:
20
+ answers: "@zhin.js/plugin-answers"
21
+ answers:
22
+ dailyStable: false # true 时,同一用户同一天问同一个问题得到相同答案(默认 false)
23
+ timezone: Asia/Shanghai # dailyStable 判断「同一天」所用的 IANA 时区
24
+ quizTimeoutSeconds: 120 # 出题后等待作答的秒数,15–600(默认 120)
25
+ enableDrivingQuiz: true # 是否启用「科目一」小测(默认 true)
26
+ ```
27
+
28
+ 配置声明位于 `src/config.ts`,`schema.json` 由 `node scripts/sync-plugin-config-schemas.mjs` 从同一声明生成。配置不满足范围或含未知字段时,候选代不会激活。
29
+
30
+ ## 命令
31
+
32
+ | 命令 | 说明 |
33
+ |------|------|
34
+ | `答案之书 <问题>` / `answerbook <问题>` | 翻开答案之书。不带问题时显示用法 |
35
+ | `好无聊` / `boring` | 出一道趣味选择题 |
36
+ | `科目一` | 出一道交规小测题 |
37
+
38
+ 出题后,**出题人本人**在同一会话直接回复选项字母(`A`–`D`,大小写和全角都可以)即可作答,回复后显示对错和解析。其他人回复的字母、其他会话里的字母、超时后的回复都会被忽略,交给后续中间件处理,不会劫持普通聊天。每人每个会话同时只有一道待答题,再次出题会替换旧题。
39
+
40
+ 待答题只保存在内存里,插件重载或 Bot 重启后作废。内存中最多保留 1000 道待答题,超出时丢弃最早的。
41
+
42
+ ## 关于「科目一」
43
+
44
+ 题面是依据公开的《中华人民共和国道路交通安全法》及《道路交通安全法实施条例》等法规原创整理的,每题解析都注明了依据条款。未使用任何驾考题库的题目或图片。仅供娱乐和自测,具体规定以现行有效的法律法规和当地交管部门要求为准。不需要时可以用 `enableDrivingQuiz: false` 关闭。
45
+
46
+ ## 编程接口
47
+
48
+ 包入口导出纯函数和数据,方便在其他插件里复用:
49
+
50
+ ```ts
51
+ import { pickBookAnswer, FUN_QUESTIONS, QuizService } from '@zhin.js/plugin-answers';
52
+
53
+ const answer = pickBookAnswer({ question: '今天出门吗', senderId: 'alice', dailyStable: true, timezone: 'Asia/Shanghai' });
54
+ ```
55
+
56
+ ## English
57
+
58
+ Fun, platform-agnostic chat toys with **original** content: `答案之书 <question>` (book of answers, optional per-day stable answers), `好无聊` (multiple-choice trivia) and `科目一` (traffic-rule quiz written from the public PRC Road Traffic Safety Law and its implementing regulations; entertainment only). Only the asker can answer, by replying a single letter in the same conversation before the timeout.
59
+
60
+ ## 许可
61
+
62
+ MIT
@@ -0,0 +1,18 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { defineCommand } from 'zhin.js/command';
3
+ import { resolveAnswersConfig } from "../../lib/config.js";
4
+ import { FUN_QUESTIONS } from "../../lib/fun-quiz-data.js";
5
+ import { formatQuestion, quizKey } from "../../lib/quiz.js";
6
+ import { quizServiceToken } from "../../lib/runtime.js";
7
+ export default defineCommand({
8
+ description: '好无聊?来一道原创趣味选择题,直接回复字母作答',
9
+ alias: ['boring'],
10
+ execute({ input, use, config }) {
11
+ const key = quizKey(input);
12
+ if (!key)
13
+ return '这个指令需要在真实会话里使用。';
14
+ const settings = resolveAnswersConfig(config);
15
+ const question = use(quizServiceToken).ask(key, 'fun', FUN_QUESTIONS, settings.quizTimeoutSeconds);
16
+ return formatQuestion('fun', question, settings.quizTimeoutSeconds);
17
+ },
18
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from 'zhin.js/command';
2
+ import { resolveAnswersConfig, type AnswersConfig } from '../../src/config.js';
3
+ import { FUN_QUESTIONS } from '../../src/fun-quiz-data.js';
4
+ import { formatQuestion, quizKey } from '../../src/quiz.js';
5
+ import { quizServiceToken } from '../../src/runtime.js';
6
+
7
+ export default defineCommand<AnswersConfig>({
8
+ description: '好无聊?来一道原创趣味选择题,直接回复字母作答',
9
+ alias: ['boring'],
10
+ execute({ input, use, config }) {
11
+ const key = quizKey(input);
12
+ if (!key) return '这个指令需要在真实会话里使用。';
13
+ const settings = resolveAnswersConfig(config);
14
+ const question = use(quizServiceToken).ask(key, 'fun', FUN_QUESTIONS, settings.quizTimeoutSeconds);
15
+ return formatQuestion('fun', question, settings.quizTimeoutSeconds);
16
+ },
17
+ });
@@ -0,0 +1,19 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { defineCommand } from 'zhin.js/command';
3
+ import { resolveAnswersConfig } from "../../lib/config.js";
4
+ import { DRIVING_QUESTIONS } from "../../lib/driving-quiz-data.js";
5
+ import { formatQuestion, quizKey } from "../../lib/quiz.js";
6
+ import { quizServiceToken } from "../../lib/runtime.js";
7
+ export default defineCommand({
8
+ description: '科目一交规小测(原创题面,依据公开法规整理,仅供娱乐参考)',
9
+ execute({ input, use, config }) {
10
+ const settings = resolveAnswersConfig(config);
11
+ if (!settings.enableDrivingQuiz)
12
+ return '当前未启用科目一小测(enableDrivingQuiz: false)。';
13
+ const key = quizKey(input);
14
+ if (!key)
15
+ return '这个指令需要在真实会话里使用。';
16
+ const question = use(quizServiceToken).ask(key, 'driving', DRIVING_QUESTIONS, settings.quizTimeoutSeconds);
17
+ return formatQuestion('driving', question, settings.quizTimeoutSeconds);
18
+ },
19
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from 'zhin.js/command';
2
+ import { resolveAnswersConfig, type AnswersConfig } from '../../src/config.js';
3
+ import { DRIVING_QUESTIONS } from '../../src/driving-quiz-data.js';
4
+ import { formatQuestion, quizKey } from '../../src/quiz.js';
5
+ import { quizServiceToken } from '../../src/runtime.js';
6
+
7
+ export default defineCommand<AnswersConfig>({
8
+ description: '科目一交规小测(原创题面,依据公开法规整理,仅供娱乐参考)',
9
+ execute({ input, use, config }) {
10
+ const settings = resolveAnswersConfig(config);
11
+ if (!settings.enableDrivingQuiz) return '当前未启用科目一小测(enableDrivingQuiz: false)。';
12
+ const key = quizKey(input);
13
+ if (!key) return '这个指令需要在真实会话里使用。';
14
+ const question = use(quizServiceToken).ask(key, 'driving', DRIVING_QUESTIONS, settings.quizTimeoutSeconds);
15
+ return formatQuestion('driving', question, settings.quizTimeoutSeconds);
16
+ },
17
+ });
@@ -0,0 +1,22 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { defineCommand } from 'zhin.js/command';
3
+ import { BOOK_USAGE, MAX_QUESTION_LENGTH, pickBookAnswer, replyBook } from "../../lib/book.js";
4
+ import { resolveAnswersConfig } from "../../lib/config.js";
5
+ export default defineCommand({
6
+ description: '答案之书:心里默念问题,翻开一页得到答案',
7
+ alias: ['answerbook'],
8
+ params: { question: { type: 'text', optional: true, max: MAX_QUESTION_LENGTH, description: '你想问的问题' } },
9
+ execute({ params, input, config }) {
10
+ const question = typeof params.question === 'string' ? params.question.trim() : '';
11
+ if (!question)
12
+ return BOOK_USAGE;
13
+ const settings = resolveAnswersConfig(config);
14
+ const answer = pickBookAnswer({
15
+ question,
16
+ senderId: input?.sender?.id ?? 'anonymous',
17
+ dailyStable: settings.dailyStable,
18
+ timezone: settings.timezone,
19
+ });
20
+ return replyBook(question, answer);
21
+ },
22
+ });
@@ -0,0 +1,21 @@
1
+ import { defineCommand } from 'zhin.js/command';
2
+ import { BOOK_USAGE, MAX_QUESTION_LENGTH, pickBookAnswer, replyBook } from '../../src/book.js';
3
+ import { resolveAnswersConfig, type AnswersConfig } from '../../src/config.js';
4
+
5
+ export default defineCommand<AnswersConfig>({
6
+ description: '答案之书:心里默念问题,翻开一页得到答案',
7
+ alias: ['answerbook'],
8
+ params: { question: { type: 'text', optional: true, max: MAX_QUESTION_LENGTH, description: '你想问的问题' } },
9
+ execute({ params, input, config }) {
10
+ const question = typeof params.question === 'string' ? params.question.trim() : '';
11
+ if (!question) return BOOK_USAGE;
12
+ const settings = resolveAnswersConfig(config);
13
+ const answer = pickBookAnswer({
14
+ question,
15
+ senderId: input?.sender?.id ?? 'anonymous',
16
+ dailyStable: settings.dailyStable,
17
+ timezone: settings.timezone,
18
+ });
19
+ return replyBook(question, answer);
20
+ },
21
+ });
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 答案之书的回答。全部为本仓库原创短句(MIT),不来自任何第三方题库或书籍。
3
+ * 措辞刻意保持含糊、积极或俏皮,避免给出医疗、法律、投资等具体建议。
4
+ */
5
+ export declare const BOOK_ANSWERS: readonly string[];
6
+ //# sourceMappingURL=book-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"book-data.d.ts","sourceRoot":"","sources":["../src/book-data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAiFxC,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 答案之书的回答。全部为本仓库原创短句(MIT),不来自任何第三方题库或书籍。
3
+ * 措辞刻意保持含糊、积极或俏皮,避免给出医疗、法律、投资等具体建议。
4
+ */
5
+ export const BOOK_ANSWERS = Object.freeze([
6
+ '可以,但别急着今天就做完。',
7
+ '先睡一觉,明早再看,答案会更清楚。',
8
+ '是的,而且比你想的更顺利。',
9
+ '不是现在。',
10
+ '换个角度,问题就变小了。',
11
+ '去做吧,最坏也不过是多一个故事。',
12
+ '答案藏在你第一反应里。',
13
+ '再等一等,时机还没熟。',
14
+ '值得一试。',
15
+ '别勉强,放过自己也是一种选择。',
16
+ '问问最了解你的那个人。',
17
+ '这件事比你想的简单。',
18
+ '这件事比你想的复杂,慢慢来。',
19
+ '先把手头的小事做好。',
20
+ '会的。',
21
+ '大概率不会,但不妨碍你努力。',
22
+ '把它写下来,你就知道了。',
23
+ '你心里已经有答案了。',
24
+ '保持好奇,别急着下结论。',
25
+ '随缘,但别躺平。',
26
+ '先吃点好的再决定。',
27
+ '这一次,听从直觉。',
28
+ '这一次,相信数据。',
29
+ '请把期待值调低一点点。',
30
+ '请把期待值调高一点点。',
31
+ '机会就在下一个路口。',
32
+ '不必向所有人解释。',
33
+ '答案是肯定的,只是需要一点耐心。',
34
+ '答案是否定的,但下一扇门已经开了。',
35
+ '先迈出一小步。',
36
+ '别回头,往前看。',
37
+ '回头看看,你漏掉了什么。',
38
+ '换一种问法再问一次。',
39
+ '今天不适合做重大决定。',
40
+ '今天很适合开始。',
41
+ '交给时间。',
42
+ '少想,多做。',
43
+ '多想,少做。',
44
+ '你需要的是休息,不是答案。',
45
+ '和朋友聊聊,会有新思路。',
46
+ '小心细节。',
47
+ '别和自己较劲。',
48
+ '是时候做出改变了。',
49
+ '保持现状也很好。',
50
+ '你会为这个决定感到高兴。',
51
+ '先把预算算清楚。',
52
+ '相信过程。',
53
+ '未来的你会感谢现在的坚持。',
54
+ '答案会在不经意间出现。',
55
+ '这不是你一个人的问题。',
56
+ '放轻松,事情没那么糟。',
57
+ '大胆一点。',
58
+ '谨慎一点。',
59
+ '把选择权留给自己。',
60
+ '先问问钱包的意见。',
61
+ '去散个步,回来就懂了。',
62
+ '别被别人的节奏打乱。',
63
+ '耐心是这道题的解法。',
64
+ '是的,但要付出代价。',
65
+ '不,但你会学到东西。',
66
+ '它比看起来更重要。',
67
+ '它没有看起来那么重要。',
68
+ '答案在路上,请查收。',
69
+ '先喝杯水。',
70
+ '用你最擅长的方式去做。',
71
+ '试着去请教一个陌生人。',
72
+ '这是个好问题,值得认真对待。',
73
+ '这个问题,三天后再问。',
74
+ '不要让恐惧替你做决定。',
75
+ '不要让冲动替你做决定。',
76
+ '星星说:可以。',
77
+ '星星说:再想想。',
78
+ '一切都会好起来的。',
79
+ '你比你想象的更有能力。',
80
+ '慢慢来,比较快。',
81
+ '把注意力放在能控制的事情上。',
82
+ '先完成,再完美。',
83
+ '有时候,不做也是一种答案。',
84
+ '今天的运气站在你这边。',
85
+ '书页被风吹乱了,请稍后再问。',
86
+ ]);
87
+ //# sourceMappingURL=book-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"book-data.js","sourceRoot":"","sources":["../src/book-data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAsB,MAAM,CAAC,MAAM,CAAC;IAC3D,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,OAAO;IACP,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,OAAO;IACP,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,KAAK;IACL,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;IACb,aAAa;IACb,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,mBAAmB;IACnB,SAAS;IACT,UAAU;IACV,cAAc;IACd,YAAY;IACZ,aAAa;IACb,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,cAAc;IACd,OAAO;IACP,SAAS;IACT,WAAW;IACX,UAAU;IACV,cAAc;IACd,UAAU;IACV,OAAO;IACP,eAAe;IACf,aAAa;IACb,aAAa;IACb,aAAa;IACb,OAAO;IACP,OAAO;IACP,WAAW;IACX,WAAW;IACX,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,aAAa;IACb,YAAY;IACZ,OAAO;IACP,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,aAAa;IACb,SAAS;IACT,UAAU;IACV,WAAW;IACX,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,eAAe;IACf,aAAa;IACb,gBAAgB;CACjB,CAAC,CAAC"}
package/lib/book.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export declare const BOOK_USAGE: string;
2
+ export declare const MAX_QUESTION_LENGTH = 200;
3
+ export interface BookPickInput {
4
+ readonly question: string;
5
+ readonly senderId: string;
6
+ /** 为 true 时,同一用户同一天的同一问题得到相同答案。 */
7
+ readonly dailyStable: boolean;
8
+ readonly timezone: string;
9
+ readonly now?: number;
10
+ }
11
+ /** 规范化问题:去掉空白与常见标点,避免「?」和「?」得到不同答案。 */
12
+ export declare function normalizeQuestion(question: string): string;
13
+ /** 给定时区下的日历日期(YYYY-MM-DD);时区无效时退回 UTC。 */
14
+ export declare function calendarDay(now: number, timezone: string): string;
15
+ export declare function pickBookAnswer(input: BookPickInput, answers?: readonly string[]): string;
16
+ export declare function replyBook(question: string, answer: string): string;
17
+ //# sourceMappingURL=book.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../src/book.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,QAKX,CAAC;AAEb,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,GAAE,SAAS,MAAM,EAAiB,GAAG,MAAM,CAQtG;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE"}
package/lib/book.js ADDED
@@ -0,0 +1,37 @@
1
+ import { createHash, randomInt } from 'node:crypto';
2
+ import { BOOK_ANSWERS } from './book-data.js';
3
+ export const BOOK_USAGE = [
4
+ '📖 答案之书',
5
+ '用法:答案之书 <问题>',
6
+ '例如:答案之书 今天要不要出去走走',
7
+ '心里默念问题后发送,书会翻开一页给你答案。',
8
+ ].join('\n');
9
+ export const MAX_QUESTION_LENGTH = 200;
10
+ /** 规范化问题:去掉空白与常见标点,避免「?」和「?」得到不同答案。 */
11
+ export function normalizeQuestion(question) {
12
+ return question.trim().toLowerCase().replace(/[\s\p{P}]+/gu, '');
13
+ }
14
+ /** 给定时区下的日历日期(YYYY-MM-DD);时区无效时退回 UTC。 */
15
+ export function calendarDay(now, timezone) {
16
+ try {
17
+ return new Intl.DateTimeFormat('en-CA', { timeZone: timezone, year: 'numeric', month: '2-digit', day: '2-digit' }).format(now);
18
+ }
19
+ catch {
20
+ return new Date(now).toISOString().slice(0, 10);
21
+ }
22
+ }
23
+ export function pickBookAnswer(input, answers = BOOK_ANSWERS) {
24
+ if (answers.length === 0)
25
+ throw new Error('答案之书为空');
26
+ if (!input.dailyStable)
27
+ return answers[randomInt(answers.length)];
28
+ const day = calendarDay(input.now ?? Date.now(), input.timezone);
29
+ const digest = createHash('sha256')
30
+ .update(JSON.stringify(['answers-book-v1', day, input.senderId, normalizeQuestion(input.question)]))
31
+ .digest();
32
+ return answers[digest.readUInt32BE(0) % answers.length];
33
+ }
34
+ export function replyBook(question, answer) {
35
+ return `📖 你问:${question}\n✨ 答案之书:${answer}`;
36
+ }
37
+ //# sourceMappingURL=book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"book.js","sourceRoot":"","sources":["../src/book.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,SAAS;IACT,cAAc;IACd,mBAAmB;IACnB,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAWvC,uCAAuC;AACvC,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,QAAgB;IACvD,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjI,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,UAA6B,YAAY;IAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAE,CAAC;IACnE,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACnG,MAAM,EAAE,CAAC;IACZ,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,MAAc;IACxD,OAAO,SAAS,QAAQ,YAAY,MAAM,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Schema } from 'zhin.js';
2
+ export declare const DEFAULT_ANSWERS_CONFIG: Readonly<{
3
+ dailyStable: false;
4
+ timezone: "Asia/Shanghai";
5
+ quizTimeoutSeconds: 120;
6
+ enableDrivingQuiz: true;
7
+ }>;
8
+ /** Authoring declaration; scripts/sync-plugin-config-schemas.mjs generates the packaged schema.json for Runtime and Console. */
9
+ export declare const answersConfig: Schema<Schema.InputRecord<{
10
+ dailyStable: Schema<boolean, boolean> & Schema.Present;
11
+ timezone: Schema<string, string> & Schema.Present;
12
+ quizTimeoutSeconds: Schema<number, number> & Schema.Present;
13
+ enableDrivingQuiz: Schema<boolean, boolean> & Schema.Present;
14
+ }>, {
15
+ dailyStable: boolean;
16
+ timezone: string;
17
+ quizTimeoutSeconds: number;
18
+ enableDrivingQuiz: boolean;
19
+ } & {}>;
20
+ export type AnswersConfig = Schema.Output<typeof answersConfig>;
21
+ /** Missing fields fall back to defaults so commands stay usable when Runtime passes a partial view. */
22
+ export declare function resolveAnswersConfig(config: Partial<AnswersConfig> | undefined): AnswersConfig;
23
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,sBAAsB;;;;;EAKjC,CAAC;AAEH,gIAAgI;AAChI,eAAO,MAAM,aAAa;;;;;;;;;;OAKxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAEhE,uGAAuG;AACvG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,aAAa,CAE9F"}
package/lib/config.js ADDED
@@ -0,0 +1,19 @@
1
+ import { Schema } from 'zhin.js';
2
+ export const DEFAULT_ANSWERS_CONFIG = Object.freeze({
3
+ dailyStable: false,
4
+ timezone: 'Asia/Shanghai',
5
+ quizTimeoutSeconds: 120,
6
+ enableDrivingQuiz: true,
7
+ });
8
+ /** Authoring declaration; scripts/sync-plugin-config-schemas.mjs generates the packaged schema.json for Runtime and Console. */
9
+ export const answersConfig = Schema.object({
10
+ dailyStable: Schema.boolean().default(DEFAULT_ANSWERS_CONFIG.dailyStable).description('同一用户同一天问同一个问题时,答案之书给出相同答案').effect('reload'),
11
+ timezone: Schema.string().default(DEFAULT_ANSWERS_CONFIG.timezone).description('dailyStable 判断「同一天」所用的 IANA 时区').effect('reload'),
12
+ quizTimeoutSeconds: Schema.number().min(15).max(600).step(1).default(DEFAULT_ANSWERS_CONFIG.quizTimeoutSeconds).description('出题后等待作答的秒数,超时题目作废').effect('reload'),
13
+ enableDrivingQuiz: Schema.boolean().default(DEFAULT_ANSWERS_CONFIG.enableDrivingQuiz).description('启用「科目一」交规小测(原创题面,仅供娱乐参考)').effect('reload'),
14
+ });
15
+ /** Missing fields fall back to defaults so commands stay usable when Runtime passes a partial view. */
16
+ export function resolveAnswersConfig(config) {
17
+ return { ...DEFAULT_ANSWERS_CONFIG, ...(config ?? {}) };
18
+ }
19
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,eAAe;IACzB,kBAAkB,EAAE,GAAG;IACvB,iBAAiB,EAAE,IAAI;CACxB,CAAC,CAAC;AAEH,gIAAgI;AAChI,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IACnI,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjI,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjK,iBAAiB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;CAC/I,CAAC,CAAC;AAIH,uGAAuG;AACvG,MAAM,UAAU,oBAAoB,CAAC,MAA0C;IAC7E,OAAO,EAAE,GAAG,sBAAsB,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAmB,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { QuizQuestion } from './quiz-types.js';
2
+ /**
3
+ * 「科目一」交规小测。
4
+ *
5
+ * 题面、选项与解析均为本仓库原创(MIT),依据公开的法律法规整理:
6
+ * 《中华人民共和国道路交通安全法》(下称「道交法」)与《道路交通安全法实施条例》
7
+ * (下称「实施条例」)。法律法规文本本身不受著作权保护;本文件未复制任何驾考题库的题目或图片。
8
+ * 仅供娱乐和自测,具体规定以现行有效的法律法规和当地交管部门要求为准。
9
+ */
10
+ export declare const DRIVING_QUESTIONS: readonly QuizQuestion[];
11
+ //# sourceMappingURL=driving-quiz-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driving-quiz-data.d.ts","sourceRoot":"","sources":["../src/driving-quiz-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,YAAY,EA0BnD,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 「科目一」交规小测。
3
+ *
4
+ * 题面、选项与解析均为本仓库原创(MIT),依据公开的法律法规整理:
5
+ * 《中华人民共和国道路交通安全法》(下称「道交法」)与《道路交通安全法实施条例》
6
+ * (下称「实施条例」)。法律法规文本本身不受著作权保护;本文件未复制任何驾考题库的题目或图片。
7
+ * 仅供娱乐和自测,具体规定以现行有效的法律法规和当地交管部门要求为准。
8
+ */
9
+ export const DRIVING_QUESTIONS = Object.freeze([
10
+ { id: 'drv-01', category: '酒驾', question: '驾驶人每 100 毫升血液中的酒精含量达到多少毫克,属于醉酒驾驶?', options: ['20', '50', '80', '100'], answer: 'C', explanation: '按国家标准,20mg/100mL 以上不满 80 属于饮酒驾驶,80mg/100mL 以上属于醉酒驾驶。' },
11
+ { id: 'drv-02', category: '酒驾', question: '醉酒驾驶机动车(非营运),除依法追究刑事责任外,多少年内不得重新取得驾驶证?', options: ['1 年', '3 年', '5 年', '10 年'], answer: 'C', explanation: '道交法第九十一条:醉酒驾驶机动车的,吊销驾驶证,依法追究刑事责任;五年内不得重新取得机动车驾驶证。' },
12
+ { id: 'drv-03', category: '酒驾', question: '饮酒后驾驶机动车(非营运、首次),驾驶证会被暂扣多久?', options: ['1 个月', '3 个月', '6 个月', '12 个月'], answer: 'C', explanation: '道交法第九十一条:饮酒后驾驶机动车的,处暂扣六个月机动车驾驶证,并处一千元以上二千元以下罚款。' },
13
+ { id: 'drv-04', category: '事故', question: '造成交通事故后逃逸的,驾驶人会受到怎样的驾驶资格处理?', options: ['暂扣 6 个月', '吊销后 2 年可重考', '吊销且终生不得重新取得', '只罚款不处理驾照'], answer: 'C', explanation: '道交法第一百零一条:造成交通事故后逃逸的,吊销机动车驾驶证,且终生不得重新取得。' },
14
+ { id: 'drv-05', category: '事故', question: '发生仅造成轻微财产损失、基本事实清楚的交通事故,当事人应当?', options: ['原地等待交警到场', '先撤离现场再协商处理', '各自离开不用处理', '拍照后继续占道协商'], answer: 'B', explanation: '道交法第七十条:未造成人身伤亡、基本事实清楚的,应当先撤离现场再进行协商处理。' },
15
+ { id: 'drv-06', category: '记分', question: '机动车驾驶证记分周期为 12 个月,满分是多少分?', options: ['6 分', '10 分', '12 分', '24 分'], answer: 'C', explanation: '记分周期为 12 个月,满分为 12 分;一个周期内累计达到 12 分的,需参加学习和考试。' },
16
+ { id: 'drv-07', category: '驾驶证', question: '初次申领机动车驾驶证后的实习期是多久?', options: ['3 个月', '6 个月', '12 个月', '24 个月'], answer: 'C', explanation: '实施条例第二十二条:机动车驾驶人初次申领机动车驾驶证后的 12 个月为实习期。' },
17
+ { id: 'drv-08', category: '驾驶证', question: '实习期内驾驶机动车上高速公路行驶,应当怎样?', options: ['禁止上高速', '可以随意上高速', '由持相应或更高准驾车型驾驶证 3 年以上的驾驶人陪同', '只能在夜间上高速'], answer: 'C', explanation: '实施条例第二十二条:实习期内驾驶机动车上高速公路行驶,应当由持相应或者更高准驾车型驾驶证三年以上的驾驶人陪同。' },
18
+ { id: 'drv-09', category: '驾驶证', question: '初次取得的机动车驾驶证有效期为几年?', options: ['3 年', '6 年', '10 年', '长期'], answer: 'B', explanation: '驾驶证有效期分为 6 年、10 年和长期,初次取得为 6 年。' },
19
+ { id: 'drv-10', category: '车速', question: '高速公路上小型载客汽车的最高车速不得超过?', options: ['100 km/h', '110 km/h', '120 km/h', '130 km/h'], answer: 'C', explanation: '实施条例第七十八条:高速公路小型载客汽车最高车速不得超过每小时 120 公里,最低车速不得低于每小时 60 公里。' },
20
+ { id: 'drv-11', category: '车速', question: '高速公路上,机动车的最低车速不得低于?', options: ['40 km/h', '50 km/h', '60 km/h', '80 km/h'], answer: 'C', explanation: '实施条例第七十八条:高速公路最低车速不得低于每小时 60 公里。' },
21
+ { id: 'drv-12', category: '车速', question: '在没有道路中心线的城市道路上,机动车最高时速不得超过?', options: ['30 km/h', '40 km/h', '50 km/h', '70 km/h'], answer: 'A', explanation: '实施条例第四十五条:没有道路中心线的道路,城市道路为每小时 30 公里,公路为每小时 40 公里。' },
22
+ { id: 'drv-13', category: '车速', question: '机动车掉头、转弯、下陡坡时,最高时速不得超过?', options: ['20 km/h', '30 km/h', '40 km/h', '50 km/h'], answer: 'B', explanation: '实施条例第四十六条:掉头、转弯、下陡坡时,以及能见度 50 米以内等情形,最高时速不得超过 30 公里。' },
23
+ { id: 'drv-14', category: '高速', question: '高速公路上车速超过每小时 100 公里时,应与同车道前车保持多少米以上的距离?', options: ['50 米', '80 米', '100 米', '200 米'], answer: 'C', explanation: '实施条例第八十条:车速超过每小时 100 公里时,应当与同车道前车保持 100 米以上的距离。' },
24
+ { id: 'drv-15', category: '高速', question: '高速公路上能见度小于 200 米时,车速不得超过每小时多少公里?', options: ['40', '60', '80', '100'], answer: 'B', explanation: '实施条例第八十一条:能见度小于 200 米时,开启雾灯、近光灯、示廓灯和前后位灯,车速不得超过 60 公里,与同车道前车保持 100 米以上距离。' },
25
+ { id: 'drv-16', category: '高速', question: '在高速公路上,下列哪种行为是允许的?', options: ['倒车', '逆行', '穿越中央分隔带掉头', '按规定在应急车道停车处理故障'], answer: 'D', explanation: '实施条例第八十二条禁止在高速公路上倒车、逆行、穿越中央分隔带掉头;发生故障时可按规定停靠并设置警告标志。' },
26
+ { id: 'drv-17', category: '故障', question: '在高速公路上发生故障需要停车时,警告标志应设置在来车方向多少米以外?', options: ['50 米', '100 米', '150 米', '200 米'], answer: 'C', explanation: '道交法第六十八条:在高速公路上发生故障时,应当在故障车来车方向 150 米以外设置警告标志。' },
27
+ { id: 'drv-18', category: '故障', question: '在普通道路上发生故障难以移动时,警告标志一般设置在来车方向多远?', options: ['10–20 米', '30–50 米', '50–100 米', '200 米以外'], answer: 'C', explanation: '实施条例第六十条:在故障车来车方向 50 米至 100 米之间设置警告标志,夜间还应开启示廓灯和后位灯。' },
28
+ { id: 'drv-19', category: '行人', question: '机动车行经人行横道时,遇行人正在通过,应当?', options: ['鸣喇叭提醒后通过', '加速抢先通过', '停车让行', '从行人身后绕行'], answer: 'C', explanation: '道交法第四十七条:机动车行经人行横道时应当减速行驶;遇行人正在通过人行横道,应当停车让行。' },
29
+ { id: 'drv-20', category: '信号', question: '黄灯亮时,已越过停止线的车辆应当?', options: ['立即停车', '倒回停止线内', '可以继续通行', '鸣笛示意后停车'], answer: 'C', explanation: '实施条例第三十八条:黄灯亮时,已越过停止线的车辆可以继续通行。' },
30
+ { id: 'drv-21', category: '路口', question: '通过没有交通信号灯、交通标志和标线控制的交叉路口时,应当让哪个方向的来车先行?', options: ['左方道路', '右方道路', '车型较小的一方', '速度较快的一方'], answer: 'B', explanation: '实施条例第五十二条:进入路口前停车瞭望,让右方道路的来车先行。' },
31
+ { id: 'drv-22', category: '灯光', question: '夜间会车时,应当在距相对方向来车多远以外改用近光灯?', options: ['50 米', '100 米', '150 米', '300 米'], answer: 'C', explanation: '实施条例第四十八条:夜间会车应当在距相对方向来车 150 米以外改用近光灯。' },
32
+ { id: 'drv-23', category: '疲劳', question: '连续驾驶机动车超过 4 小时,停车休息时间不得少于多久?', options: ['5 分钟', '10 分钟', '20 分钟', '60 分钟'], answer: 'C', explanation: '实施条例第六十二条:不得连续驾驶机动车超过 4 小时未停车休息或者停车休息时间少于 20 分钟。' },
33
+ { id: 'drv-24', category: '倒车', question: '下列哪个地点可以倒车?', options: ['铁路道口', '隧道中', '单行路上', '允许停车的路边空地'], answer: 'D', explanation: '实施条例第五十条:在铁路道口、交叉路口、单行路、桥梁、急弯、陡坡或者隧道中不得倒车。' },
34
+ { id: 'drv-25', category: '安全', question: '机动车行驶中,驾驶人和乘车人应当?', options: ['只有驾驶人系安全带', '只有前排系安全带', '按规定使用安全带', '短途可以不系'], answer: 'C', explanation: '道交法第五十一条:机动车行驶时,驾驶人、乘坐人员应当按规定使用安全带。' },
35
+ ]);
36
+ //# sourceMappingURL=driving-quiz-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driving-quiz-data.js","sourceRoot":"","sources":["../src/driving-quiz-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { QuizQuestion } from './quiz-types.js';
2
+ /**
3
+ * 「好无聊」趣味选择题。题面、选项与解析均为本仓库原创(MIT),
4
+ * 内容是公共常识类知识点,不来自任何第三方题库。
5
+ */
6
+ export declare const FUN_QUESTIONS: readonly QuizQuestion[];
7
+ //# sourceMappingURL=fun-quiz-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fun-quiz-data.d.ts","sourceRoot":"","sources":["../src/fun-quiz-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,YAAY,EAyC/C,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 「好无聊」趣味选择题。题面、选项与解析均为本仓库原创(MIT),
3
+ * 内容是公共常识类知识点,不来自任何第三方题库。
4
+ */
5
+ export const FUN_QUESTIONS = Object.freeze([
6
+ { id: 'fun-01', category: '天文', question: '北半球一年中白昼最长的节气是?', options: ['春分', '夏至', '秋分', '冬至'], answer: 'B', explanation: '夏至时太阳直射北回归线附近,北半球白昼最长。' },
7
+ { id: 'fun-02', category: '动物', question: '章鱼有几颗心脏?', options: ['1 颗', '2 颗', '3 颗', '4 颗'], answer: 'C', explanation: '章鱼有 1 颗体心脏和 2 颗鳃心脏,一共 3 颗。' },
8
+ { id: 'fun-03', category: '动物', question: '大熊猫抓竹子用的「伪拇指」本质上是什么?', options: ['腕部特化的籽骨', '第六根手指骨', '加厚的指甲', '一块软骨垫'], answer: 'A', explanation: '那是腕部桡侧籽骨增大形成的结构,并不是真正的手指。' },
9
+ { id: 'fun-04', category: '地理', question: '按「年降水量很少」的定义,世界上面积最大的沙漠是?', options: ['撒哈拉沙漠', '南极洲', '戈壁沙漠', '阿拉伯沙漠'], answer: 'B', explanation: '沙漠按降水量定义,南极洲极其干燥,面积也最大;撒哈拉是最大的热沙漠。' },
10
+ { id: 'fun-05', category: '天文', question: '太阳系中哪颗行星自转一圈比绕太阳公转一圈还要久?', options: ['金星', '火星', '木星', '水星'], answer: 'A', explanation: '金星自转约 243 个地球日,公转约 225 个地球日。' },
11
+ { id: 'fun-06', category: '化学', question: '金刚石和石墨都由哪种元素组成?', options: ['硅', '碳', '硼', '硫'], answer: 'B', explanation: '两者都是碳的同素异形体,只是原子排列方式不同。' },
12
+ { id: 'fun-07', category: '生物', question: '人体面积最大的器官是?', options: ['肝脏', '肺', '皮肤', '大肠'], answer: 'C', explanation: '成年人的皮肤面积大约 1.5–2 平方米,是最大的器官。' },
13
+ { id: 'fun-08', category: '数学', question: '0.999…(9 无限循环)和 1 相比?', options: ['比 1 小一点点', '等于 1', '比 1 大', '无法比较'], answer: 'B', explanation: '1/3 = 0.333…,两边乘以 3 就得到 0.999… = 1。' },
14
+ { id: 'fun-09', category: '物理', question: '真空中的光速大约是每秒多少公里?', options: ['3 万', '30 万', '300 万', '3000'], answer: 'B', explanation: '约 299,792 公里每秒,常记作 30 万公里每秒。' },
15
+ { id: 'fun-10', category: '生活', question: '微波炉加热食物,主要是让食物中的什么分子剧烈运动?', options: ['水分子', '盐分子', '氧分子', '糖分子'], answer: 'A', explanation: '微波让极性的水分子来回转动摩擦生热,所以很干的食物不容易热透。' },
16
+ { id: 'fun-11', category: '历史', question: '下面哪一项不属于中国古代「四大发明」?', options: ['造纸术', '印刷术', '火药', '算盘'], answer: 'D', explanation: '四大发明是造纸术、印刷术、火药和指南针。' },
17
+ { id: 'fun-12', category: '语言', question: '网络常用的「囧」字,本义是什么?', options: ['光明', '窘迫', '困倦', '圆形'], answer: 'A', explanation: '「囧」本义是窗户透光、明亮,后来因字形像表情才被用来表示窘迫。' },
18
+ { id: 'fun-13', category: '动物', question: '考拉的主要食物是?', options: ['竹子', '桉树叶', '昆虫', '水果'], answer: 'B', explanation: '考拉几乎只吃桉树叶,桉树叶营养少,所以考拉一天要睡很久。' },
19
+ { id: 'fun-14', category: '地理', question: '中国陆地面积最大的省级行政区是?', options: ['西藏', '内蒙古', '青海', '新疆'], answer: 'D', explanation: '新疆面积约 166 万平方公里,约占全国陆地面积的六分之一。' },
20
+ { id: 'fun-15', category: '天文', question: '月球绕地球公转一周(恒星月)大约需要多久?', options: ['7 天', '15 天', '27.3 天', '35 天'], answer: 'C', explanation: '恒星月约 27.3 天;从满月到下一次满月(朔望月)约 29.5 天。' },
21
+ { id: 'fun-16', category: '动物', question: '蜜蜂跳「摇摆舞」主要是在告诉同伴什么?', options: ['自己饿了', '蜜源的方向和距离', '天气要变了', '蜂后在哪里'], answer: 'B', explanation: '摇摆的角度对应蜜源相对太阳的方向,持续时间对应距离。' },
22
+ { id: 'fun-17', category: '物理', question: '下列介质中,声音传播最快的是?', options: ['空气', '水', '钢铁', '真空'], answer: 'C', explanation: '声音在固体中通常最快,钢铁中约 5000 米每秒;真空中无法传播。' },
23
+ { id: 'fun-18', category: '生活', question: '家用冰箱冷藏室比较推荐的温度大约是?', options: ['-18℃', '4℃ 左右', '15℃', '25℃'], answer: 'B', explanation: '冷藏一般保持在 0–5℃,-18℃ 是冷冻室的常用温度。' },
24
+ { id: 'fun-19', category: '动物', question: '现存体型最大的动物是?', options: ['非洲象', '蓝鲸', '鲸鲨', '长颈鹿'], answer: 'B', explanation: '蓝鲸体长可超过 30 米,是已知体型最大的动物。' },
25
+ { id: 'fun-20', category: '数学', question: '正六边形的内角和是多少度?', options: ['540°', '720°', '900°', '1080°'], answer: 'B', explanation: 'n 边形内角和为 (n−2)×180°,六边形就是 720°。' },
26
+ { id: 'fun-21', category: '化学', question: '地球大气中含量最多的气体是?', options: ['氧气', '二氧化碳', '氮气', '氩气'], answer: 'C', explanation: '氮气约占干燥空气体积的 78%,氧气约 21%。' },
27
+ { id: 'fun-22', category: '生物', question: '人类正常体细胞中有多少条染色体?', options: ['23 条', '44 条', '46 条', '48 条'], answer: 'C', explanation: '23 对共 46 条,其中 1 对是性染色体。' },
28
+ { id: 'fun-23', category: '地理', question: '世界最高峰珠穆朗玛峰的最新测定海拔约是多少米?', options: ['8611', '8848.86', '8516', '8201'], answer: 'B', explanation: '2020 年中尼两国共同宣布珠峰雪面高程为 8848.86 米。' },
29
+ { id: 'fun-24', category: '冷知识', question: '从植物学分类看,香蕉属于哪种果实?', options: ['浆果', '坚果', '核果', '荚果'], answer: 'A', explanation: '香蕉由单个子房发育而来、果皮肉质,植物学上算浆果。' },
30
+ { id: 'fun-25', category: '冷知识', question: '草莓表面那些小「籽」其实是什么?', options: ['真正的果实(瘦果)', '花粉', '退化的叶子', '刺'], answer: 'A', explanation: '每一粒都是一个瘦果,我们吃的红色部分是膨大的花托。' },
31
+ { id: 'fun-26', category: '动物', question: '火烈鸟的粉红色羽毛主要来自?', options: ['天生基因', '食物中的类胡萝卜素', '阳光照射', '泥浆染色'], answer: 'B', explanation: '它们吃的藻类和小虾含类胡萝卜素,色素沉积在羽毛里。' },
32
+ { id: 'fun-27', category: '物理', question: '主虹(常见的那道彩虹)最外圈是什么颜色?', options: ['紫色', '蓝色', '绿色', '红色'], answer: 'D', explanation: '主虹外红内紫;副虹的颜色顺序正好相反。' },
33
+ { id: 'fun-28', category: '常识', question: '在标准大气压下,纯水的沸点是?', options: ['90℃', '100℃', '110℃', '120℃'], answer: 'B', explanation: '海拔越高气压越低,沸点也会随之降低。' },
34
+ { id: 'fun-29', category: '体育', question: '足球比赛常规时间里,每个半场多少分钟?', options: ['30 分钟', '40 分钟', '45 分钟', '50 分钟'], answer: 'C', explanation: '常规时间两个半场各 45 分钟,另加补时。' },
35
+ { id: 'fun-30', category: '计算机', question: '1 KiB 等于多少字节?', options: ['1000', '1024', '1048', '512'], answer: 'B', explanation: 'KiB 是二进制前缀,等于 2 的 10 次方字节;kB 则通常指 1000 字节。' },
36
+ { id: 'fun-31', category: '计算机', question: '网页打不开时常见的 HTTP 404 表示什么?', options: ['服务器内部错误', '没有权限', '请求的资源不存在', '请求太频繁'], answer: 'C', explanation: '404 Not Found;500 是服务器内部错误,403 是禁止访问,429 是请求过多。' },
37
+ { id: 'fun-32', category: '动物', question: '野生企鹅主要分布在?', options: ['北极圈', '南半球', '赤道雨林', '北美五大湖'], answer: 'B', explanation: '企鹅几乎都生活在南半球,北极没有野生企鹅。' },
38
+ { id: 'fun-33', category: '生物', question: '植物光合作用会释放哪种气体?', options: ['二氧化碳', '氧气', '氮气', '氢气'], answer: 'B', explanation: '光合作用吸收二氧化碳和水,产生有机物并释放氧气。' },
39
+ { id: 'fun-34', category: '天文', question: '离太阳最近的行星是?', options: ['金星', '地球', '水星', '火星'], answer: 'C', explanation: '水星离太阳最近,但最热的行星是有浓厚大气的金星。' },
40
+ { id: 'fun-35', category: '冷知识', question: '蜗牛有牙齿吗?', options: ['没有', '有,长在齿舌上,数量很多', '只有一颗', '只有幼年有'], answer: 'B', explanation: '蜗牛的齿舌上排列着成千上万颗细小的角质齿,用来刮食。' },
41
+ { id: 'fun-36', category: '语言', question: '与「一石二鸟」意思最接近的成语是?', options: ['一箭双雕', '一叶障目', '一鸣惊人', '一言九鼎'], answer: 'A', explanation: '都比喻做一件事得到两种收获。' },
42
+ { id: 'fun-37', category: '数学', question: '圆周率 π 小数点后前四位是?', options: ['1415', '1416', '1592', '1428'], answer: 'A', explanation: 'π ≈ 3.14159…,前四位小数是 1415。' },
43
+ { id: 'fun-38', category: '地理', question: '赤道没有经过下列哪个大洲?', options: ['非洲', '南美洲', '亚洲', '欧洲'], answer: 'D', explanation: '赤道穿过非洲、南美洲和亚洲(印度尼西亚)等,不经过欧洲。' },
44
+ { id: 'fun-39', category: '生活', question: '炒菜时油锅起火,正确的第一反应是?', options: ['立刻泼水', '盖上锅盖并关火', '用嘴吹灭', '端着锅跑出去'], answer: 'B', explanation: '盖锅盖隔绝空气、关火断热源;泼水会让热油飞溅,火势更大。' },
45
+ { id: 'fun-40', category: '动物', question: '猫的胡须主要有什么作用?', options: ['纯粹装饰', '感知周围环境和空间宽度', '帮助吃饭', '调节体温'], answer: 'B', explanation: '胡须根部神经丰富,能感知气流和障碍,帮猫判断能否钻过缝隙。' },
46
+ ]);
47
+ //# sourceMappingURL=fun-quiz-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fun-quiz-data.js","sourceRoot":"","sources":["../src/fun-quiz-data.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { BOOK_ANSWERS } from './book-data.js';
2
+ export { BOOK_USAGE, MAX_QUESTION_LENGTH, calendarDay, normalizeQuestion, pickBookAnswer, replyBook, type BookPickInput } from './book.js';
3
+ export { DEFAULT_ANSWERS_CONFIG, answersConfig, resolveAnswersConfig, type AnswersConfig } from './config.js';
4
+ export { DRIVING_QUESTIONS } from './driving-quiz-data.js';
5
+ export { FUN_QUESTIONS } from './fun-quiz-data.js';
6
+ export { MAX_PENDING_QUIZZES, QuizService, formatJudgement, formatQuestion, parseQuizLetter, pickQuestion, quizKey, type PendingQuiz, type QuizConversationInput, type QuizJudgement, type QuizKind, } from './quiz.js';
7
+ export { QUIZ_LETTERS, type QuizLetter, type QuizQuestion } from './quiz-types.js';
8
+ export { quizServiceToken } from './runtime.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3I,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}