steipete/wacli
GitHub: steipete/wacli
一个功能完善的 WhatsApp 命令行客户端,支持消息同步、离线搜索、发送消息和群组管理。
Stars: 584 | Forks: 99
# 🗃️ wacli — WhatsApp CLI:同步、搜索、发送。
基于 `whatsmeow` 构建的 WhatsApp CLI,专注于:
- 消息历史的尽力而为本地同步 + 持续捕获
- 快速离线搜索
- 发送消息
- 联系人 + 群组管理
这是一个第三方工具,通过 `whatsmeow` 使用 WhatsApp Web 协议,与 WhatsApp 没有关联。
## 状态
核心实现已完成。完整的设计说明请参阅 `docs/spec.md`。
## 近期更新 (0.2.0)
- 消息:搜索/列表包含表情回复、回复和媒体类型的显示文本。
- 发送:`wacli send file --filename` 用于覆盖显示名称。
- 认证:可选的 `WACLI_DEVICE_LABEL` / `WACLI_DEVICE_PLATFORM` 环境变量覆盖。
## 安装 / 构建
选择以下选项中的**一项**。
如果你通过 Homebrew 安装,则可以跳过本地构建步骤。
### 选项 A:通过 Homebrew 安装 (tap)
- `brew install steipete/tap/wacli`
### 选项 B:本地构建
- `go build -tags sqlite_fts5 -o ./dist/wacli ./cmd/wacli`
运行(仅限本地构建):
- `./dist/wacli --help`
## 快速开始
默认存储目录是 `~/.wacli`(使用 `--store DIR` 覆盖)。
```
# 1) 认证 (显示 QR),然后 bootstrap sync
pnpm wacli auth
# 或者:./dist/wacli auth (在 pnpm build 之后)
# 2) 保持同步 (从不显示 QR;需要先前的认证)
pnpm wacli sync --follow
# 诊断
pnpm wacli doctor
# 搜索消息
pnpm wacli messages search "meeting"
# 为聊天回填旧消息 (尽力而为;需要您的主设备在线)
pnpm wacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50
# 为消息下载媒体 (同步后)
./wacli media download --chat 1234567890@s.whatsapp.net --id
# 发送消息
pnpm wacli send text --to 1234567890 --message "hello"
# 发送文件
./wacli send file --to 1234567890 --file ./pic.jpg --caption "hi"
# 或者覆盖显示名称
./wacli send file --to 1234567890 --file /tmp/abc123 --filename report.pdf
# 列出群组并管理参与者
pnpm wacli groups list
pnpm wacli groups rename --jid 123456789@g.us --name "New name"
```
## 前作 / 致谢
本项目深受 Vicente Reig 出色的 `whatsapp-cli` 启发(并向其学习):
- [`whatsapp-cli`](https://github.com/vicentereig/whatsapp-cli)
## 高层用户体验 (UX)
- `wacli auth`:交互式登录(显示二维码),随后立即执行初始数据同步。
- `wacli sync`:非交互式同步循环(从不显示二维码;如果未认证则报错)。
- 输出默认为人类可读格式;传递 `--json` 以获取机器可读输出。
## 存储
默认为 `~/.wacli`(使用 `--store DIR` 覆盖)。
## 环境变量覆盖
- `WACLI_DEVICE_LABEL`:设置已链接设备的标签(显示在 WhatsApp 中)。
- `WACLI_DEVICE_PLATFORM`:覆盖已链接设备的平台(如果未设置或无效,则默认为 `CHROME`)。
## 回填旧历史记录
`wacli sync` 存储 WhatsApp Web 顺势发送的任何内容。要尝试获取*更旧*的消息,请向你的**主设备**(你的手机)发送按需历史记录同步请求。
重要说明:
- 这是**尽力而为**的:WhatsApp 可能不会返回完整的历史记录。
- 你的**主设备必须在线**。
- 请求是**按聊天进行的**(私信或群组)。`wacli` 使用该聊天中*本地存储的最旧消息*作为锚点。
- 建议每个请求的 `--count` 为 `50`。
### 回填单个聊天
```
pnpm wacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50
```
### 回填所有聊天(脚本)
这将遍历本地数据库中已知的聊天:
```
pnpm -s wacli -- --json chats list --limit 100000 \
| jq -r '.[].JID' \
| while read -r jid; do
pnpm -s wacli -- history backfill --chat "$jid" --requests 3 --count 50
done
```
## 许可证
参见 `LICENSE`。
标签:CLI, EVTX分析, EVTX分析, EVTX分析, Go, Homebrew, IP 地址批量处理, Ruby工具, sqlite, URL抓取, WhatsApp, whatsmeow, WiFi技术, 即时通讯, 威胁情报, 开发者工具, 开源, 数据抓取, 文件传输, 日志审计, 消息历史, 消息同步, 离线搜索, 第三方客户端, 网络信息收集, 网络调试, 群组管理, 自动化