7ustoo/automatic-munyun-machine
GitHub: 7ustoo/automatic-munyun-machine
本地运行的自动化求职工具,每日抓取并按简历匹配度排序职位,通过Telegram推送结果。
Stars: 0 | Forks: 0
# 自动 Munyun 机器 (AMM)
## 功能说明
- **每日100个职位批量抓取。** 在15个搜索查询(IAM、云安全、网络安全、M365、Linux等)上抓取 hiring.cafe。
- **简历感知排名。** 解析您的简历,按关键词重叠度对每个职位打分,按匹配百分比从高到低排序。
- **过滤噪音。** 过滤掉经理/主管/总监/销售工程师职位、政府安全许可职位、超出您YOE限制的职位、以及您列入黑名单的公司。
- **Telegram优先。** 周一至周五早上7点推送,按需 `/scrape`,以及 `/save N`、`/applied N`、`/reauth`、`/pause` 等命令可通过手机操作。
- **每日早晨可下载的.txt批量文件。** `jobs(YYYY-MM-DD).txt` 作为 Telegram 附件与消息流一起送达——便于搜索、可归档,可随时通过 `/export` 拉取。
- **本地优先。** 所有内容都在您的机器上运行。除了实际的 Telegram 消息,没有任何内容会离开您的电脑。
## 安装
### 一键安装(推荐)
```
iwr -useb https://raw.githubusercontent.com/7ustoo/automatic-munyun-machine/main/install.ps1 | iex
```
这将:
1. 如果缺失则安装 Node.js + Git(通过 winget)
2. 克隆仓库到 `%LOCALAPPDATA%\automatic-munyun-machine\`
3. 安装 npm 依赖项 + Chromium(用于 Playwright)
4. 启动交互式设置向导
### 手动安装(开发者)
```
git clone https://github.com/7ustoo/automatic-munyun-machine.git
cd automatic-munyun-machine
npm install
npx playwright install chromium
node scripts/setup-wizard.mjs
```
## 设置向导 — 10个步骤,约3分钟
1. **Telegram机器人。** 向导会引导您通过 @BotFather 创建一个机器人,并验证令牌。
2. **Chat ID。** 向您的机器人发送任何消息,向导会自动检测您的 chat ID。
3. **hiring.cafe 登录。** 浏览器打开,您用 Google 登录一次。会话会持久保存。
4. **简历。** 三个选项:
- **从磁盘选择**(默认)——打开 Windows 文件选择器对话框。点击您的 PDF / DOCX / MD 简历。
- **稍后通过 Telegram 上传**——跳过向导步骤,在设置完成后向机器人发送 `/resume` 并附上您的简历。
- **手动输入路径**——用于无头安装或特殊环境的备选方案。
5. **自动建议的职位标题。** 向导会读取您的简历并推荐10-12个搜索标题。全部接受、选择部分或保留默认。(如果您稍后上传则跳过——默认会应用直到您在上传后运行 `/jobs suggest`。)
6. **工作年限。** 您接受的职位列表上最大的 YOE。
7. **薪资底线。** 用于排名(高于底线的加分,低于底线的扣分)。
8. **安全许可过滤器。** 开关——过滤或包含政府安全许可职位。
9. **您的城市。** 自动地理编码用于早间天气预报。
10. **计划 + 完成。** 选择时间 + 日期。向导会注册 Windows 任务调度器,启动机器人,并发送最终的 ✅ ping 到您的 Telegram,让您知道设置已端到端完成。
设置完成后,机器人会在后台运行,每个工作日早上投递一批。每项向导答案之后都可以通过 Telegram 命令从您的手机上编辑。
## Telegram 命令
### 核心操作
| 命令 | 操作 |
|---|---|
| `/scrape`、`/daily`、`gm`、`morning` | 立即运行新的批量任务(1-2分钟)。可以随时运行。|
| `/save N` | 在 hiring.cafe 上收藏职位 #N |
| `/applied N` | 标记已申请(也会记录到 applications.md)|
| `/why N` | 解释职位 #N 获得其匹配百分比的原因 |
| `/export` | 将今天的批量下载为 `jobs(YYYY-MM-DD).txt` 文件。如果今天的批量尚未运行,则回退到最近的有日期的文件。|
### 设置——从您的手机上编辑(v0.3 新增)
| 命令 | 操作 |
|---|---|
| `/settings` | 在一条消息中显示当前配置 |
| `/resume` | 上传新简历(PDF/DOCX/MD);机器人会重新解析技能 |
| `/jobs` | 列出当前搜索标题 |
| `/jobs add "标题"` | 添加搜索标题 |
| `/jobs remove "标题"` | 移除搜索标题 |
| `/jobs suggest` | 机器人读取您的简历并推荐新标题 |
| `/yoe N` | 设置最大工作年限 |
| `/salary N` | 设置薪资底线,单位为 $K(例如 `/salary 120`)|
| `/clearance on/off` | 切换政府安全许可过滤器 |
| `/forms all|simple|long` | 申请表过滤器——`all`(默认),`simple`(Easy Apply,无需账户),`long`(仅多步骤申请)|
| `/skip <公司>` | 不再显示此公司 |
| `/unskip <公司>` | 撤销操作 |
| `/city <名称>` | 更改天气城市(自动地理编码)|
| `/schedule HH:MM` | 更改每日推送时间 |
### 维护
| 命令 | 操作 |
|---|---|
| `/auth` | 验证 hiring.cafe 登录 |
| `/reauth` | 在您的电脑上触发重新登录 |
| `/pause` | 停止每日7点推送 |
| `/resume-bot` | 重新启用每日7点推送 |
| `/forget all` | 清除已看到职位的记忆 |
| `/forget last` | 取消记忆最近的批量 |
| `/cancel` | 取消多步骤交互 |
| `/weather` | 仅天气信息 |
| `/version` | 显示运行版本和 GitHub 上的最新版本 |
| `/update` | 从 GitHub 拉取最新版本 + 重启机器人 |
| `/update skip` | 不通知当前最新版本 |
| `/update check` | 重新检查 GitHub 是否有新版本 |
| `/update notes` | 显示最新版本的发布说明 |
| `/test`、`/ping` | 机器人健康检查 |
| `/help` | 显示此列表 |
## 自定义
所有设置都存储在 `config.json`(由向导从 `config.example.json` 创建)中。随时编辑,下次运行时会获取更改:
- **搜索查询** — 机器人运行的 hiring.cafe 搜索
- **过滤器** — 要跳过的公司、要过滤的职位标题模式、安全许可开关
- **评分权重** — 标题/证书/技能/合规性的权重
- **天气** — 您城市的经纬度
- **计划** — 时间 + 日期
## 数据文件
| 文件 | 用途 |
|---|---|
| `.env` | Telegram 凭据(gitignored)|
| `config.json` | 用户配置(gitignored)|
| `data/cv-parsed.json` | 解析的简历关键词(gitignored)|
| `data/cv.md` | 简历的 Markdown 副本(gitignored)|
| `data/seen-jobs.json` | 已展示职位的本地记忆(gitignored)|
| `data/applications.md` | 申请日志(gitignored)|
| `data/browser-profile/` | Playwright Chromium 配置,包含 hiring.cafe 会话(gitignored)|
| `data/auth-state.json` | 上次成功认证的时间戳 |
| `data/today-batch-{date}.tsv` | 每天的批量文件,TSV 格式(机器可读)|
| `data/jobs({date}).txt` | 每天的批量文件,纯文本格式(人类可读,作为 Telegram 附件发送)|
| `data/daily-batch-{date}.log` | 每次运行的日志 |
| `data/telegram-bot.log` | 机器人轮询日志 |
所有敏感内容都被 gitignored——您的令牌、会话 cookie、简历、申请历史都保留在本地。
## 隐私
- **没有上传任何内容。** 唯一的出站流量:hiring.cafe(职位列表)、open-meteo(天气,无需 API 密钥)、Telegram(您的机器人令牌 + chat)。没有其他内容。
- **没有遥测。** AMM 不会收集、发送或聚合任何使用数据。
- **没有第三方 API。** 没有 OpenAI,没有 Anthropic,没有嵌入服务。纯本地关键词评分。
## 成本
**0美元/月。** Telegram 免费。open-meteo 免费。Playwright 免费。Hiring.cafe 抓取使用您自己的带宽。
## 架构
```
┌─────────────────┐
│ config.json │ ← user-editable
│ cv-parsed.json │
└─────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ scripts/daily-batch.mjs │
│ (Playwright + scoring + Telegram) │
└─────────────────────────────────────────┘
▲ │
│ ▼
┌──────────┐ ┌────────────────┐
│ Task │ │ Telegram API │
│ Scheduler│ └────────────────┘
│ 7am │
└──────────┘ ┌────────────────┐
│ telegram-bot │ ← polls for /daily,
│ .mjs │ /save, /applied,
└────────────────┘ /reauth, etc.
▲
│
Your phone
```
三个独立进程,都读写一个共享文件系统。没有服务器,没有云,没有外部状态。
## 要求
- Windows 10 / 11(Mac 和 Linux 支持路线图上)
- ~500 MB 磁盘空间(主要是 Chromium)
- 用于7点推送的常开机(或者按需使用 `/daily`)
- Telegram 账户
- hiring.cafe 账户(免费;通过 Google 登录)
## 路线图
- ✅ **v0.2** — 设置向导、一键安装、可配置一切
- ✅ **v0.3** — 18个新机器人命令、10步向导、智能简历解析、`/forms` 过滤器、`/jobs suggest`、`/why N`
- ✅ **v0.4** — 可下载的 `.txt` 批量附件 + `/export` 命令
- ✅ **v0.4.1** — 原生 Windows 文件选择器用于简历步骤、Telegram 唯一设置路径、修复 PowerShell PATH 崩溃、libuv 断言修复、瞬时中断弹性
- ✅ **v0.5**(当前)— `/update` 命令、`/version` 命令、启动时 + 每日的更新通知、版本感知的机器人启动 ping
- **v0.6** — Mac + Linux 支持、额外职位来源的插件架构(RemoteOK、YC、Greenhouse、Lever、Ashby)
- **v1.0** — Tauri 桌面 GUI,带仪表板、历史日历、申请 Kanban
- **v2.0** — 基于嵌入的排名 + 可选的 LLM 重排(自备 Anthropic 密钥)、可选的薪资数据库、浏览器扩展
## 许可证
MIT——您可以随意使用。
## 贡献
欢迎提交拉取请求。可能需要的贡献:
- `setup-tasks.ps1`、`start-bot.cmd` 等的 Mac/Linux 等效版本
- `daily-batch.mjs` 中新 ATS 提供商的选择器
- `scripts/cv-keywords.json` 中的额外关键词领域(数据工程、软件、设计)
## 故障排除
### 向导崩溃,显示 `spawn powershell ENOENT`
您的 `PATH` 缺少 `C:\Windows\System32`。已在 v0.4.1 中修复,但如果您在旧版本安装上或仍然发生问题:请直接使用绝对路径运行 `setup-tasks.ps1`。在 `cmd.exe` 中:
```
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "%LOCALAPPDATA%\automatic-munyun-machine\scripts\setup-tasks.ps1"
```
然后手动启动机器人:
```
schtasks /run /tn munyun-bot
```
### 机器人在 Telegram 上不回复
1. 验证它正在运行:`schtasks /query /tn munyun-bot`(查看 State: Running)。
2. 重启:`schtasks /run /tn munyun-bot`。
3. 检查日志:`%LOCALAPPDATA%\automatic-munyun-machine\data\telegram-bot.log`(最后几行会告诉您什么崩溃了)。
4. 验证您的令牌 + chat ID 在 `.env` 中正确——尝试通过以下方式发送手动消息:
node scripts\telegram-send.mjs "test"
### `/scrape` 显示"会话过期"
从您的手机上运行 `/reauth`——机器人会在您的笔记本电脑上弹出 Chromium 窗口,您用 Google 登录,关闭窗口。会话会自动保存。
### 抓取0个职位或 DOM 相关崩溃
hiring.cafe 可能更改了他们的 HTML 结构。检查 `data/daily-batch-{date}.log` 获取具体错误,并在带上日志的情况下开 issue。
### 批量中的职位不对
从您的手机编辑您的查询 / 过滤器——`/jobs add "标题"`、`/jobs remove "标题"`、`/skip <公司>`、`/yoe N`、`/salary N`、`/clearance on/off`。或直接编辑 `config.json` 并重新运行 `/scrape`。
### 想从头开始
1. 停止并注销机器人:
Get-Process node | Where-Object { (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)").CommandLine -match 'telegram-bot' } | Stop-Process -Force
Unregister-ScheduledTask -TaskName 'munyun-bot' -Confirm:$false
Unregister-ScheduledTask -TaskName 'munyun-daily-batch' -Confirm:$false
2. 删除安装目录:
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\automatic-munyun-machine"
3. 重新运行一键安装程序。
### 简历步骤中文件选择器不打开
您要么使用的是没有 `System.Windows.Forms` 的精简 Windows 安装,要么是从无 GUI 会话运行(例如 SSH)。向导会自动回退到输入路径——粘贴您的简历的完整路径。或者选择选项2("稍后通过 Telegram 上传")并在设置完成后向机器人发送 `/resume`。
标签:AI合规, Chromium, DOCX解析, Git克隆, GNU通用公共许可证, IP 地址批量处理, MITM代理, Node.js, PDF解析, Playwright, PowerShell安装, Telegram机器人, Windows工具, 会话管理, 关键词匹配, 批量处理, 招聘网站, 效率工具, 数字取证, 文件解析, 本地优先, 每日任务, 求职工具, 求职自动化, 浏览器自动化, 特征检测, 简历匹配, 网络安全审计, 职位爬虫, 自动化脚本, 自定义脚本