mirror of
https://github.com/JimLiu/baoyu-skills.git
synced 2026-08-08 09:53:02 +08:00
feat(baoyu-post-to-wechat): add multi-account support
Support multiple WeChat Official Accounts via EXTEND.md accounts block. Each account gets isolated Chrome profile, credential resolution chain (inline → prefixed env → unprefixed env), and --account CLI arg.
This commit is contained in:
@@ -95,9 +95,115 @@ chrome_profile_path: /path/to/chrome/profile
|
||||
**Value priority**:
|
||||
1. CLI arguments
|
||||
2. Frontmatter
|
||||
3. EXTEND.md
|
||||
3. EXTEND.md (account-level → global-level)
|
||||
4. Skill defaults
|
||||
|
||||
## Multi-Account Support
|
||||
|
||||
EXTEND.md supports managing multiple WeChat Official Accounts. When `accounts:` block is present, each account can have its own credentials, Chrome profile, and default settings.
|
||||
|
||||
**Compatibility rules**:
|
||||
|
||||
| Condition | Mode | Behavior |
|
||||
|-----------|------|----------|
|
||||
| No `accounts` block | Single-account | Current behavior, unchanged |
|
||||
| `accounts` with 1 entry | Single-account | Auto-select, no prompt |
|
||||
| `accounts` with 2+ entries | Multi-account | Prompt to select before publishing |
|
||||
| `accounts` with `default: true` | Multi-account | Pre-select default, user can switch |
|
||||
|
||||
**Multi-account EXTEND.md example**:
|
||||
|
||||
```md
|
||||
default_theme: default
|
||||
default_color: blue
|
||||
|
||||
accounts:
|
||||
- name: 宝玉的技术分享
|
||||
alias: baoyu
|
||||
default: true
|
||||
default_publish_method: api
|
||||
default_author: 宝玉
|
||||
need_open_comment: 1
|
||||
only_fans_can_comment: 0
|
||||
app_id: wx1234567890abcdef
|
||||
app_secret: abc123secret456
|
||||
- name: AI工具集
|
||||
alias: ai-tools
|
||||
default_publish_method: browser
|
||||
default_author: AI工具集
|
||||
need_open_comment: 1
|
||||
only_fans_can_comment: 0
|
||||
```
|
||||
|
||||
**Per-account keys** (can be set per-account or globally as fallback):
|
||||
`default_publish_method`, `default_author`, `need_open_comment`, `only_fans_can_comment`, `app_id`, `app_secret`, `chrome_profile_path`
|
||||
|
||||
**Global-only keys** (always shared across accounts):
|
||||
`default_theme`, `default_color`
|
||||
|
||||
### Account Selection (Step 0.5)
|
||||
|
||||
Insert between Step 0 and Step 1 in the Article Posting Workflow:
|
||||
|
||||
```
|
||||
if no accounts block:
|
||||
→ single-account mode (current behavior)
|
||||
elif accounts.length == 1:
|
||||
→ auto-select the only account
|
||||
elif --account <alias> CLI arg:
|
||||
→ select matching account
|
||||
elif one account has default: true:
|
||||
→ pre-select, show: "Using account: <name> (--account to switch)"
|
||||
else:
|
||||
→ prompt user:
|
||||
"Multiple WeChat accounts configured:
|
||||
1) <name1> (<alias1>)
|
||||
2) <name2> (<alias2>)
|
||||
Select account [1-N]:"
|
||||
```
|
||||
|
||||
### Credential Resolution (API Method)
|
||||
|
||||
For a selected account with alias `{alias}`:
|
||||
|
||||
1. `app_id` / `app_secret` inline in EXTEND.md account block
|
||||
2. Env var `WECHAT_{ALIAS}_APP_ID` / `WECHAT_{ALIAS}_APP_SECRET` (alias uppercased, hyphens → underscores)
|
||||
3. `.baoyu-skills/.env` with prefixed key `WECHAT_{ALIAS}_APP_ID`
|
||||
4. `~/.baoyu-skills/.env` with prefixed key
|
||||
5. Fallback to unprefixed `WECHAT_APP_ID` / `WECHAT_APP_SECRET`
|
||||
|
||||
**.env multi-account example**:
|
||||
|
||||
```bash
|
||||
# Account: baoyu
|
||||
WECHAT_BAOYU_APP_ID=wx1234567890abcdef
|
||||
WECHAT_BAOYU_APP_SECRET=abc123secret456
|
||||
|
||||
# Account: ai-tools
|
||||
WECHAT_AI_TOOLS_APP_ID=wxabcdef1234567890
|
||||
WECHAT_AI_TOOLS_APP_SECRET=def789secret012
|
||||
```
|
||||
|
||||
### Chrome Profile (Browser Method)
|
||||
|
||||
Each account uses an isolated Chrome profile for independent login sessions:
|
||||
|
||||
| Source | Path |
|
||||
|--------|------|
|
||||
| Account `chrome_profile_path` in EXTEND.md | Use as-is |
|
||||
| Auto-generated from alias | `{shared_profile_parent}/wechat-{alias}/` |
|
||||
| Single-account fallback | Shared default profile (current behavior) |
|
||||
|
||||
### CLI `--account` Argument
|
||||
|
||||
All publishing scripts accept `--account <alias>`:
|
||||
|
||||
```bash
|
||||
${BUN_X} {baseDir}/scripts/wechat-api.ts <file> --theme default --account ai-tools
|
||||
${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <file> --theme default --account baoyu
|
||||
${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown <file> --images ./photos/ --account baoyu
|
||||
```
|
||||
|
||||
## Pre-flight Check (Optional)
|
||||
|
||||
Before first use, suggest running the environment check. User can skip if they prefer.
|
||||
@@ -139,6 +245,7 @@ Copy this checklist and check off items as you complete them:
|
||||
```
|
||||
Publishing Progress:
|
||||
- [ ] Step 0: Load preferences (EXTEND.md)
|
||||
- [ ] Step 0.5: Resolve account (multi-account only)
|
||||
- [ ] Step 1: Determine input type
|
||||
- [ ] Step 2: Select method and configure credentials
|
||||
- [ ] Step 3: Resolve theme/color and validate metadata
|
||||
|
||||
Reference in New Issue
Block a user