2022-10-16 16:50:22 +08:00
|
|
|
|
# WeChatFerry Python 客户端
|
2023-05-04 23:31:27 +08:00
|
|
|
|
[](https://pypi.python.org/pypi/wcferry) [](https://pypi.python.org/pypi/wcferry) [](https://wechatferry.readthedocs.io/zh/latest/?badge=latest)
|
2022-10-16 16:50:22 +08:00
|
|
|
|
|
2023-07-13 23:50:22 +08:00
|
|
|
|
|[📖 文档](https://wechatferry.readthedocs.io/)|[📺 视频教程](https://mp.weixin.qq.com/s/APdjGyZ2hllXxyG_sNCfXQ)|[🙋 FAQ](https://mp.weixin.qq.com/s/vAGpn1C9stI8Xzt1hUJhLA)|
|
2023-06-28 10:05:32 +08:00
|
|
|
|
|:-:|:-:|:-:|
|
2023-07-11 16:45:53 +08:00
|
|
|
|
|
2023-04-09 16:54:40 +08:00
|
|
|
|
🤖示例机器人框架:[WeChatRobot](https://github.com/lich0821/WeChatRobot)。
|
|
|
|
|
|
2022-10-19 20:41:23 +08:00
|
|
|
|
## 快速开始
|
|
|
|
|
```sh
|
2023-03-15 21:33:13 +08:00
|
|
|
|
pip install --upgrade wcferry
|
2022-10-19 20:41:23 +08:00
|
|
|
|
```
|
|
|
|
|
|
2023-04-09 16:54:40 +08:00
|
|
|
|
### Demo:
|
2022-10-19 20:41:23 +08:00
|
|
|
|
```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
|
2023-03-01 04:06:08 +08:00
|
|
|
|
from time import sleep
|
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...")
|
2023-07-13 23:49:12 +08:00
|
|
|
|
wcf = Wcf(debug=True)
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-03-01 04:06:08 +08:00
|
|
|
|
sleep(5) # 等微信加载好,以免信息显示异常
|
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() # 当需要停止接收消息时调用
|
2023-07-13 23:49:12 +08:00
|
|
|
|
sleep(5)
|
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
|
|
|
|
|
2023-07-13 23:49:12 +08:00
|
|
|
|
sleep(5)
|
|
|
|
|
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-07-13 23:49:12 +08:00
|
|
|
|
sleep(5)
|
|
|
|
|
ret = wcf.send_file("README.MD", "filehelper") # 需要确保文件路径正确,建议使用绝对路径(使用双斜杠\\)
|
2023-03-15 21:33:13 +08:00
|
|
|
|
LOG.info(f"send_file: {ret}")
|
|
|
|
|
|
2023-07-13 23:49:12 +08:00
|
|
|
|
sleep(5)
|
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-07-13 23:49:12 +08:00
|
|
|
|
sleep(5)
|
2023-02-25 21:58:00 +08:00
|
|
|
|
LOG.info(f"DBs:\n{wcf.get_dbs()}")
|
2023-07-13 23:49:12 +08:00
|
|
|
|
LOG.info(f"Tables:\n{wcf.get_tables('MicroMsg.db')}")
|
2023-02-25 21:58:00 +08:00
|
|
|
|
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-28 21:02:32 +08:00
|
|
|
|
# 需要真正的 V3、V4 信息
|
|
|
|
|
# wcf.accept_new_friend("v3", "v4")
|
|
|
|
|
|
2023-07-13 23:49:12 +08:00
|
|
|
|
# 添加群成员,填写正确的群 ID 和成员 wxid
|
2023-02-28 21:02:32 +08:00
|
|
|
|
# ret = wcf.add_chatroom_members("chatroom id", "wxid1,wxid2,wxid3,...")
|
|
|
|
|
# LOG.info(f"add_chatroom_members: {ret}")
|
2022-10-19 20:41:23 +08:00
|
|
|
|
|
2023-07-13 23:49:12 +08:00
|
|
|
|
# 删除群成员,填写正确的群 ID 和成员 wxid
|
|
|
|
|
# ret = wcf.del_chatroom_members("chatroom id", "wxid1,wxid2,wxid3,...")
|
|
|
|
|
# LOG.info(f"add_chatroom_members: {ret}")
|
|
|
|
|
|
2023-02-27 23:46:41 +08:00
|
|
|
|
# 一直运行
|
2022-10-19 20:41:23 +08:00
|
|
|
|
wcf.keep_running()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
2023-05-08 16:01:44 +08:00
|
|
|
|
|||
|
|
|
|
|
|:-:|:-:|
|
|
|
|
|
|后台回复 `WeChatFerry` 加群交流|如果你觉得有用|
|
|
|
|
|
|
2022-10-19 20:41:23 +08:00
|
|
|
|
## 一起开发
|
|
|
|
|
### 配置环境
|
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-28 20:16:18 +08:00
|
|
|
|
# CMD
|
2023-06-24 10:26:15 +08:00
|
|
|
|
cd python\wcferry
|
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
|
2023-06-24 10:26:15 +08:00
|
|
|
|
cd python/wcferry
|
2023-02-28 20:16:18 +08:00
|
|
|
|
python -m grpc_tools.protoc --python_out=. --proto_path=../../rpc/proto/ wcf.proto
|
2022-10-16 16:50:22 +08:00
|
|
|
|
```
|
2023-06-27 09:57:42 +08:00
|
|
|
|
|
|
|
|
|
## 版本更新
|
|
|
|
|
版本号:`w.x.y.z`。
|
|
|
|
|
|
|
|
|
|
其中:
|
|
|
|
|
* `w` 是微信的大版本号,如 `37` (3.7.a.a), `38` (3.8.a.a), `39` (3.9.a.a)
|
|
|
|
|
* `x` 是适配的微信的小版本号,从 0 开始
|
|
|
|
|
* `y` 是 `WeChatFerry` 的版本,从 0 开始
|
|
|
|
|
* `z` 是各客户端的版本,从 0 开始
|
|
|
|
|
|
2023-07-15 07:01:48 +08:00
|
|
|
|
### 39.0.0.1 (2023.07.15)
|
|
|
|
|
修复不能 @ 问题。
|
2023-07-11 16:45:53 +08:00
|
|
|
|
|
|
|
|
|
功能:
|
|
|
|
|
|
|
|
|
|
* 检查登录状态
|
|
|
|
|
* 获取登录账号的 wxid
|
|
|
|
|
* 获取消息类型
|
|
|
|
|
* 获取所有联系人
|
|
|
|
|
* 获取所有好友
|
|
|
|
|
* 获取数据库
|
|
|
|
|
* 获取某数据库下的表
|
2023-07-14 00:53:17 +08:00
|
|
|
|
* 获取用户信息
|
2023-07-11 16:45:53 +08:00
|
|
|
|
* 发送文本消息(可 @)
|
|
|
|
|
* 发送图片(Python 客户端支持网络路径)
|
|
|
|
|
* 发送文件
|
|
|
|
|
* 允许接收消息
|
|
|
|
|
* 停止接收消息
|
|
|
|
|
* 执行 SQL 查询
|
|
|
|
|
* 接受好友申请
|
|
|
|
|
* 添加群成员
|
2023-07-14 00:53:17 +08:00
|
|
|
|
* 删除群成员
|
2023-07-11 16:45:53 +08:00
|
|
|
|
* 解密图片
|
|
|
|
|
* 某功能(Breaking Change)
|