{"_id":"@rookiestar/eng-lang-tutor","_rev":"38-afb2e81d5bad304aab5920973c33323d","name":"@rookiestar/eng-lang-tutor","dist-tags":{"latest":"1.2.8"},"versions":{"1.0.1":{"name":"@rookiestar/eng-lang-tutor","version":"1.0.1","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.0.1","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"dist":{"shasum":"6cb03d37b302b8e43787f7565d7a78782ce42f13","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.0.1.tgz","fileCount":61,"integrity":"sha512-kn30vddV51KJjEQ63qEXnolKDtE8j2gXQ4GGXoVOgXACAqQXFHNo7N/8cGfGqH2UoZ7HzdXJFUQPsft1vWXSwQ==","signatures":[{"sig":"MEUCIHR0O43tGB1x0MZ/nsxhQ0tFudxMREbKUv7XUDKBYZksAiEAxtHlZsMy1BsrpN2CCZAd4Zx9Eiv+r3UIeOPpFirAJTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390087},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"a2ff8b8845357ca5378483d9b817dd7d88e7ec4f","scripts":{"postinstall":"python3 -m pip install -r requirements.txt --quiet"},"_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.6.2","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.0.1_1772122716496_0.9053971893946511","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.2","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.2.2","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"bin":{"eng-lang-tutor-setup":"scripts/setup.py"},"dist":{"shasum":"0f10236d78dd61b30f43d6a3b1c8b126e79daba2","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.2.tgz","fileCount":62,"integrity":"sha512-JvxAp1HrcgcdX+ej8QQGUBzCQnyR+h6w0Uz/x3bZ+HnsbR0Xxl17iZWaI/yMCEivcv25a7CGrZ5vb9tJMs3T8Q==","signatures":[{"sig":"MEUCIQDtfpXDI2RaTnMemve/RKaiSCsAAoiSCNgvBlJRCjrTaQIgAxmwVDTVfSMrnCSt6Ykw+E8GiRBcBTfvLqkCt822YwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":395839},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"351d5ed0f5a405539197d08c6066a4783d11b8e5","_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.6.2","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.2.2_1772124063790_0.5557657732762509","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.4","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.2.4","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"bin":{"eng-lang-tutor-setup":"scripts/setup.py"},"dist":{"shasum":"7813f860d200de640665f4e50f2d4d4ceca17d8b","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.4.tgz","fileCount":65,"integrity":"sha512-dhTbLtNJqXQAhGUkZrZENVCw5nXV/Vvfm/spbilrWDV9tS+7xiFtSIZbmcqRZzT7GOAUeCPFt8ST3FVp4vlbjw==","signatures":[{"sig":"MEUCIEJPeeRGQ/R5R86CLjhu6kBC07AQ6wUEskp+rLw/WXLDAiEAneNkXucCy2rRxGfmUI4egtR3flGrKrNtmVXFFUNjeUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400863},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"c4463f7db79c627325628dd8817c2fcdf9f89028","_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.6.2","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.2.4_1772146413229_0.5743884479093377","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.5","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.2.5","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"bin":{"eng-lang-tutor-setup":"scripts/setup.py"},"dist":{"shasum":"000ea58c94d53079bbbd48e9c975c1fb5b1a1fd4","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.5.tgz","fileCount":97,"integrity":"sha512-AVgtH7KHp10N/bj9AgyJpXSGYOwb7b8iBu7T2PKNuvSrlze3C4vGlQ5uKHgzrfqVknFhvdLRceziGWtq8K4abA==","signatures":[{"sig":"MEUCIBuXMD7eRjArQhqSo/rajMnTriPxHkGWJrCugicXz+J5AiEAgGQKxcCS7Az7d8rEuuVVkUCasPL6JkwSzR8Q/kdw76Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":623435},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"9e6725527c3db3e9aa215f42a6b7e67f6dbbec17","_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.6.2","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.2.5_1772152720760_0.4539386776766623","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.6","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.2.6","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"dist":{"shasum":"1ad20b2d4a197228aa53dfc5b795d49196c561f1","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.6.tgz","fileCount":62,"integrity":"sha512-qDIaNm7tsnA8pLO3j9+CsZwmDFGf9KngqYP8EKM++ss4y5l2ffLIAGtfPuhV6+tG2A1h35a3P+yiGKj56Un4ZA==","signatures":[{"sig":"MEUCIFOR1M5sArcCEj7WnH7sUAlGep9CFaP1dbJ/cQep5+Y6AiEAqi6tjzgfMb5VgO5knopTRLlcoV1dCsyAyEkyJ55qpdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410795},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"ef71a4b01b9b6a21fef74e43284a608e9b850a5e","scripts":{"postinstall":"python3 -m pip install -r requirements.txt --quiet"},"_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.7.0","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"25.4.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.2.6_1772170451166_0.07800623651193783","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.7","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","_id":"@rookiestar/eng-lang-tutor@1.2.7","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"dist":{"shasum":"10b5375599c0d0ecf246555d817b99e173dec67c","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.7.tgz","fileCount":62,"integrity":"sha512-gk9xXhBdFB6vDVqkjZsjU/HXyKgLWJomO889FkeaYPnGLSd1Gb1LTCozal7viGezIW6eWJTR6VKTM6RJagoLcA==","signatures":[{"sig":"MEQCIHN++4We5Kf8nsqh1zuvHObuvSum7qnQDNbQur8TtjcCAiA3kA3eG0dbn+OfIAomR+wN2vGQ6xJRR7+fUR+rUkK8+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410954},"main":"scripts/cli/cli.py","engines":{"node":">=14.0.0"},"gitHead":"7b16845f573f992492656f2df123954b09e17f0f","scripts":{"postinstall":"echo '\\n✅ eng-lang-tutor installed successfully!\\n\\n📋 Next step: Install Python dependencies\\n   eng-lang-tutor-setup --venv\\n\\n💡 This creates a virtual environment at ~/.venvs/eng-lang-tutor\\n'"},"_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"repository":{"url":"git+https://github.com/rookiestar/Skills.git","type":"git","directory":"eng-lang-tutor"},"_npmVersion":"11.7.0","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","directories":{},"_nodeVersion":"25.4.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eng-lang-tutor_1.2.7_1772172672189_0.9468829426225984","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"@rookiestar/eng-lang-tutor","version":"1.2.8","description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","main":"scripts/cli/cli.py","bin":{"eng-lang-tutor-setup":"scripts/setup.py"},"keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"author":{"name":"RookieStar"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/rookiestar/Skills.git","directory":"eng-lang-tutor"},"bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","engines":{"node":">=14.0.0"},"gitHead":"5e4cfdd8a5bede4d7d0a481e40b9cf00cb6c68fe","_id":"@rookiestar/eng-lang-tutor@1.2.8","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-vybXXHv2mtqnVyyCVkZcjg+TV9C7xnXTtCwXGga87S00OyGxVUw6J0OosIOCNiOo8RQlME/1a53NA1rtI3Ra8w==","shasum":"384aab5ddfd305e1059feb1f4a74c017fb666e2e","tarball":"https://registry.npmjs.org/@rookiestar/eng-lang-tutor/-/eng-lang-tutor-1.2.8.tgz","fileCount":97,"unpackedSize":633589,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEyOTG6GHmRJEiY48EM8DXP8KhttBneeNw5R6J/BdhSyAiAsjhDa2xsyf429SG/rEn+udkBZbwhX3H1RqD+ZcLG/Qg=="}]},"_npmUser":{"name":"rookiestar","email":"rookiestar@gmail.com"},"directories":{},"maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eng-lang-tutor_1.2.8_1772234153029_0.36363845529105365"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-26T16:18:36.367Z","modified":"2026-02-27T23:15:53.567Z","1.0.0":"2026-02-22T00:25:09.884Z","1.0.2":"2026-02-22T00:47:25.519Z","1.0.3":"2026-02-22T08:44:09.574Z","1.0.4":"2026-02-22T14:19:39.053Z","1.0.5":"2026-02-22T17:11:19.827Z","1.0.6":"2026-02-22T17:46:24.089Z","1.0.8":"2026-02-22T18:18:59.550Z","1.0.9":"2026-02-22T18:35:39.611Z","1.0.10":"2026-02-22T18:52:52.023Z","1.0.11":"2026-02-22T19:07:08.831Z","1.0.12":"2026-02-22T19:14:49.275Z","1.0.13":"2026-02-22T19:24:05.780Z","1.0.14":"2026-02-22T23:48:37.509Z","1.0.15":"2026-02-23T02:57:48.579Z","1.0.16":"2026-02-23T04:50:58.504Z","1.0.17":"2026-02-23T04:52:28.374Z","1.0.18":"2026-02-23T04:53:01.560Z","1.0.19":"2026-02-23T04:53:33.498Z","1.1.0":"2026-02-23T06:48:04.818Z","1.1.1":"2026-02-23T06:54:07.459Z","1.1.2":"2026-02-23T08:55:22.719Z","1.1.3":"2026-02-23T09:52:12.762Z","1.1.4":"2026-02-23T10:03:59.156Z","1.1.5":"2026-02-23T10:06:28.077Z","1.1.6":"2026-02-23T13:45:43.486Z","1.1.7":"2026-02-23T14:52:36.705Z","1.1.8":"2026-02-23T15:05:23.077Z","1.1.9":"2026-02-23T15:43:06.793Z","1.2.0":"2026-02-23T16:53:11.001Z","1.2.1":"2026-02-23T16:54:41.076Z","1.0.1":"2026-02-26T16:18:36.703Z","1.2.2":"2026-02-26T16:41:03.943Z","1.2.4":"2026-02-26T22:53:33.415Z","1.2.5":"2026-02-27T00:38:40.974Z","1.2.6":"2026-02-27T05:34:11.318Z","1.2.7":"2026-02-27T06:11:12.378Z","1.2.8":"2026-02-27T23:15:53.285Z"},"bugs":{"url":"https://github.com/rookiestar/Skills/issues"},"author":{"name":"RookieStar"},"license":"MIT","homepage":"https://github.com/rookiestar/Skills/tree/main/eng-lang-tutor#readme","keywords":["english","learning","openclaw","skill","tutor","cefr","american-english","language-learning","gamification"],"repository":{"type":"git","url":"git+https://github.com/rookiestar/Skills.git","directory":"eng-lang-tutor"},"description":"地道美式英语导师 - OpenClaw Skill for learning authentic American English","maintainers":[{"name":"rookiestar","email":"rookiestar@gmail.com"}],"readme":"# eng-lang-tutor\n\n**地道美式英语导师** - 一个用于学习地道美式英语表达的 OpenClaw Skill。\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## 功能特性\n\n- 📚 **每日知识点** - 地道美式表达，包含场景语境、可替换说法和中式英语陷阱\n- 🔊 **语音版知识点** - 支持 Edge-TTS 语音合成，免费高质量，可调节语速\n- 📝 **测验系统** - 4种题型：选择题、填空题、对话补全、中式英语修正\n- 🎮 **多邻国风格游戏化** - XP经验值、等级、连胜、徽章、宝石\n- ⏰ **可自定义推送时间** - 通过 cron 设置您偏好的推送时间\n- 🌐 **双语支持** - 命令同时支持中英文\n\n## 快速开始\n\n### 前置条件\n\n- 服务器上已安装 OpenClaw Gateway\n- Python 3.8+\n- ffmpeg（用于音频合成）\n- Discord Bot（或其他 IM 通道）\n\n**系统依赖：**\n\n```bash\n# macOS\nbrew install ffmpeg python3\n\n# Ubuntu/Debian\nsudo apt-get install ffmpeg python3 python3-venv\n```\n\n### 安装步骤\n\n**方式一：npm 安装（推荐）**\n\n```bash\n# 1. Install the npm package\nnpm install -g @rookiestar/eng-lang-tutor\n\n# 2. Install Python dependencies (choose one method)\n\n# Option A: Using virtual environment (recommended)\neng-lang-tutor-setup --venv\n# Then activate before using: source ~/.venvs/eng-lang-tutor/bin/activate\n\n# Option B: Install to user directory\neng-lang-tutor-setup --user\n\n# Option C: Check if dependencies are already installed\neng-lang-tutor-setup --check\n```\n\n**方式二：从源码安装**\n\n```bash\ncd ~/.openclaw/skills/\ngit clone --depth 1 --filter=blob:none --sparse https://github.com/rookiestar/Skills.git temp-skills\ncd temp-skills\ngit sparse-checkout set eng-lang-tutor\nmv eng-lang-tutor ../eng-lang-tutor\ncd .. && rm -rf temp-skills\npip install -r eng-lang-tutor/requirements.txt\n```\n\n**手动安装依赖（如需要）：**\n\n```bash\n# 使用 setup 脚本（推荐）\neng-lang-tutor-setup --venv ~/.venvs/eng-lang-tutor\n\n# 或手动创建虚拟环境\npython3 -m venv ~/.venvs/eng-lang-tutor\nsource ~/.venvs/eng-lang-tutor/bin/activate  # Linux/macOS\npip install -r $(npm root -g)/@rookiestar/eng-lang-tutor/requirements.txt\n```\n\n**验证安装：**\n\n```bash\nopenclaw skills list\nopenclaw skills info eng-lang-tutor\n```\n\n### 卸载\n\n```bash\n# 卸载 npm 包并清除所有数据（包括状态和媒体文件）\nnpm uninstall -g @rookiestar/eng-lang-tutor && rm -rf ~/.openclaw/state/eng-lang-tutor ~/.openclaw/media/eng-lang-tutor\n```\n\n**如需保留学习数据，仅卸载软件：**\n\n```bash\nnpm uninstall -g @rookiestar/eng-lang-tutor\n```\n\n> 注意：`~/.openclaw/state/eng-lang-tutor/` 存储学习进度、XP、连胜等数据；`~/.openclaw/media/eng-lang-tutor/` 存储生成的音频文件。\n\n**重启 Gateway：**\n\n```bash\nopenclaw gateway restart\n```\n\n**配置渠道：**\n\n**Discord 配置：**\n```bash\nopenclaw config set discord.token YOUR_BOT_TOKEN\nopenclaw config set discord.guildId YOUR_SERVER_ID\n```\n\n4. **完成配对：**\n\n首次向 Bot 发送消息时，您会收到一个配对码。批准它：\n\n```bash\nopenclaw pairing approve discord YOUR_PAIRING_CODE\n```\n\n### 首次使用\n\n首次与 Bot 交互时，它会引导您完成 7 步引导流程：\n\n1. 选择您的 CEFR 等级（A1-C2）\n2. 选择您的兴趣主题\n3. 选择导师风格（幽默/严谨/随意/专业）\n4. 设置口语/书面语比例\n5. 配置推送时间（知识点和测验时间）\n6. **语音教学配置** - 选择是否启用语音版知识点\n   - 如启用，选择语速（0.5-1.7，默认 0.9）\n   - 默认使用 Edge-TTS（免费，无需配置）\n   - 如需使用讯飞，请先在服务器上设置环境变量：\n     ```bash\n     export TTS_PROVIDER=xunfei\n     export XUNFEI_APPID=your_appid\n     export XUNFEI_API_KEY=your_api_key\n     export XUNFEI_API_SECRET=your_api_secret\n     ```\n7. 确认您的设置并创建定时任务\n\n## TTS 语音配置\n\n本 Skill 默认使用 **Edge-TTS**（Microsoft Edge 语音合成服务），完全免费且无需 API 密钥。\n\n### 支持的 TTS Provider\n\n| Provider | 说明 | 配置方式 |\n|----------|------|----------|\n| **edge-tts** (默认) | Microsoft Edge TTS，免费高质量 | 无需配置 |\n| xunfei | 讯飞 TTS，国内稳定 | 需设置环境变量 |\n\n切换 Provider：\n```bash\n# 使用 Edge-TTS（默认）\nexport TTS_PROVIDER=edge-tts\n\n# 使用讯飞（需先配置密钥）\nexport TTS_PROVIDER=xunfei\nexport XUNFEI_APPID=xxx\nexport XUNFEI_API_KEY=xxx\nexport XUNFEI_API_SECRET=xxx\n```\n\n### 可用音色\n\n**Edge-TTS (en-US)：**\n\n| 角色 | 默认音色 | 说明 |\n|------|----------|------|\n| 旁白 (Narrator) | JennyNeural | 女声，友好亲切 |\n| 对话 A | EricNeural | 男声，专业理性 |\n| 对话 B | JennyNeural | 女声，友好亲切 |\n\n**XunFei (美式英语)：**\n\n| 角色 | 默认音色 | 说明 |\n|------|----------|------|\n| 旁白 (Narrator) | catherine | 女声，自然流畅 |\n| 对话 A | henry | 男声，沉稳专业 |\n| 对话 B | catherine | 女声，自然流畅 |\n\n### 语速选项\n\n在引导流程中可选择语速：\n\n| 语速 | 值 | 适用场景 |\n|------|-----|----------|\n| 非常慢 | 0.5 | 初学者跟读 |\n| 慢速 | 0.7 | 学习发音 |\n| **正常（推荐）** | **0.9** | 日常学习 |\n| 快速 | 1.3 | 听力挑战 |\n| 非常快 | 1.7 | 进阶训练 |\n\n## 🛠️ 飞书语音气泡魔改指南\n\n> 通过修改 OpenClaw 飞书插件，可使 `.opus` 音频文件以语音气泡形式展示，提升用户体验。\n\n**文件位置：** `/home/linuxbrew/.linuxbrew/lib/node_modules/openclaw/extensions/feishu/src/media.ts`\n\n### 📍 第一处修改：扩充类型定义 (约第 276 行)\n\n```typescript\n// 【修改前】\nmsgType?: \"file\" | \"media\";\n\n// 【修改后】\nmsgType?: \"file\" | \"media\" | \"audio\";\n```\n\n### 📍 第二处修改：重构路由逻辑 (约第 375 行)\n\n```typescript\n// 【修改前】\n// Feishu requires msg_type \"media\" for audio/video, \"file\" for documents\nconst isMedia = fileType === \"mp4\" || fileType === \"opus\";\nreturn sendFileFeishu({\n  cfg,\n  to,\n  fileKey,\n  msgType: isMedia ? \"media\" : \"file\",\n  replyToMessageId,\n  accountId,\n});\n\n// 【修改后】\n// 精细化路由：mp4 走 media (视频), opus 走 audio (语音气泡), 其余走 file\nlet msgType: \"file\" | \"media\" | \"audio\" = \"file\";\nif (fileType === \"mp4\") {\n  msgType = \"media\";\n} else if (fileType === \"opus\") {\n  msgType = \"audio\";\n}\nreturn sendFileFeishu({\n  cfg,\n  to,\n  fileKey,\n  msgType,\n  replyToMessageId,\n  accountId,\n});\n```\n\n**效果：**\n- `.opus` 文件 → 语音气泡形式播放\n- 其他文件 → 普通文件附件形式\n\n## 命令列表\n\n| 命令 | 别名 | 描述 |\n|---------|---------|-------------|\n| `start` | `开始`, `初始化` | 启动引导配置 |\n| `keypoint` | `知识点`, `today` | 查看今日知识点 |\n| `keypoint history` | `知识点 历史` | 查看历史知识点 |\n| `quiz` | `测验`, `test` | 参加每日测验 |\n| `stats` | `进度`, `level` | 查看学习进度 |\n| `config` | `设置` | 查看设置 |\n| `errors` | `错题本` | 查看错题本 |\n| `help` | `帮助` | 显示命令列表 |\n\n## 推送时间配置\n\n### Crontab 设置\n\nSkill 的定时推送依赖 crontab。在 onboarding 流程的 Step 7 会自动创建 cron 任务。\n\n如需手动配置或修改：\n\n```bash\n# 编辑 crontab\ncrontab -e\n\n# 添加定时任务（示例：北京时间 06:45 推送知识点，22:45 推送测验）\nCRON_TZ=Asia/Shanghai\n\n# 知识点推送\n45 6 * * * openclaw system event --text \"Use eng-lang-tutor skill. Push today's keypoint.\" --mode now\n\n# 测验推送\n45 22 * * * openclaw system event --text \"Use eng-lang-tutor skill. Push today's quiz invitation.\" --mode now\n```\n\n### 修改推送时间\n\n如需修改推送时间：\n\n1. **在 IM 中向 Bot 发送命令**更新偏好设置：\n\n```\nset schedule keypoint 7:00    # 设置知识点推送时间为早上 7:00\nset schedule quiz 21:00       # 设置测验推送时间为晚上 21:00\n```\n\n2. **同步更新 crontab**（修改对应的时间）：\n\n```bash\ncrontab -e\n# 将 45 6 改为 0 7，将 45 22 改为 0 21\n```\n\n**注意：** 测验时间必须晚于知识点时间。时间格式为 24 小时制（HH:MM）。\n\n## 游戏化系统\n\n### XP 与等级\n\n本系统包含两个独立的等级体系：\n- **能力等级 (CEFR)**：A1-C2，决定内容难度（语言能力水平）\n- **活跃等级 (Level)**：1-20，衡量使用深度（使用进程）\n\n| 等级范围 | 所需 XP | 阶段 |\n|-------------|-------------|-------|\n| 1-5 | 0-350 | 启程者 (Starter) |\n| 6-10 | 550-2000 | 行路人 (Traveler) |\n| 11-15 | 2600-6000 | 探索者 (Explorer) |\n| 16-20 | 7200-15000 | 开拓者 (Pioneer) |\n\n### 徽章\n\n| 徽章 | 获取条件 | 宝石奖励 |\n|-------|-------------|------|\n| First Steps | 完成首次测验 | 10 |\n| Week Warrior | 7天连胜 | 25 |\n| Month Master | 30天连胜 | 100 |\n| Perfect 10 | 10次满分测验 | 50 |\n| Vocab Hunter | 学习100个表达 | 75 |\n| Error Slayer | 清除30个错题 | 30 |\n\n## 项目结构\n\n```\neng-lang-tutor/\n├── SKILL.md                    # Skill 文档\n├── scripts/\n│   ├── __init__.py             # 包入口\n│   ├── core/                   # 核心模块\n│   │   ├── state_manager.py    # 状态持久化与事件日志\n│   │   ├── scorer.py           # 答案评估与 XP 计算\n│   │   ├── gamification.py     # 连胜/等级/徽章逻辑\n│   │   ├── constants.py        # 共享常量（等级阈值）\n│   │   └── error_notebook.py   # 错题本管理\n│   ├── cli/                    # 命令行模块\n│   │   ├── cli.py              # CLI 入口点\n│   │   └── command_parser.py   # 用户命令解析\n│   ├── setup.py                # 依赖安装脚本 (npm bin)\n│   ├── scheduling/             # 调度模块\n│   │   └── cron_push.py        # 定时内容推送\n│   ├── utils/                  # 工具模块\n│   │   ├── dedup.py            # 14天去重逻辑\n│   │   └── helpers.py          # 工具函数\n│   └── audio/                  # 音频模块\n│       ├── tts/                # TTS 语音合成\n│       │   ├── base.py         # TTS 抽象基类\n│       │   ├── manager.py      # TTS 管理器\n│       │   └── providers/      # TTS 提供者\n│       │       ├── edge.py     # Edge-TTS (默认)\n│       │       └── xunfei.py   # 讯飞 TTS\n│       ├── composer.py         # 音频合成\n│       ├── converter.py        # 格式转换\n│       ├── feishu_voice.py     # 飞书语音发送\n│       └── utils.py            # 音频工具函数\n├── templates/\n│   ├── state_schema.json       # 状态 JSON Schema\n│   ├── keypoint_schema.json    # 知识点 JSON Schema\n│   ├── quiz_schema.json        # 测验 JSON Schema\n│   ├── prompt_templates.md     # LLM Prompt 模板索引\n│   └── prompts/                # 拆分的 Prompt 模板\n│       ├── keypoint_generation.md\n│       ├── quiz_generation.md\n│       ├── display_guide.md\n│       ├── initialization.md\n│       ├── responses.md\n│       ├── shared_enums.md\n│       └── output_rules.md\n├── references/\n│   └── resources.md            # 主题化学习资源\n├── examples/                   # 示例文件（按 CEFR 级别）\n│   ├── sample_keypoint_a1.json # A1 入门级知识点\n│   ├── sample_keypoint_a2.json # A2 初级知识点\n│   ├── sample_keypoint_b1.json # B1 中级知识点\n│   ├── sample_keypoint_b2.json # B2 中高级知识点\n│   ├── sample_keypoint_c1.json # C1 高级知识点\n│   ├── sample_keypoint_c2.json # C2 精通级知识点\n│   ├── sample_quiz_a1.json     # A1 测验\n│   ├── sample_quiz_a2.json     # A2 测验\n│   ├── sample_quiz_b1.json     # B1 测验\n│   ├── sample_quiz_b2.json     # B2 测验\n│   ├── sample_quiz_c1.json     # C1 测验\n│   └── sample_quiz_c2.json     # C2 测验\n└── docs/\n    └── OPENCLAW_DEPLOYMENT.md  # 部署文档\n```\n\n**数据存储位置：** `~/.openclaw/state/eng-lang-tutor/`\n\n可通过环境变量 `OPENCLAW_STATE_DIR` 自定义数据目录。\n\n## 文档\n\n- [SKILL.md](SKILL.md) - 完整 Skill 文档\n- [OpenClaw 部署指南](docs/OPENCLAW_DEPLOYMENT.md) - 服务器部署\n\n## 开发\n\n### 本地调试\n\n```bash\npython3 scripts/command_parser.py --demo\npython3 scripts/cron_push.py --task status\n```\n\n## 服务器迁移\n\n**迁移学习数据：**\n\n```bash\n# 在源服务器上打包数据\ntar -czvf eng-lang-tutor-data.tar.gz -C ~/.openclaw/state eng-lang-tutor\n\n# 传输到新服务器\nscp eng-lang-tutor-data.tar.gz user@new-server:~/\n\n# 在目标服务器上解压\nmkdir -p ~/.openclaw/state\ntar -xzvf ~/eng-lang-tutor-data.tar.gz -C ~/.openclaw/state\n```\n\n**重新安装 skill：**\n\n```bash\nnpm install -g @rookiestar/eng-lang-tutor\n```\n\n详细迁移指南请参见 [docs/OPENCLAW_DEPLOYMENT.md](docs/OPENCLAW_DEPLOYMENT.md)。\n\n## 许可证\n\nMIT License - 详见 [LICENSE](LICENSE)。\n\n## 贡献\n\n欢迎贡献！请随时提交 Pull Request。\n\n## 致谢\n\n- [awesome-language-learning](https://github.com/Vuizur/awesome-language-learning) - 资源灵感来源\n- [Duolingo](https://www.duolingo.com) - 游戏化模型参考\n","readmeFilename":"README.md"}