Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wx_claw

微信机器人框架 — 基于 PC 微信 UI 自动化的消息收发中间件。

wx_claw 将微信 PC 客户端的操控能力封装为标准的 HTTP API 和 WebSocket 推送接口,为上层 AI 应用(如 OpenClaw)提供统一的消息通道。


特性

  • 消息监控 — 实时检测指定对话的新消息,通过 WebSocket 推送
  • 消息发送 — HTTP API 发送文本消息,支持群聊 @成员
  • 热更新配置 — 修改 bot_settings.yaml 即时生效,无需重启
  • 可替换传输层 — 适配器模式隔离底层操控方案,支持未来切换为 Hook / API 等方案
  • 数据持久化 — MongoDB 存储消息日志、会话记录、用户画像
  • Swagger 文档 — 所有接口自带交互式 API 文档

架构

┌─────────────────────────────────────────────┐
│                  API 层                      │
│         FastAPI (HTTP + WebSocket)           │
├─────────────────────────────────────────────┤
│                 Core 层                      │
│   MessagePoller · MessageSender · EventBus  │
├─────────────────────────────────────────────┤
│              Transport 层(可替换)           │
│  ┌──────────────┐  ┌──────────┐  ┌────────┐│
│  │PyWeChatAdapter│  │HookAdapter│  │ApiAdapter││
│  └──────┬───────┘  └────┬─────┘  └───┬────┘│
│         │               │             │      │
│      pywechat        hook lib     HTTP API  │
├─────────────────────────────────────────────┤
│                  DB 层                       │
│              MongoDB (pymongo)               │
└─────────────────────────────────────────────┘

使用须知

微信 4.0+ UI 自动化前置条件

微信 4.0 及以上版本采用 QT 框架重构了 UI,默认屏蔽了部分 UI Automation 控件的可见性。为确保 wx_claw 能正常捕获控件元素,首次使用前需执行以下步骤:

  1. 先启动 Windows 讲述人Win + Ctrl + Enter),再登录微信
  2. 保持讲述人运行 至少 5 分钟,使 Windows UI Automation 完整加载 QT 框架的控件树
  3. 关闭讲述人,此后即可正常使用 UI 自动化

原理:Windows 可访问性 API(UI Automation)在讲述人激活时会强制应用程序暴露所有 UI 元素信息。微信在检测到讲述人后会解除控件屏蔽,且此状态会被缓存——频繁执行上述操作后,后续启动微信将不再需要讲述人。

注意:此方法目前对微信 PC 有效。企业微信对 UI 自动化有更严格的限制,本项目不支持企业微信。

免责声明

  • 本项目仅供 学习研究 使用,严禁用于任何违反法律法规或微信使用条款的用途
  • 使用者应自行承担使用本项目所产生的一切风险和责任
  • 本项目不提供任何形式的担保,作者不对因使用本项目造成的任何损失负责
  • 请勿将本项目用于批量营销、骚扰他人、传播违法信息等非法用途
  • 如有侵权请联系删除

快速开始

详细部署步骤请参阅 部署文档

环境要求

依赖 版本
Windows 10 / 11
Python >= 3.11
uv >= 0.4
微信 PC 3.9.x / 4.0.x
MongoDB >= 4.4(可选)

安装

# 1. 克隆项目
git clone https://github.com/<your-org>/wx_claw.git
cd wx_claw

# 2. 克隆 pywechat 依赖(放在项目根目录下)
git clone https://github.com/Hello-Mr-Crab/pywechat.git

# 3. 安装 Python 依赖
uv sync

# 4. 复制配置文件(按需修改)
# config.yaml       — 系统配置(端口、数据库、功能开关)
# bot_settings.yaml  — 运行时设置(监控列表,热更新)

运行

uv run wx-claw

启动后:

发送消息

curl -X POST http://127.0.0.1:18790/api/messages/send \
  -H "Content-Type: application/json" \
  -d '{"chat_name":"文件传输助手","messages":["Hello from wx_claw!"]}'

监控消息

编辑 bot_settings.yaml,添加需要监控的对话名称:

monitor:
  - 文件传输助手
  - 某个群聊名称

保存后自动生效,新消息会通过 WebSocket 推送。

API 接口

方法 路径 说明
POST /api/messages/send 发送消息
GET /api/sessions 获取会话列表
POST /api/monitor 设置监控列表
GET /api/health 健康检查
WS /ws WebSocket 事件推送

完整接口文档请访问 /docs(Swagger UI)。

配置文件

config.yaml — 系统配置(需重启生效)

server:
  host: "127.0.0.1"
  port: 18790

mongo:
  uri: "mongodb://localhost:27017"
  db_name: "wx_claw"

poller:
  interval: 0.5
  mode: "light"       # light | deep

wechat:
  send_delay: 0.3
  virtual_desktop: false

bot_settings.yaml — 运行时设置(热更新)

monitor:
  - 文件传输助手
  - 某个群聊

项目结构

wx_claw/
├── app/                    # Python 主包
│   ├── api/                # HTTP/WebSocket 接口层
│   ├── core/               # 业务编排(轮询、发送、事件总线)
│   ├── transport/          # 传输层抽象 + 适配器
│   │   ├── base.py         # MessageTransport 抽象接口
│   │   └── pywechat_adapter.py  # pywechat UI 自动化适配器
│   ├── db/                 # 数据持久化(MongoDB)
│   ├── config.py           # 配置加载
│   ├── models.py           # 数据模型
│   ├── main.py             # 程序入口
│   └── server.py           # FastAPI 应用工厂
├── pywechat/               # 第三方依赖(需自行克隆)
├── doc/                    # 文档
├── config.yaml             # 系统配置
├── bot_settings.yaml       # 运行时设置
└── pyproject.toml          # 项目元数据 & 依赖

扩展传输层

wx_claw 的传输层采用适配器模式,底层操控方案可随时替换:

# 实现 MessageTransport 接口
from app.transport.base import MessageTransport

class HookAdapter(MessageTransport):
    def connect(self) -> None: ...
    def send_message(self, chat_name, messages, ...) -> dict: ...
    def get_chat_list_snapshot(self) -> list[Session]: ...
    def pull_messages(self, chat_name, count) -> list[Message]: ...
    # ...

然后在 app/main.py 中替换一行即可,core/api/db 层零改动。

许可证

MIT License

致谢

  • pywechat — 微信 PC 客户端 UI 自动化库
  • FastAPI — 高性能 Python Web 框架
  • MongoDB — 文档数据库

About

An wechat robot for openclawd

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages