tuzi-post-to-wechat by tuziapi/tuzi-skills
npx skills add https://github.com/tuziapi/tuzi-skills --skill tuzi-post-to-wechat匹配用户语言:使用用户使用的语言进行回复。如果用户使用中文,则用中文回复;如果用户使用英文,则用英文回复。
代理执行:将本 SKILL.md 所在的目录确定为 SKILL_DIR,然后使用 ${SKILL_DIR}/scripts/<name>.ts。
| 脚本 | 用途 |
|---|---|
scripts/wechat-browser.ts | 图文消息发布 |
scripts/wechat-article.ts | 通过浏览器发布文章 |
scripts/wechat-api.ts | 通过 API 发布文章 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
scripts/md-to-wechat.ts | Markdown → 微信公众号就绪的 HTML(含图片占位符) |
scripts/check-permissions.ts | 验证环境和权限 |
使用 Bash 检查 EXTEND.md 是否存在(优先级顺序):
# 首先检查项目级别
test -f .tuzi-skills/tuzi-post-to-wechat/EXTEND.md && echo "project"
# 然后检查用户级别(跨平台:$HOME 在 macOS/Linux/WSL 上有效)
test -f "$HOME/.tuzi-skills/tuzi-post-to-wechat/EXTEND.md" && echo "user"
┌────────────────────────────────────────────────────────┬───────────────────┐ │ 路径 │ 位置 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ .tuzi-skills/tuzi-post-to-wechat/EXTEND.md │ 项目目录 │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.tuzi-skills/tuzi-post-to-wechat/EXTEND.md │ 用户主目录 │ └────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ 结果 │ 操作 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 找到 │ 读取、解析、应用设置 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 未找到 │ 运行首次设置(references/config/first-time-setup.md)→ 保存 → 继续 │ └───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md 支持:默认主题 | 默认颜色 | 默认发布方式(api/browser)| 默认作者 | 默认开启评论开关 | 默认仅粉丝可评论开关 | Chrome 配置文件路径
最低支持键(不区分大小写,接受 1/0 或 true/false):
| 键 | 默认值 | 映射 |
|---|---|---|
default_author | 空 | 当 CLI/前置元数据未提供 author 时的后备值 |
need_open_comment | 1 | draft/add 请求中的 articles[].need_open_comment |
only_fans_can_comment | 0 | draft/add 请求中的 articles[].only_fans_can_comment |
推荐的 EXTEND.md 示例:
default_theme: default
default_color: blue
default_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile
主题选项:default, grace, simple, modern
颜色预设:blue, green, vermilion, yellow, purple, sky, rose, olive, black, gray, pink, red, orange(或十六进制值)
值优先级:
首次使用前,建议运行环境检查。用户可以选择跳过。
npx -y bun ${SKILL_DIR}/scripts/check-permissions.ts
检查项:Chrome、配置文件隔离、Bun、辅助功能、剪贴板、粘贴按键、API 凭证、Chrome 冲突。
如果任何检查失败,根据项目提供修复指导:
| 检查项 | 修复方法 |
|---|---|
| Chrome | 安装 Chrome 或设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 配置文件目录 | 确保 ~/.local/share/wechat-browser-profile 可写 |
| Bun 运行时 | `curl -fsSL https://bun.sh/install |
| 辅助功能(macOS) | 系统设置 → 隐私与安全性 → 辅助功能 → 启用终端应用 |
| 剪贴板复制 | 确保 Swift/AppKit 可用(macOS Xcode CLI 工具:xcode-select --install) |
| 粘贴按键(macOS) | 同上辅助功能修复 |
| 粘贴按键(Linux) | 安装 xdotool(X11)或 ydotool(Wayland) |
| API 凭证 | 按照步骤 2 中的引导设置,或手动在 .tuzi-skills/.env 中设置 |
适用于带有多张图片(最多 9 张)的短文:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit
复制此清单,并在完成各项时勾选:
发布进度:
- [ ] 步骤 0:加载偏好设置(EXTEND.md)
- [ ] 步骤 1:确定输入类型
- [ ] 步骤 2:选择方法并配置凭证
- [ ] 步骤 3:解析主题/颜色并验证元数据
- [ ] 步骤 4:发布到微信
- [ ] 步骤 5:报告完成情况
检查并加载 EXTEND.md 设置(参见上文的偏好设置部分)。
关键:如果未找到,请在任何其他步骤或问题之前完成首次设置。
解析并存储这些默认值以供后续步骤使用:
default_theme(默认 default)default_color(如果未设置则省略 — 应用主题默认值)default_authorneed_open_comment(默认 1)only_fans_can_comment(默认 0)| 输入类型 | 检测方法 | 操作 |
|---|---|---|
| HTML 文件 | 路径以 .html 结尾,文件存在 | 跳转到步骤 3 |
| Markdown 文件 | 路径以 .md 结尾,文件存在 | 继续到步骤 2 |
| 纯文本 | 不是文件路径,或文件不存在 | 保存为 markdown,继续到步骤 2 |
纯文本处理:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# 将内容保存到:post-to-wechat/yyyy-MM-dd/[slug].md
3. 继续作为 markdown 文件处理
Slug 示例:
understanding-ai-modelsai-future(slug 翻译成英文)询问发布方法(除非在 EXTEND.md 或 CLI 中指定):
| 方法 | 速度 | 要求 |
|---|---|---|
api(推荐) | 快 | API 凭证 |
browser | 慢 | Chrome,登录会话 |
如果选择 API - 检查凭证:
# 检查项目级别
test -f .tuzi-skills/.env && grep -q "WECHAT_APP_ID" .tuzi-skills/.env && echo "project"
# 检查用户级别
test -f "$HOME/.tuzi-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.tuzi-skills/.env" && echo "user"
如果凭证缺失 - 引导设置:
未找到微信 API 凭证。
获取凭证:
1. 访问 https://mp.weixin.qq.com
2. 前往:开发 → 基本配置
3. 复制 AppID 和 AppSecret
保存到哪里?
A) 项目级别:.tuzi-skills/.env(仅限此项目)
B) 用户级别:~/.tuzi-skills/.env(所有项目)
选择位置后,提示输入值并写入 .env:
WECHAT_APP_ID=<用户输入>
WECHAT_APP_SECRET=<用户输入>
解析主题(首次匹配优先,如果已解析则不要询问用户):
--theme 参数default_theme(在步骤 0 中加载)default解析颜色(首次匹配优先):
--color 参数default_color(在步骤 0 中加载)验证元数据,来自前置元数据(markdown)或 HTML 元标签(HTML 输入):
| 字段 | 如果缺失 |
|---|---|
| 标题 | 提示:"输入标题,或按 Enter 键从内容自动生成" |
| 摘要 | 提示:"输入摘要,或按 Enter 键自动生成(推荐用于 SEO)" |
| 作者 | 使用后备链:CLI --author → 前置元数据 author → EXTEND.md default_author |
自动生成逻辑:
article_type=news 必需):
1. 如果提供了 CLI --cover 则使用。
2. 否则使用前置元数据(coverImage, featureImage, cover, image)。
3. 否则检查文章目录默认路径:imgs/cover.png。
4. 否则后备使用第一个内联内容图片。
5. 如果仍然缺失,停止并请求封面图片后再发布。关键:发布脚本在内部处理 markdown 转换。请不要预先将 markdown 转换为 HTML — 直接传递原始的 markdown 文件。这确保 API 方法将图片渲染为 <img> 标签(用于 API 上传),而浏览器方法使用占位符(用于粘贴替换工作流)。
API 方法(接受 .md 或 .html):
npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts <文件> --theme <主题> [--color <颜色>] [--title <标题>] [--summary <摘要>] [--author <作者>] [--cover <封面路径>]
关键:始终包含 --theme 参数。即使使用 default 也切勿省略。仅当用户或 EXTEND.md 明确设置了颜色时才包含 --color。
draft/add 负载规则:
POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKENarticle_type:news(默认)或 newspicnews,包含 thumb_media_id(封面是必需的)need_open_comment(默认 1)only_fans_can_comment(默认 0)author 解析:CLI --author → 前置元数据 author → EXTEND.md default_author如果脚本参数未暴露两个评论字段,仍要确保最终的 API 请求体包含解析后的值。
浏览器方法(接受 --markdown 或 --html):
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown <markdown文件> --theme <主题> [--color <颜色>]
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --html <html文件>
对于 API 方法,包含草稿管理链接:
微信发布完成!
输入:[类型] - [路径]
方法:API
主题:[主题名称] [如果设置了颜色]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N] 张内联图片
• 评论:[开启/关闭],[仅粉丝/所有用户]
结果:
✓ 草稿已保存到微信公众号
• media_id:[media_id]
后续步骤:
→ 管理草稿:https://mp.weixin.qq.com(登录后进入「内容管理」→「草稿箱」)
创建的文件:
[• post-to-wechat/yyyy-MM-dd/slug.md(如果是纯文本)]
[• slug.html(已转换)]
对于浏览器方法:
微信发布完成!
输入:[类型] - [路径]
方法:浏览器
主题:[主题名称] [如果设置了颜色]
文章:
• 标题:[标题]
• 摘要:[摘要]
• 图片:[N] 张内联图片
结果:
✓ 草稿已保存到微信公众号
创建的文件:
[• post-to-wechat/yyyy-MM-dd/slug.md(如果是纯文本)]
[• slug.html(已转换)]
| 主题 | 参考 |
|---|---|
| 图文参数,自动压缩 | references/image-text-posting.md |
| 文章主题,图片处理 | references/article-posting.md |
| 功能 | 图文 | 文章(API) | 文章(浏览器) |
|---|---|---|---|
| 纯文本输入 | ✗ | ✓ | ✓ |
| HTML 输入 | ✗ | ✓ | ✓ |
| Markdown 输入 | 标题/内容 | ✓ | ✓ |
| 多张图片 | ✓(最多 9 张) | ✓(内联) | ✓(内联) |
| 主题 | ✗ | ✓ | ✓ |
| 自动生成元数据 | ✗ | ✓ | ✓ |
默认封面后备(imgs/cover.png) | ✗ | ✓ | ✗ |
评论控制(need_open_comment, only_fans_can_comment) | ✗ | ✓ | ✗ |
| 需要 Chrome | ✓ | ✗ | ✓ |
| 需要 API 凭证 | ✗ | ✓ | ✗ |
| 速度 | 中等 | 快 | 慢 |
对于 API 方法:
.tuzi-skills/.env 中设置对于浏览器方法:
配置文件位置(优先级顺序):
<cwd>/.tuzi-skills/.env~/.tuzi-skills/.env| 问题 | 解决方案 |
|---|---|
| 缺少 API 凭证 | 按照步骤 2 的引导设置 |
| 访问令牌错误 | 检查 API 凭证是否有效且未过期 |
| 未登录(浏览器) | 首次运行会打开浏览器 - 扫描二维码登录 |
| 未找到 Chrome | 设置 WECHAT_BROWSER_CHROME_PATH 环境变量 |
| 缺少标题/摘要 | 使用自动生成或手动提供 |
| 无封面图片 | 添加前置元数据封面或在文章目录中放置 imgs/cover.png |
| 评论默认值错误 | 检查 EXTEND.md 键 need_open_comment 和 only_fans_can_comment |
| 粘贴失败 | 检查系统剪贴板权限 |
通过 EXTEND.md 进行自定义配置。有关路径和支持的选项,请参阅偏好设置部分。
每周安装量
95
代码仓库
GitHub 星标数
26
首次出现
2026年3月5日
安全审计
安装于
openclaw80
kimi-cli56
gemini-cli56
github-copilot56
amp56
codex56
GitHub Actions 官方文档查询助手 - 精准解答 CI/CD 工作流问题
40,500 周安装