2022-10-16 16:50:22 +08:00
|
|
|
|
# WeChatFerry Python 客户端
|
2022-10-19 20:41:23 +08:00
|
|
|
|
⚠️ **只支持 Windows** ⚠️
|
2022-10-16 16:50:22 +08:00
|
|
|
|
|
2022-10-19 20:41:23 +08:00
|
|
|
|
## 快速开始
|
|
|
|
|
```sh
|
|
|
|
|
pip install wcferry
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
参考 Demo:
|
|
|
|
|
```py
|
|
|
|
|
#! /usr/bin/env python3
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
2023-02-25 21:58:00 +08:00
|
|
|
|
import logging
|
2023-02-27 23:46:41 +08:00
|
|
|
|
from threading import Thread
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
|
|
|
|
from wcferry import Wcf
|
|
|
|
|
|
2023-02-27 23:46:41 +08:00
|
|
|
|
logging.basicConfig(level='DEBUG', format="%(asctime)s %(message)s")
|
|
|
|
|
LOG = logging.getLogger("Demo")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def process_msg(wcf: Wcf):
|
|
|
|
|
"""处理接收到的消息"""
|
|
|
|
|
while wcf.is_receiving_msg():
|
|
|
|
|
try:
|
|
|
|
|
msg = wcf.get_msg()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
LOG.info(msg) # 简单打印
|
|
|
|
|
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
|
|
|
|
def main():
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info("Start demo...")
|
|
|
|
|
wcf = Wcf(debug=True) # 默认连接本地服务
|
|
|
|
|
# wcf = Wcf("tcp://127.0.0.1:10086") # 连接远端服务
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-27 23:46:41 +08:00
|
|
|
|
LOG.info(f"已经登录: {True if wcf.is_login() else False}")
|
|
|
|
|
LOG.info(f"wxid: {wcf.get_self_wxid()}")
|
|
|
|
|
|
|
|
|
|
# 允许接收消息
|
|
|
|
|
# wcf.enable_recv_msg(LOG.info) # deprecated
|
|
|
|
|
|
|
|
|
|
# 允许接收消息
|
|
|
|
|
wcf.enable_receiving_msg()
|
|
|
|
|
Thread(target=process_msg, name="GetMessage", args=(wcf,), daemon=True).start()
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-27 23:46:41 +08:00
|
|
|
|
# wcf.disable_recv_msg() # 当需要停止接收消息时调用
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
|
|
|
|
ret = wcf.send_text("Hello world.", "filehelper")
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info(f"send_text: {ret}")
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
|
|
|
|
ret = wcf.send_image("TEQuant.jpeg", "filehelper")
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info(f"send_image: {ret}")
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info(f"Message types:\n{wcf.get_msg_types()}")
|
|
|
|
|
LOG.info(f"Contacts:\n{wcf.get_contacts()}")
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info(f"DBs:\n{wcf.get_dbs()}")
|
|
|
|
|
LOG.info(f"Tables:\n{wcf.get_tables('db')}")
|
|
|
|
|
LOG.info(f"Results:\n{wcf.query_sql('MicroMsg.db', 'SELECT * FROM Contact LIMIT 1;')}")
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-25 21:58:00 +08:00
|
|
|
|
# wcf.accept_new_friend("v3", "v4") # 需要真正的 V3、V4 信息
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-02-27 23:46:41 +08:00
|
|
|
|
# 一直运行
|
2022-10-19 20:41:23 +08:00
|
|
|
|
wcf.keep_running()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 一起开发
|
|
|
|
|
### 配置环境
|
2022-10-16 16:50:22 +08:00
|
|
|
|
```sh
|
|
|
|
|
# 创建虚拟环境
|
|
|
|
|
python -m venv .env
|
|
|
|
|
# 激活虚拟环境
|
|
|
|
|
source .env/Scripts/activate
|
|
|
|
|
# 升级 pip
|
|
|
|
|
pip install --upgrade pip
|
|
|
|
|
# 安装依赖包
|
2023-02-25 21:58:00 +08:00
|
|
|
|
pip install grpcio-tools pynng
|
2022-10-16 16:50:22 +08:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-25 21:58:00 +08:00
|
|
|
|
### 重新生成 PB 文件
|
2022-10-16 16:50:22 +08:00
|
|
|
|
```sh
|
2023-02-25 22:29:05 +08:00
|
|
|
|
cd python\wcferry
|
2023-02-28 20:16:18 +08:00
|
|
|
|
# CMD
|
2023-02-25 22:29:05 +08:00
|
|
|
|
python -m grpc_tools.protoc --python_out=. --proto_path=..\..\rpc\proto\ wcf.proto
|
2023-02-28 20:16:18 +08:00
|
|
|
|
|
|
|
|
|
# GitBash
|
|
|
|
|
python -m grpc_tools.protoc --python_out=. --proto_path=../../rpc/proto/ wcf.proto
|
2022-10-16 16:50:22 +08:00
|
|
|
|
```
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
|
|
|
|
### 参考项目 [README](../README.MD)
|