---
url: /docs/install.md
---
# 一、环境配置和安装
## 一、环境配置
| 环境 | 版本 |
| :----: | :----------------------------------------: |
| Python | 3.9、3.10、3.11、3.12、3.13 |
| OS | Windows10、11, Windows Server2016、2019、2022 |
| 微信 | 4.1 |
## 二、安装&激活
:::info 文档中,方法名前标注“✨”的为plus专用方法。
:::
### 免费版
```shell
pip install wxauto4
```
::: warning ⚠️ 仅支持 python 3.9-3.12
:::
::: warning 免费版版本兼容
最新支持到客户端 [4.1.8.107](https://github.com/SiverKing/wechat4.0-windows-versions/releases/tag/v4.1.8.107)版本
:::
### Plus版
```shell
pip install wxautox4
```
::: warning ⚠️ 仅支持 python 3.9-3.13
:::
::: warning Plus版本兼容
最新支持到客户端 [4.1.9.35](https://github.com/SiverKing/wechat4.0-windows-versions/releases/tag/v4.1.9.35)版本
:::
激活:
```shell
wxautox4 -a 激活码
```

:::tip 获取激活码
在[Du'sAPI](https://dusapi.com/register)注册账号,用该账号登录[wxauto](https://wxauto.org/purchase),即可购买。[关于激活码](/docs/issues.md#激活码有时间限制吗)
:::
## 三、测试运行
```python title="demo.py"
from wxauto4 import WeChat # 免费版
from wxautox4 import WeChat # Plus版
# 初始化微信实例
wx = WeChat()
# 切换到文件传输助手
target = "文件传输助手"
wx.ChatWith(target)
# 查看当前窗口信息
chatinfo = wx.ChatInfo()
print(f"当前窗口信息:{chatinfo}")
# 发送消息
if chatinfo.get('chat_name') == target: # 先判断是否为要发送的人
wx.SendMsg("你好")
# 获取当前聊天窗口消息
msgs = wx.GetAllMessage()
for msg in msgs:
print(msg.raw)
```
:::tip ✅ 如果测试运行成功,恭喜您,环境配置完成!
:::
---
url: /deploy.md
---
# 云服务器部署
为了方便各位新用户,**免去python的安装和wxauto环境配置过程**,朴利科技为我们提供了专属wxauto系统镜像,无需自行准备电脑和配置环境即可直接启动项目。
- **超高性价比**:
- 最低4核4G 配置可流畅挂机wxauto+微信,可应对高频场景
- 按月付费更灵活
- 单月价格更优惠
- **专业稳定**:专为7×24小时挂机优化
- **开箱即用**:Windows Server 2022 系统预装wxauto所需全套环境、内置防异地检查方法
\{\{\< cards >}}
\{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli1.png" title="👉点击购买:4核4G 12/月" tag="点击跳转" tagType="info" >}}
\{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli3.png" title="👉点击购买:4核6G 13/月" tag="点击跳转" tagType="info" >}}
\{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli2.png" title="👉点击购买:4核8G 15/月" tag="点击跳转" tagType="info" >}}
\{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli4.png" title="👉点击购买:8核8G 18/月" tag="点击跳转" tagType="info" >}}
\{\{\< /cards >}}
### 预装环境清单
| 组件类别 | 包含内容 |
| -------- | ---------------------------------------- |
| **核心应用** | Windows微信官方版(3.9.12.51 wxauto可用) |
| **开发环境** | Python环境 + wxauto库 + VSCode开发环境 |
| **系统优化** | RDP退出不锁屏脚本、系统内存管理软件(memreduct)自动优化已设置 |
| **远程管理** | VNC、Windows RDP、预装第三方远控软件(ToDesk或向日葵) |
| **部署教程** | 开箱即用,本地调试好的程序可直接在服务器运行或者打包exe发送到服务器可直接运行 |
\{\{% details title="\其他云服务器" closed="true" %}}
\{\{\< cards cols="2" >}}
\{\{\< card link="[https://cloud.tencent.com/act/cps/redirect?redirect=5695\&cps\_key=348fc319f5c034afed4b7c6894f3883a\&from=console](https://cloud.tencent.com/act/cps/redirect?redirect=5695\&cps_key=348fc319f5c034afed4b7c6894f3883a\&from=console)" title="腾讯云" >}}
\{\{\< card link="[https://www.aliyun.com/daily-act/ecs/activity\_selection?userCode=t9ic9gas](https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=t9ic9gas)" title="阿里云" >}}
\{\{\< /cards >}}
> \[!TIP]
> 这几个链接是我的推广链接,如果你不介意的话可以通过我的链接购买,我会有一点点佣金,你不会多付钱,但是可以支持我继续开发与维护。
> **货比三家哪个便宜买哪个**
- 内存CPU:没特殊限制,能选winserver的就行
- 系统:WindowsServer2016、2019、2022版本
> \[!TIP]
> 云服务器最好买你所在城市或临近城市的,因为手机ip与服务器ip所在地不是一个城市有几率触发微信异地登录风控。
\{\{% /details %}}
## 远程控制
该项目为自动化模拟项目,需要窗口保持活跃(未锁屏)状态方可正常运行。
有很多远程方案,没有必须是什么,但要保证退出远程控制时不要锁屏,这里提供两个方式:
### 远程桌面WindowsRDP(MSTSC)
将以下windows批处理命令保存为.bat文件,在结束远程时以管理员权限运行,确保不会锁屏:
```bat
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
%windir%\System32\tscon.exe %%s /dest:console
)
```
> \[!NOTE]
> 该方案为热心群友提供
### VNC
1. 登录服务器,安装RealVNC server,设置登录密码和服务端口,默认为5900端口,但是最好改一下
2. 登录云服务器服务商控制台,在防火墙打开上一步设置的vnc端口的访问权限
3. 自己电脑安装RealVNC viewer,输入云服务器ip:端口进行连接,断开连接不会锁屏
4. 服务器安装微信,部署代码即可运行
### 其他商业远程软件
如向日葵、TeamViewer、ToDesk等,断开连接不会锁屏即可
---
url: /plus.md
---

# 关于plus版本
该版本为`wxauto`的plus版本`✨wxautox`,在保留`wxauto`所有功能的基础上,完善和提升了用户的体验和性能:
1. **BUG 修复**:完善了并修复了`wxauto`存在的许多问题。
2. **高效性能**:新增多项完善功能,大部分场景用户不再需要移动鼠标。
3. **进阶专属支持**:加入plus群,提供plus用户专属支持。
## 安装
**文档中标题前缀为`✨`标志的,为Plus版本特有方法,开源版无法调用**
```bash
pip install wxautox4
```
激活:
```shell
wxautox4 -a [激活码]
```

:::tip 获取激活码,在[Du'sAPI](https://dusapi.com/register)注册账号,登录[wxauto](https://wxauto.org/purchase),即可获取
:::
## 获取Plus
作者好友
备注plus,不备注可能不会通过
作者好友(备用)
第一个频繁时可加这个
## 常见问题
### 有什么限制
- 不可以发布到公共平台
- 不可以做违法的事情
- 个人或内部使用,不允许商业软件厂商进行集成
### 会持续更新吗
订阅期为1年,订阅期内更新免费,订阅过期后不提供更新服务,已获取的版本仍可继续使用
### 可以最小化吗
可以但是**不建议**。
wxauto项目本身是ui自动化,最小化会导致窗口ui绘制更新慢,自动化效率低
### Plus版本后台模式是什么
后台模式即不依赖鼠标移动,绝大部分场景无需将微信调到前台窗口即可进行操作,但是有些操作必须要微信在前台才可以操作成功,例如获取发送者详情信息等;
大部分场景下:
- 不抢占鼠标
- 执行速度快
- 窗口不必在桌面顶部也能操作
:::info
因为原理上还是ui自动化操作,所以某些个别场景可能需要激活微信窗口才可以操作
:::
---
url: /agreement.md
---
# 用户协议
最后更新日期:2025年05月23日
感谢您使用 wxauto(x4)(以下简称“本项目”)。为明确用户责任,特制定本用户协议(以下简称“协议”)。请在使用前仔细阅读并同意以下条款。您使用本项目即视为您已接受并同意遵守本协议。
使用许可及限制
### 1. 合法用途
用户应仅将本项目用于合法用途,包括但不限于:
- 个人学习和研究。
- 在不违反适用法律法规及第三方协议(如[微信用户协议](https://weixin.qq.com/cgi-bin/readtemplate?\&t=page/agreement/personal_account\&lang=zh_CN))的情况下个人使用。
### 2. 禁止行为
用户不得将本项目用于以下用途,包括但不限于:
- 不得使用本项目开发、分发或使用任何违反法律法规的工具或服务。
- 不得使用本项目开发、分发或使用任何违反第三方平台规则(如[微信用户协议](https://weixin.qq.com/cgi-bin/readtemplate?\&t=page/agreement/personal_account\&lang=zh_CN))的工具或服务。
- 不得使用本项目从事任何危害他人权益、平台安全或公共利益的行为。
- 不得将本项目用于商业用途,包括但不限于开发、销售或以任何方式直接或间接获利的行为。
- 不得将wxautox4的源代码、修改版本或任何与本项目相关的内容发布至公共平台,也不得通过任何形式进行公开传播或分享。
### 3. 风险与责任
用户在使用本项目时,须自行确保其行为的合法性及合规性。 任何因使用本项目而产生的法律风险、责任及后果,由用户自行承担。用户应确保其使用行为不违反任何适用的法律法规及相关协议,且不侵犯第三方的权益。
---
url: /blog/A9dYFme8.md
---
# 从 3.9 到 4.x 适配机制的变化
4.x 版本做了更严格的限制,几乎所有方法都需要进行重构。很多人在问,这里说明这些变化的原因。
## UI 渲染机制
### 3.9 版本:预加载
在 3.9 客户端,当一个聊天窗口被打开时,系统会**预先加载约 30 条消息的 UI 信息到内存中**。即使这些消息并未显示在当前屏幕的可视区域内,它们依然是可见且可被程序获取的。
```mermaid
graph LR
%% 定义样式类,只使用最兼容的属性
%% 包含了圆角
classDef default fill:#f8f9fa,stroke:#d0d7de,color:#1d1d1f,rx:12,ry:12;
classDef highlight fill:#ffffff,stroke:#007aff,color:#1d1d1f,rx:12,ry:12;
classDef decision fill:#e9ecef,stroke:#6c757d,color:#1d1d1f,rx:8,ry:8;
A[打开聊天窗口]
B[加载~30条消息]
C{获取消息}
D[直接获取]
E[滚动至可视区操作]
F[直接操作]
A --> B
B --> C
C -- "在可视区" --> D
C -- "不在可视区" --> D
D -- "在可视区" --> F
D -- "不在可视区" --> E
class A,B,C,D,E,F highlight;
```
### 4.x 版本:实时渲染
现在 4.x 版本,UI 加载逻辑变为 **“实时渲染”** ,只有那些真正出现在屏幕可见范围内的消息,其 UI 信息才会被加载到内存中。
```mermaid
graph LR
classDef default fill:#f8f9fa,stroke:#d0d7de,color:#1d1d1f,rx:12,ry:12;
classDef highlight fill:#ffffff,stroke:#007aff,color:#1d1d1f,rx:12,ry:12;
classDef decision fill:#e9ecef,stroke:#6c757d,color:#1d1d1f,rx:8,ry:8;
A[打开聊天窗口]
B[仅加载可见区消息UI]
C{滚动窗口}
D[新消息进入可见区, UI被加载]
E[旧消息离开可见区, UI被卸载]
F[可操作]
G[不可操作]
A --> B
B --> C
C --> D
C --> E
D --> F
E --> G
class A,B,C,D,E,F,G highlight;
```
#### 所以可能存在:新版本监听失效的问题
如果窗口尺寸过小,或者一瞬间涌入大量消息,导致新消息一闪而过,那么这条新消息的 UI 会立即被加载然后又被卸载。用于判断是否有新消息的 UI 锚点也会被顶到消息窗口外,导致消息监听功能彻底失效
。
为了解决这个问题,给 4.x 版本做了**自动调整窗口尺寸**的机制。在执行监控任务时,程序会自动将聊天窗口的纵向高度拉至最大,以确保在单屏内可以加载尽可能多的消息 UI,从而最大限度地保留新消息的判断锚点。
短尺寸示意图
容纳更少的消息
长尺寸示意图
容纳更多的消息
:::tip
有些系统因显示器的不同导致最大分辨率上限很小,即使设置到最大尺寸也显示不了几条消息,所以在可能的情况下,如果有一个竖向显示器会比较好;
我后续会找一下有没有不用显示器自定义尺寸的可能
:::
## `GetNextNewMessage`方法的变化
由于上述 UI 渲染机制的根本性改变,`GetNextNewMessage` 方法也不得不进行重大调整。
### 主要变化
- **引入 `callback` 回调参数**:方法不再返回可持久操作的消息对象。
- **获取后关闭窗口**:方法执行完毕后,会自动关闭当前聊天窗口。
### 原因
- **3.9 版本**:当用户滚动聊天记录,一条消息滚出可视范围再滚回来时,它的 UI 对象**依然有效**,可以被程序持续操作。
- **4.x 版本**:任何消息一旦滚出可视范围,其 UI 对象就会被立刻销毁。当它再次滚回可视区时,系统会为它**重新生成一个新的运行时 ID 的 UI 对象**。
`GetNextNewMessage` 方法无法像 3.9 版本一样返回消息对象后,再利用这个对象去进行“引用”、“下载图片”等后续操作。因为当拿到这个对象时,它可能已经因为的滚动而失效了。
**为什么给`GetNextNewMessage`添加 `callback`参数**
目前采用了**回调**模式。所有需要对该消息进行的操作,都必须在 `callback` 函数中完成,例如下载图片、文件、语音转文字等。这样可以确保所有操作都在该消息 UI 对象“存活”的极短窗口期内执行。
:::warning
不能在 `callback` 函数中调用`发送`、`引用`等操作,因为这些操作会将窗口重置到新消息位置,导致后续获取历史消息的操作无法继续进行。
:::
**为什么`GetNextMessage`方法会关闭当前窗口**
在 3.9 版本中,可以先向上滚动获取历史消息,再滚动回底部,因为新消息的判断锚点始终存在。但在 4.x 版本,一旦向上滚动,底部的最新消息 UI 就会被卸载,也就丢失了“最新消息”的判断锚点。此时,没办法判断新消息。
所以目前的“变通方案”是:**获取完消息后直接关闭窗口**。这样,该会话在主列表的“未读”计数会增加,下一次调用 `GetNextNewMessage` 。
> `LoadMoreMessage` 改为 `GetHistoryMessage` 也是同样的原因
## 版本问题
4.x 版本客户端目前在频繁更新,每个小版本可能都会有很大的差异。如无额外说明,我每次发布新的包尽可能支持**最新版本**,如果你们的需求在某个版本稳定使用,尽量也不要升级。
---
url: /blog/iS4c8Ngf5.md
---
# 近期风控规则
:::warning
以下内容来源于网络,仅做参考,不代表官方公告。
:::
## 1. 朋友圈金融内容风控
连续一周内朋友圈发布(金融、区块链、文字链接类)内容达 7 条,聊天时对方窗口会频繁收到风险提示,严重者永久停封。
## 2. 新号高好友数监控
注册一年以内,好友数量在 2000 以上且未绑定银行卡的用户,优先封号检测。
## 3. IP 与位置异常
连续四周不切换 IP 地址,位置信息不变动的用户,视为诈骗风险(即天天待在一个位置没动过的)。
## 4. 群发营销行为
一个月内每周群发超过两次信息的用户,视为营销封号处理。
(公众号或企业号除外)
## 5. 好友增长异常
每周好友增加数量在 20 人以上的用户,视为风险推广营销号。
## 6. 陌生好友高频互动
与多个陌生好友交流(非手机号或二维码添加的好友频繁互动)的用户,容易封号导致追封。
## 7. 点赞 / 朋友圈异常活跃
每天有频繁点赞秒赞行为,或多次发朋友圈,并持续一周记录的用户,
视为频繁广告推广,视为危险用户。
## 8. 同质化内容与微商
同质化内容(包含违规文案以及图片),主要针对微商发布超过一个月以上的用户。
存在诈骗用户会永久停封。
## 9. 大额转账与红包监控
大量转账(每周一万元以上)、大量发群红包(每周超过两千以上)的用户,
视为赌博洗黑钱,需要提供证明,严重者停用账号以及冻结资金。
## 10. 建群数量异常
建群数量超过 20 的用户(群活跃且涉及到金钱方面的)视为非法集资。
## 12. 拉黑频率异常
频繁被拉黑,每个月超过 30 次以上的用户,
视为骚扰以及涉黄,视为封号首选用户。
## 13. 朋友圈被屏蔽过多
朋友圈被人屏蔽超过 100 以上的用户,
很大程度会永久停封。
---
url: /blog/index.md
---
# Blogs
\[2025-12-19] [近期风控规则](/blog/iS4c8Ngf5.md)
\[2025-11-14] [从 3.9 到 4.x 适配机制的变化](/blog/A9dYFme8.md)
---
url: /docs/class/Chat.md
---
# Chat类
## Chat 类属性
If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence
在了解`Chat`类的方法之前,我想先介绍一下为什么要做这个类。
`wxauto(x)`这个项目的原理是模拟人工对微信客户端的操作,拿取到的所有信息都是人眼可见的部分,
所以当我们想监听某个人或群消息的时候,需要把这个人的聊天窗口独立出来,以确保UI元素不会因为微信主窗口切换聊天而丢失,
同时也不需要每来一条信息都切换聊天窗口去获取。
所以,`Chat`类就是用来创建一个独立的聊天窗口,并获取这个聊天窗口的信息。
| 属性 | 类型 | 描述 |
| ---------- | --- | ----------- |
| who | str | 当前子窗口的聊天对象名 |
| chat\_type | str | 聊天窗口类型 |
### 聊天窗口类型 chat\_type
获取当前聊天窗口的类型,返回值为字符串,取值范围如下:
- friend:好友
- group:群聊
- service:客服
- official:公众号
```python
chat_type = chat.chat_type
```
## Chat 类方法
### 显示窗口 Show
```python
chat.Show()
```
### 获取聊天窗口信息 ChatInfo
```python
info = chat.ChatInfo()
```
**返回值**:
- 类型:`dict`
- 描述:聊天窗口信息
- 返回值示例:
```python
# 好友
{'chat_type': 'friend', 'chat_name': '张三'}
# 群聊
{'group_member_count': 500, 'chat_type': 'group', 'chat_name': '工作群'}
# 客服
{'company': '@肯德基', 'chat_type': 'service', 'chat_name': '店长xxx'}
# 公众号
{'chat_type': 'official', 'chat_name': '肯德基'}
```
### ✨@所有人 AtAll
```python
group = '工作群'
content = """
通知:
下午xxxx
xxxx
"""
wx.AtAll(content, group)
```
msg (str): 发送的消息
who (str, optional): 发送给谁. Defaults to None.
exact (bool, optional): 是否精确匹配. Defaults to False.
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | ---- | ----- | ------ |
| msg | str | None | 发送的消息 |
| who | str | None | 发送给谁 |
| exact | bool | False | 是否精确匹配 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否发送成功
### 发送消息 SendMsg
```python
wx.SendMsg(msg="你好", who="张三", clear=True, at="李四", exact=False)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | ----------------------- | ----- | ---------------------------------- |
| msg | str | 必填 | 消息内容 |
| who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** |
| clear | bool | True | 发送后是否清空编辑框 |
| at | Union\[str, List\[str]] | None | @对象,不指定则不@任何人 |
| exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否发送成功
### 发送文件 SendFiles
```python
wx.SendFiles(filepath="C:/文件.txt", who="张三", exact=False)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | --------- | ----- | ---------------------------------- |
| filepath | str\|list | 必填 | 要复制文件的绝对路径 |
| who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** |
| exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否发送成功
### ✨发送语音 SendAudio
\[Beta] 发送语音条消息
```python
wx.SendAudio(filepath="C:/audio.mp3", duration=5)
```
:::warning
该方法为Beta功能,需最新4.1.9+版本客户端,以及需要[额外配置](/read/audio_settings.md),可能暂不稳定
:::
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------------ | --------- | ----- | ---------------------------------- |
| filepath | str\|list | 必填 | 音频文件的路径 |
| duration | int | None | 要发送的时长(秒),例如原文件有10秒,可指定只发3秒 |
| start | int | 0 | 从第几秒开始发送 |
| who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** |
| exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** |
| max\_retries | int | 3 | 最大重试次数 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否发送成功
### 获取当前聊天窗口的所有消息 GetAllMessage
```python
messages = wx.GetAllMessage()
```
**返回值**:
- 类型:List\[[Message](#message-类方法)]
- 描述:当前聊天窗口的所有消息
### ✨添加群成员 AddGroupMembers
```python
wx.ChatWith('工作群')
wx.AddGroupMembers(members=["张三", "李四"])
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------- | ----------------------- | ---- | --------- |
| members | Union\[str, List\[str]] | None | 成员名或成员名列表 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否添加成功
:::tip 注意
该方法与3.9版本参数做出了一些变动,3.9支持传入`group`参数来切换,现在改为配合`ChatWith`方法来切换后再添加
:::
### ✨修改群聊名称 SetGroupName
```python
chat.SetGroupName(value="新群名")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | --- | --- | ------ |
| value | str | 必填 | 新的群聊名称 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否修改成功
### ✨修改群聊备注 SetGroupRemark
```python
chat.SetGroupRemark(value="群备注")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | --- | --- | ------ |
| value | str | 必填 | 新的群聊备注 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否修改成功
### ✨修改群公告 SetGroupAnnouncement
```python
chat.SetGroupAnnouncement(value="群公告内容")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | --- | --- | ------- |
| value | str | 必填 | 新的群公告内容 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否修改成功
### ✨修改我在群里的昵称 SetGroupMyNickname
```python
chat.SetGroupMyNickname(value="我的群昵称")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | --- | --- | ------ |
| value | str | 必填 | 新的群内昵称 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否修改成功
### 关闭窗口 Close
```python
wx.Close()
```
---
url: /docs/class/Message.md
---
# Message类
消息类中,有两个固定属性:
- **`attr`**:消息属性,即消息的来源属性
- system:系统消息
- self:自己发送的消息
- friend:好友消息
- other:其他消息
- **`type`**:消息类型,即消息的内容属性
- time:时间消息
- text:文本消息
- quote:引用消息
- voice:语音消息
- image:图片消息
- video:视频消息
- file:文件消息
- location:位置消息
- link:链接消息
- emotion:表情消息
- merge:合并转发消息
- personal\_card:个人名片消息
- note: 笔记消息
- other:其他消息
而`self`和`friend`又可以跟消息类型所组合,所以所有消息类别如下:
| | [自己发送的消息`SelfMessage`](#selfmessage) | [对方发来的消息`FriendMessage`](#friendmessage) |
| :------------------------------------------------: | :----------------------------------: | :--------------------------------------: |
| [✨文本消息`TextMessage`](#textmessage) | SelfTextMessage | FriendTextMessage |
| [✨引用消息`QuoteMessage`](#quotemessage) | SelfQuoteMessage | FriendQuoteMessage |
| [✨语音消息`VoiceMessage`](#voicemessage) | SelfVoiceMessage | FriendVoiceMessage |
| [✨图片消息`ImageMessage`](#imagemessage) | SelfImageMessage | FriendImageMessage |
| [✨视频消息`VideoMessage`](#videomessage) | SelfVideoMessage | FriendVideoMessage |
| [✨文件消息`FileMessage`](#filemessage) | SelfFileMessage | FriendFileMessage |
| [✨位置消息`LocationMessage`](#locationmessage) | SelfLocationMessage | FriendLocationMessage |
| [✨链接消息`LinkMessage`](#linkmessage) | SelfLinkMessage | FriendLinkMessage |
| [✨表情消息`EmotionMessage`](#emotionmessage) | SelfEmotionMessage | FriendEmotionMessage |
| [✨合并消息`MergeMessage`](#mergemessage) | SelfMergeMessage | FriendMergeMessage |
| [✨名片消息`PersonalCardMessage`](#personalcardmessage) | SelfPersonalCardMessage | FriendPersonalCardMessage |
| [✨笔记消息`NoteMessage`](#notemessage) | SelfNoteMessage | FriendNoteMessage |
| [✨其他消息`OtherMessage`](#othermessage) | SelfOtherMessage | FriendOtherMessage |
简单的使用示例:
```python
from wxautox4.msgs import *
... # 省略获取消息对象的过程
# 假设你获取到了一个消息对象
msg = ...
# 当消息为好友消息时,回复收到
# 方法一:
if msg.attr == 'friend':
msg.reply('收到')
# 方法二:
if isinstance(msg, FriendMessage):
msg.reply('收到')
```
## Message
消息基类,所有消息类型都继承自该类
**属性**(所有消息类型都包含以下属性):
| 属性名 | 类型 | 描述 |
| :-----: | :--: | --------------------- |
| type | str | 消息内容类型 |
| attr | str | 消息来源类型 |
| info | Dict | 消息的详细信息 |
| id | str | 消息UI ID(不重复,切换UI后会变) |
| ✨hash | str | 消息hash值(可能重复,切换UI后不变) |
| sender | str | 消息发送者 |
| content | str | 消息内容 |
### chat\_info
获取该消息所属聊天窗口的信息
```python
chat_info = msg.chat_info()
```
**返回值**:
- 类型:`dict`
- 描述:聊天窗口信息
- 返回值示例:
```python
# 好友
{'chat_type': 'friend', 'chat_name': '张三'}
# 群聊
{'group_member_count': 500, 'chat_type': 'group', 'chat_name': '工作群'}
# 客服
{'company': '@肯德基', 'chat_type': 'service', 'chat_name': '店长xxx'}
# 公众号
{'chat_type': 'official', 'chat_name': '肯德基'}
```
**返回值**:
- 类型:List\[str]
### roll\_into\_view
将消息滚动到视野内
```python
msg.roll_into_view()
```
## SystemMessage
系统消息,没有特殊用法
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ------ | ---- |
| attr | str | system | 消息属性 |
## TimeMessage
时间消息,继承系统消息
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ------------------- | ---------------------- |
| attr | str | system | 消息属性 |
| type | str | time | 消息类别 |
| time | str | yyyy-hh-mm HH:MM:SS | 时间,yyyy-hh-mm HH:MM:SS |
```python
from wxautox4.msgs import TimeMessage
msg = ...
if isinstance(msg, TimeMessage):
print(msg.time)
# 2026-01-01 12:30:00
```
## HumanMessage
人发送的消息,即自己或好友、群友发送的消息
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ------ | ---- |
| attr | str | friend | 消息属性 |
特有属性:
| 属性 | 类型 | 描述 |
| ------ | --- | -------------------- |
| sender | str | **群消息**中,该消息发送人显示的名称 |
### click
点击该消息,一般特殊消息才会有作用,比如图片消息、视频消息等
```python
msg.click()
```
### select\_option
右键该消息,弹出右键菜单,并选择指定选项
```python
msg.select_option("复制")
```
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
### quote
引用该消息,并回复
```python
msg.quote("回复内容")
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------- | ----------------------- | --- | --------- |
| text | str | 无 | 引用内容 |
| at | Union\[List\[str], str] | 无 | @用户列表 |
| timeout | int | 3 | 超时时间,单位为秒 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
### forward
转发该消息
```python
# 开源版
msg.forward("张三")
# ✨附带消息message参数仅plus版本有效
msg.forward("张三", message="转发会议材料给你,请查收")
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------- | ----------------------- | ---- | --------- |
| targets | Union\[List\[str], str] | 无 | 转发对象名称 |
| message | str | None | 要附加的消息 |
| timeout | int | 3 | 超时时间,单位为秒 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
### tickle
拍一拍该消息发送人
```python
msg.tickle()
```
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
### ✨download\_head\_image
下载该消息发送人的头像
```python
msg.download_head_image()
```
### ✨edit\_info
编辑该消息发送人的备注和标签
```python
msg.edit_info(add_tags=['同事', '北京'], remove_tags=['老同学'], remark='张三(北京)')
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------------ | ---------- | ---- | ------------------ |
| add\_tags | List\[str] | None | 要添加的标签列表 |
| remove\_tags | List\[str] | None | 要移除的标签列表 |
| remark | str | None | 要设置的备注,传入空字符串可清除备注 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
**说明**:
`add_tags`、`remove_tags`、`remark` 三个参数不能同时为 `None`,否则返回失败
## FriendMessage
好友、群友发送的消息,即聊天页面中,左侧人员发送的消息。继承自[HumanMessage](#humanmessage)
### sender\_info
获取发送人信息
```python
msg.sender_info()
```
**返回值**:
- 类型:Dict\[str, str]
### ✨delete\_friend
删除该消息发送人(联系人)
```python
msg.delete_friend()
# 删除联系人但不清除聊天记录
msg.delete_friend(clear=False)
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ----- | ---- | ---- | ---------- |
| clear | bool | True | 是否同时清除聊天记录 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
### ✨add\_friend
添加该消息发送人为好友(适用于群聊中尚未添加的成员)
```python
msg.add_friend(addmsg='你好,我是xxx', remark='张三', tags=['同事'], permission='朋友圈')
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ---------- | ---------------------- | ----- | ---------- |
| addmsg | str | None | 添加好友时的附加消息 |
| remark | str | None | 添加好友后的备注 |
| tags | List\[str] | None | 添加好友后的标签 |
| permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 朋友圈权限 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
自己发送的消息,即聊天页面中,右侧自己发送的消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ---- | ---- |
| attr | str | self | 消息属性 |
## TextMessage
文本消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ---- | ---- |
| type | str | text | 消息属性 |
## QuoteMessage
引用消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ----- | ---- |
| type | str | quote | 消息属性 |
特有属性:
| 属性名 | 类型 | 属性值 | 描述 |
| --------------- | --- | ---------- | ---------- |
| quote\_content | str | 被引用消息内容 | 被引用消息内容 |
| quote\_nickname | str | 被引用消息发送人昵称 | 被引用消息发送人昵称 |
### ✨download\_quote\_image
下载引用消息中的图片或视频
```python
msg.download_quote_image()
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| --------- | ----------------- | ---- | --------------------------------------------------------------------- |
| dir\_path | Union\[str, Path] | None | 下载目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](/docs/class/other/#wxparam-类) |
| timeout | int | 10 | 下载超时时间,单位为秒 |
**返回值**:
- Path: 文件路径,成功时返回该类型
- None: 引用内容不是图片或视频时返回该类型
**说明**:
仅当引用内容为图片或视频时可下载,其他类型返回 None
## ImageMessage
图片消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ----- | ---- |
| type | str | image | 消息属性 |
### download
下载图片,返回图片路径
```python
msg.download()
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| --------- | ----------------- | ----- | ------------------------------------------------------ |
| dir\_path | Union\[str, Path] | None | 下载图片的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) |
| original | bool | False | 是否下载原图片,默认否 |
**返回值**:
- Path: 图片路径,成功时返回该类型
- [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型
### ocr
提取图片中的文字
```python
text = msg.ocr(timeout=3)
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------- | --- | --- | --------- |
| timeout | int | 3 | 超时时间,单位为秒 |
## VideoMessage
视频消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ----- | ---- |
| type | str | video | 消息属性 |
### download
下载视频,返回视频路径
```python
msg.download()
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| --------- | ----------------- | ----- | ------------------------------------------------------ |
| dir\_path | Union\[str, Path] | None | 下载视频的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) |
| original | bool | False | 是否下载原视频,默认否 |
| timeout | int | 10 | 下载超时时间 |
**返回值**:
- Path: 视频路径,成功时返回该类型
- [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型
## VoiceMessage
语音消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ----- | ---- |
| type | str | voice | 消息属性 |
### to\_text
将语音消息转换为文本,返回文本内容
```python
msg.to_text()
```
## FileMessage
文件消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ---- | ---- |
| type | str | file | 消息属性 |
### ✨download
下载文件,返回文件路径
```python
msg.download()
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------------ | ----------------- | ----- | ------------------------------------------------------ |
| dir\_path | Union\[str, Path] | None | 下载文件的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) |
| force\_click | bool | False | 是否强制点击文件消息(当自动下载不可用时指定,否则会打开该文件) |
| timeout | int | 10 | 下载超时时间 |
**返回值**:
- Path: 文件路径,成功时返回该类型
- [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型
## ✨LocationMessage
位置消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | -------- | ---- |
| type | str | location | 消息属性 |
## ✨LinkMessage
链接消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ---- | ---- |
| type | str | link | 消息属性 |
### ✨get\_url
获取链接地址
```python
msg.get_url()
```
| 参数名 | 类型 | 默认值 | 描述 |
| ------- | --- | --- | ------ |
| timeout | int | 10 | 下载超时时间 |
**返回值**:
- str: 链接地址
## ✨EmotionMessage
表情消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ------- | ---- |
| type | str | emotion | 消息属性 |
## ✨MergeMessage
合并消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ----- | ---- |
| type | str | merge | 消息属性 |
## ✨PersonalCardMessage
名片消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | -------------- | ---- |
| type | str | personal\_card | 消息属性 |
### ✨add\_friend
添加好友
```python
msg.add_friend()
```
| 参数名 | 类型 | 默认值 | 描述 |
| ---------- | ---------------------- | ----- | ---------- |
| addmsg | str | None | 添加好友时的附加消息 |
| remark | str | None | 添加好友后的备注 |
| tags | List\[str] | None | 添加好友后的标签 |
| permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 添加好友后的权限 |
| timeout | int | 3 | 搜索好友的超时时间 |
**返回值**:
- [`WxResponse`](/docs/class/other/#wxresponse): 是否添加成功
## ✨NoteMessage
笔记消息。继承自[HumanMessage](#humanmessage)
固定属性:
| 属性名 | 类型 | 属性值 | 描述 |
| ---- | --- | ---- | ---- |
| type | str | note | 消息属性 |
### ✨get\_content
获取笔记内容
```python
from pathlib import Path
note_content_list = msg.get_content()
for content in note_content_list:
if isinstance(content, str):
# 文本内容
print(content)
elif isinstance(content, Path):
# 文件路径,文件、视频、图片等
print('文件路径:', content)
```
### ✨save\_files
保存笔记中的文件
```python
msg.save_files()
```
| 参数名 | 类型 | 默认值 | 描述 |
| --------- | ----------------- | ---- | ---- |
| dir\_path | Union\[str, Path] | None | 保存路径 |
**返回值**:
- [`WxResponse`](/docs/class/other/#wxresponse): 是否保存成功,若成功则data为保存的文件路径列表
### ✨to\_markdown
将笔记转换为Markdown格式
```python
msg.to_markdown()
```
| 参数名 | 类型 | 默认值 | 描述 |
| --------- | ----------------- | ---- | ---- |
| dir\_path | Union\[str, Path] | None | 保存路径 |
**返回值**:
- Path: markdown文件路径
## OtherMessage
其他暂未支持解析的消息类型
---
url: /docs/class/Moment.md
---
# ✨朋友圈类
## MomentsWnd
**朋友圈窗口**对象,即的是朋友圈的窗口对象,提供对朋友圈窗口的各种操作,如获取朋友圈内容、刷新、关闭等功能。

```python
from wxautox4 import WeChat
wx = WeChat()
pyq = wx.Moments() # 打开朋友圈并获取朋友圈窗口对象(如果为None则说明你没开启朋友圈,需要在手机端设置)
```
### ✨GetMoments
**获取朋友圈内容**
```python
# 获取当前页面的朋友圈内容
moments = pyq.GetMoments()
# 通过`next_page`参数获取下一页的朋友圈内容
moments = pyq.GetMoments(next_page=True)
```
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :--------: | :--: | :---: | :-----------------------------------: |
| next\_page | bool | False | 是否翻页后再获取 |
| speed1 | int | 3 | 翻页时的滚动速度,根据自己的情况进行调整,建议3-10自行调整 |
| speed2 | int | 1 | 翻页最后时的速度,避免翻页过多导致遗漏所以一般比speed1慢,建议1-3 |
**返回值**:List\[[Moments](#Moments)]
### ✨Refresh
**刷新朋友圈**
```python
pyq.Refresh()
```
### ✨close
**关闭朋友圈**
```python
pyq.Close()
```
### ✨Publish
**发表朋友圈**
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :-------------: | :--: | :--: | :-----------------------: |
| text | str | 必填 | 朋友圈内容 |
| media\_files | list | None | 图片/视频文件路径列表,为None时只发表文字内容 |
| privacy\_config | dict | None | 是否翻页后再获取 |
```python
text = '''oh
今天天气真好
适合出去走走
嘿嘿~
'''
media_files = [
r"D:\Images\Pictures\1.png",
r"D:\Images\Pictures\2.png",
r"D:\Images\Pictures\3.png",
]
privacy_config = {
'privacy': '白名单', # 设置为黑名单模式
'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人
}
# privacy_config = {} # 公开发布,没有任何权限设置
pyq.Publish(text, media_files, privacy_config)
```
## Moments
**朋友圈内容**对象,即的是朋友圈的内容对象,提供对朋友圈的各种操作,如获取朋友圈内容、点赞、评论等功能。

```python
# 获取朋友圈对象
moments = pyq.GetMoments()
# 获取第一条朋友圈
moment = moments[0]
```
### ✨获取朋友圈内容
```python
# 获取朋友圈内容
moment.content
```
### ✨Like
**点赞朋友圈**
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :--: | :--: | :--: | :-------------: |
| like | bool | True | True点赞,False取消赞 |
```python
# 点赞
moment.Like()
# 取消赞
moment.Like(False)
```
**返回值**:无
### ✨Comment
**评论朋友圈**
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :--: | :-: | :-: | :--: |
| text | str | 必填 | 评论内容 |
```python
# 评论
moment.Comment('评论内容')
```
**返回值**:无
---
url: /docs/class/Other.md
---
# 其他类(方法)
### WxResponse
该类用于该项目多个方法的返回值
```python
# 这里假设result为某个方法的WxResponse类型返回值
result: WxResponse = ...
# 判断是否成功
if result:
data = result['data'] # 成功,获取返回数据,大多数情况下为None
else:
print(result['message']) # 该方法调用失败,打印错误信息
```
### WxParam
该类用于该项目的一些参数,在获取`WeChat`实例前,可以通过修改该类的属性来修改默认参数
| 属性 | 类型 | 默认值 | 描述 |
| --------------------------- | ----------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------- |
| LANGUAGE | Literal\['cn', 'cn\_t', 'en'] | 'cn' | 语言设置,简体中文/繁体中文/英文 |
| ENABLE\_FILE\_LOGGER | bool | True | 是否启用日志文件 |
| DEFAULT\_SAVE\_PATH | str | ./wxautox | 下载文件/图片默认保存路径 |
| ✨MESSAGE\_HASH | bool | False | 是否启用消息哈希值用于辅助判断消息,开启后会稍微影响性能 |
| DEFAULT\_MESSAGE\_XBIAS | int | 51 | 头像到消息X偏移量,用于消息定位,点击消息等操作 |
| DEFAULT\_MESSAGE\_YBIAS | int | 30 | 头像到消息Y偏移量,用于消息定位,点击消息等操作 |
| FORCE\_MESSAGE\_XBIAS | bool | False | 是否强制重新自动获取X偏移量,如果设置为True,则每次启动都会重新获取 |
| LISTEN\_INTERVAL | int | 1 | 监听消息时间间隔,单位秒 |
| ✨LISTENER\_EXCUTOR\_WORKERS | int | 4 | 监听执行器线程池大小,根据自身需求和设备性能设置 |
| SEARCH\_CHAT\_TIMEOUT | int | 2 | 搜索聊天对象超时时间,单位秒 |
| ✨NOTE\_LOAD\_TIMEOUT | int | 30 | 微信笔记加载超时时间,单位秒 |
| SEND\_FILE\_TIMEOUT | int | 10 | 发送文件超时时间,单位秒 |
| CHAT\_WINDOW\_SIZE | tuple | (800, 6000) | 监听尺寸,由于4.x版本客户端UI机制是显示的部分才注册UIA控件,所以尽可能拉大窗口显示更多消息来提高判断容错 |
| SEND\_CONTENT\_RATIO | float | 0.9 | 输入内容相似度,用于判断输入框中的内容是否是要发送的内容,避免发送错误内容。因为存在特殊符号转码问题,可能编辑框内容无法100%与实际传入的字符串相等,所以达到相似度即通过校验,才触发发送 |
| GET\_NEXT\_MAX\_QUANTITY | int | 30 | GetNextNewMessage方法最大获取数量 |
| GET\_NEXT\_MAX\_RUNTIME | int | 10 | GetNextNewMessage方法最长获取时间,单位秒 |
| SPECIAL\_SESSION\_NAME | list | \['公众号', '折叠的聊天', 'QQ邮箱提醒', '服务号'] | 特殊聊天会话名称列表 |
| ✨DEFAULT\_STICKERS | list | 见下方列表 | 默认聊天表情列表,包含常用的微信表情符号 |
| CALLBACK\_STOP\_SIGN | str | 'stop' | 回调函数结束标识 |
| INPUT\_AT\_INTERVAL | float | 0.5 | @成员输入间隔时间,单位秒 |
#### DEFAULT\_STICKERS 默认表情列表
WxParam.DEFAULT\_STICKERS 包含了微信的默认表情列表,共计 128 个表情符号:
```python
DEFAULT_STICKERS = [
# 基础表情
'[微笑]', '[撇嘴]', '[色]', '[发呆]', '[得意]', '[流泪]', '[害羞]', '[闭嘴]', '[睡]', '[大哭]',
'[尴尬]', '[发怒]', '[调皮]', '[呲牙]', '[惊讶]', '[难过]', '[囧]', '[抓狂]', '[吐]', '[偷笑]',
'[愉快]', '[白眼]', '[傲慢]', '[困]', '[惊恐]', '[憨笑]', '[悠闲]', '[咒骂]', '[疑问]', '[嘘]',
'[晕]', '[衰]', '[骷髅]', '[敲打]', '[再见]', '[擦汗]', '[抠鼻]', '[鼓掌]', '[坏笑]', '[右哼哼]',
# 表情和手势
'[鄙视]', '[委屈]', '[快哭了]', '[阴险]', '[亲亲]', '[可怜]', '[笑脸]', '[生病]', '[脸红]', '[破涕为笑]',
'[恐惧]', '[失望]', '[无语]', '[嘿哈]', '[捂脸]', '[奸笑]', '[机智]', '[皱眉]', '[耶]', '[吃瓜]',
'[加油]', '[汗]', '[天啊]', '[Emm]', '[社会社会]', '[旺柴]', '[好的]', '[打脸]', '[哇]', '[翻白眼]',
# 符号和物品
'[666]', '[让我看看]', '[叹气]', '[苦涩]', '[裂开]', '[嘴唇]', '[爱心]', '[心碎]', '[拥抱]', '[强]',
'[弱]', '[握手]', '[胜利]', '[抱拳]', '[勾引]', '[拳头]', '[OK]', '[合十]', '[啤酒]', '[咖啡]',
# 庆祝和节日
'[蛋糕]', '[玫瑰]', '[凋谢]', '[菜刀]', '[炸弹]', '[便便]', '[月亮]', '[太阳]', '[庆祝]', '[礼物]',
'[红包]', '[發]', '[福]', '[烟花]', '[爆竹]', '[猪头]', '[跳跳]', '[发抖]', '[转圈]', '[天啊]',
# 其他
'[强]', '[汗]', '[握手]',
]
```
这些表情可以在发送消息时使用,例如:
```python
from wxautox4 import WeChat
wx = WeChat()
msg_list = wx.ChatWith('文件传输助手')
# 发送表情
msg_list.SendMsg('[微笑][拥抱][爱心]')
```
示例:
```python
from wxautox4.param import WxParam
# 设置8个监听线程
WxParam.LISTENER_EXCUTOR_WORKERS = 8
# 设置搜索聊天超时时间为10秒
WxParam.SEARCH_CHAT_TIMEOUT = 10
# 自定义表情列表(添加自定义表情)
WxParam.DEFAULT_STICKERS = [
'[微笑]', '[撇嘴]', '[色]',
# ... 添加更多表情
]
```
### WeChatImage
```python
from wxautox4.ui.component import WeChatImage
imgwnd = WeChatImage()
```
微信图片/视频**窗口**类,用于处理微信图片或图片窗口的各种操作

#### save
**保存图片/视频**
参数:
| 参数名 | 类型 | 默认值 | 说明 |
| :-------- | :-- | :--- | :--------------------- |
| dir\_path | str | None | 保存的目录路径,None即本地路径下自动生成 |
| timeout | int | 10 | 保存超时时间 |
返回值:Path,保存的文件路径
#### close
**关闭图片/视频窗口**
参数:无
返回值:无
---
url: /docs/class/Session.md
---
# Session类
## Session 类方法
```python
... # 此处省略wx对象的初始化
sessionbox = wx.SessionBox
```
### ✨search
**仅用于触发搜索**,返回搜索结果,不会进行下一步的动作,可自行处理搜索结果
**示例**:
```python
search_result = sessionbox.search('张三')
for item in search_result:
print(f"type: {item.type}, text: {item.text}")
```
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :---------: | :----------------: | :---: | :----------------: |
| keywords | str | False | 搜索关键词 |
| force | bool | False | 是否强制等待,避免未搜索到就返回结果 |
| force\_wait | Union\[float, int] | 0.5 | 强制等待时间,秒 |
**返回值**:
List\[[SearchResultElement](#searchresultelement)]
### go\_top
回到会话列表顶部
**参数**:无
**返回值**:无
### roll\_up
向上滚动会话列表
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :-: | :-: | :-: | :-----------: |
| n | int | 5 | 滚动次数,自行调节滚动幅度 |
**返回值**:无
### roll\_down
向下滚动会话列表
**参数**:
| 参数 | 类型 | 默认值 | 说明 |
| :-: | :-: | :-: | :-----------: |
| n | int | 5 | 滚动次数,自行调节滚动幅度 |
**返回值**:无
## SessionElement

| 属性 | 类型 | 描述(以上图为例) |
| ---------- | --------------- | -------------------- |
| name | str | 会话名(wxauto三群) |
| time | str | 时间(2025-05-14 14:41) |
| content | str | 消息内容(\[10条]天道酬勤:这..) |
| ismute | bool | 是否消息免打扰(True) |
| isnew | bool | 是否有新消息(True) |
| new\_count | int | 新消息数量(10) |
| info | Dict\[str, Any] | 会话信息(包含了上述所有属性的dict) |
```python
from wxautox4 import WeChat
wx = WeChat()
sessions = wx.GetSession()
session = sessions[0] # 获取第一个会话
```
### click
**点击会话**,即切换到这个聊天窗口
参数:无
返回值:无
示例:
```python
session.click()
```
### double\_click
**双击会话**,即将这个聊天窗口独立出去
参数:无
返回值:无
示例:
```python
session.double_click()
```
### ✨delete
**删除会话**
\{\{\< callout type="warning" >}}
请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!!
请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!!
请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!!
\{\{\< /callout >}}
参数:无
返回值:[`WxResponse`](/docs/class/other/#wxresponse)
示例:
```python
session.delete()
```
### ✨hide
**隐藏会话**
参数:无
返回值:[`WxResponse`](/docs/class/other/#wxresponse)
示例:
```python
session.hide()
```
### ✨select\_option
**选择会话选项**,即右键点击会话,然后选择某个选项
参数:
| 参数名 | 类型 | 说明 |
| :----- | :-- | :------------------ |
| option | str | 选项名称,例如“置顶”、“标为未读”等 |
返回值:[`WxResponse`](/docs/class/other/#wxresponse)
## ✨SearchResultElement
会话搜索结果对象
| 属性 | 类型 | 描述 |
| ---- | --- | ----------------------------------------------------- |
| type | str | 搜索结果对象的UI类型,一般`pane`是分割线或者标签,不可交互;`listitem`是搜索结果,可交互 |
| text | str | 搜索结果,有时候卡可能为空,建议使用`get_all_text`方法进行完整判断 |
### get\_all\_text
获取该结果对象的所有UI文字内容,用于判断是不是你要的搜索结果
**参数**:无
**返回值**:List\[str]
### click
点击该搜索对象
**参数**:无
**返回值**:无
### close
关闭搜索窗口,关闭后本次搜索的所有对象均不可再交互
**参数**:无
**返回值**:无
---
url: /docs/class/WeChat.md
---
# WeChat类
If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence
:::info 🌐
**WeChat** 类继承了 [`Chat`类](/docs/class/Chat.md) 的所有方法,有关聊天框内的操作,请参考 [`Chat`类](/docs/class/Chat.md) 的文档。
:::
## WeChat 类方法
### 初始化参数
| 参数 | 类型 | 默认值 | 描述 |
| ------- | ------------------------ | ----- | ------------------------------ |
| resize | bool | True | 是否自动调整窗口尺寸,默认是 |
| debug | bool | False | 是否开启调试模式 |
| version | Literal\['微信', 'WeChat'] | '微信' | 微信客户端版本,设置为`'WeChat'`可支持国际版客户端 |
```python
from wxautox4 import WeChat
wx = WeChat()
```
### ✨保持程序运行 KeepRunning
由于wxautox4使用守护线程来监听消息,当程序仅用于监听模式时,主线程会退出,因此需要调用此方法来保持程序运行
```python
from wxautox4 import WeChat
wx = WeChat()
wx.AddListenChat('张三', callback=lambda msg, chat: ...)
# 保持程序运行,确保正常监听
wx.KeepRunning()
```
### 获取当前会话列表 GetSession
```python
sessions = wx.GetSession()
for session in sessions:
print(session.info)
```
**返回值**:
- 类型:List\[[SessionElement](/docs/class/other/#sessionelement)]
- 描述:当前会话列表
### 打开聊天窗口 ChatWith
```python
wx.ChatWith(who="张三", exact=False)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----- | ---- | ----- | ----------- |
| who | str | 必填 | 要聊天的对象 |
| exact | bool | False | 搜索好友时是否精确匹配 |
**返回值**:无
### ✨获取子窗口实例 GetSubWindow
```python
chat = wx.GetSubWindow(nickname="张三")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | --- | --- | ---------- |
| nickname | str | 必填 | 要获取的子窗口的昵称 |
**返回值**:
- 类型:[`Chat`](/docs/class/Chat.md)
- 描述:子窗口实例
### ✨获取所有子窗口实例 GetAllSubWindow
```python
chats = wx.GetAllSubWindow()
```
**返回值**:
- 类型:List\[[`Chat`](/docs/class/Chat.md)]
- 描述:所有子窗口实例的列表
### ✨添加监听聊天窗口 AddListenChat
```python
def on_message(msg, chat):
print(f"收到来自 {chat} 的消息: {msg.content}")
wx.AddListenChat(nickname="张三", callback=on_message)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | ------------------------------------------------------------------------------ | --- | ------------------------------------------------------------------------ |
| nickname | str | 必填 | 要监听的聊天对象 |
| callback | Callable\[\[[Message](/docs/class/message/), [Chat](/docs/class/chat/)], None] | 必填 | 回调函数,参数为([Message](/docs/class/message/)对象, [Chat](/docs/class/chat/)对象) |
**返回值**:
- 成功时:
- 类型:[Chat](/docs/class/chat/)
- 描述:该监的听子窗口实例
- 失败时:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:执行结果,成功时包含监听名称
### ✨移除监听聊天 RemoveListenChat
```python
wx.RemoveListenChat(nickname="张三")
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | --- | --- | ---------- |
| nickname | str | 必填 | 要移除的监听聊天对象 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:执行结果
### ✨开始监听 StartListening
```python
wx.StartListening()
```
**参数**:无
**返回值**:无
### ✨停止监听 StopListening
```python
wx.StopListening()
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------ | ---- | ---- | --------- |
| remove | bool | True | 是否移出所有子窗口 |
**返回值**:无
### 切换到聊天页面 SwitchToChat
```python
wx.SwitchToChat()
```
**返回值**:无
### 切换到联系人页面 SwitchToContact
```python
wx.SwitchToContact()
```
**返回值**:无
### ✨进入朋友圈 Moments
```python
moments = wx.Moments(timeout=3)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------- | --- | --- | ------- |
| timeout | int | 3 | 等待时间(秒) |
**返回值**:
- 类型:[`MomentsWnd`](/docs/class/moment)
- 描述:朋友圈窗口实例
### ✨发送朋友圈 PublishMoment
```python
text = '''oh
今天天气真好
适合出去走走
嘿嘿~
'''
media_files = [
r"D:\Images\Pictures\1.png",
r"D:\Images\Pictures\2.png",
r"D:\Images\Pictures\3.png",
]
privacy_config = {
'privacy': '白名单', # 设置为黑名单模式
'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人
}
# privacy_config = {} # 公开发布,没有任何权限设置
wx.PublishMoment(text, media_files, privacy_config)
```
### ✨获取好友申请 GetNewFriends
```python
newfriends = wx.GetNewFriends(acceptable=True)
for new in newfriends:
print(f"{new.name} : {new.msg}")
new.accept(remark='备注名', tags='朋友') # 自动接受好友请求,并添加备注和标签
wx.SwitchToChat() # 操作完成后切换回聊天页面
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----------- | ---- | ---- | --------------------------- |
| acceptable | bool | True | 是否过滤掉已接受的好友申请 |
| roll\_times | int | 0 | 向下滚动的次数,为了加载更多好友请求,一般情况下用不到 |
**返回值**:
- 类型:List\[[`NewFriendElement`](/docs/class/other/#newfriendelement)]
- 描述:新的好友申请列表
**示例**:
```python
newfriends = wx.GetNewFriends(acceptable=True)
tags = ['标签1', '标签2']
for friend in newfriends:
remark = f'备注{friend.name}'
friend.accept(remark=remark, tags=tags) # 接受好友请求,并设置备注和标签
```
### ✨添加新的好友 AddNewFriend
```python
wx.AddNewFriend(keywords="张三", addmsg="我是小明", remark="老张", tags=["同学"], permission="朋友圈", timeout=5)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 | |
| ---------- | ---------------------- | ----- | -------------------- | ------------- |
| keywords | str | 必填 | 搜索关键词,可以是昵称、微信号、手机号等 | |
| addmsg | str | None | 添加好友时的附加消息 | |
| remark | str | None | 添加好友后的备注 | |
| tags | List\[str] | None | 添加好友后的标签 | |
| permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 添加好友后的权限 | |
| timeout | int | float | 5 | 查找好友超时时间,默认5秒 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:添加好友的结果
### ✨修改好友信息 EditFriendInfo
修改好友的备注和标签
```python
wx.EditFriendInfo(add_tags=['同事', '北京'], remove_tags=['老同学'], remark='张三(北京)')
```
**参数**:
| 参数名 | 类型 | 默认值 | 描述 |
| ------------ | ---------- | ---- | ------------------ |
| add\_tags | List\[str] | None | 要添加的标签列表 |
| remove\_tags | List\[str] | None | 要移除的标签列表 |
| remark | str | None | 要设置的备注,传入空字符串可清除备注 |
| tag\_wait | float | 0.2 | 标签操作等待时间(秒) |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:操作结果
**说明**:
`add_tags`、`remove_tags`、`remark` 三个参数不能同时为 `None`,否则返回失败
### ✨获取下一个聊天窗口新消息 GetNextNewMessage
```python
def callback(msg):
if msg.type == 'image':
msg.download()
wx.GetNextNewMessage(callback=callback)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------------ | --------------------------------------------------- | ----- | ------------------------------------------------ |
| filter\_mute | bool | False | 是否过滤消息免打扰 |
| callback | Callable\[\[[Message](/docs/class/message/)], None] | None | 获取消息时的操作,**不要在此处执行发送消息等操作,会使消息窗口重置,无法正常获取到所有消息** |
**返回值**:
- 类型:Dict\[str, List\[[Message](/docs/class/message/)]]
- 描述:消息列表,键为聊天名称,值为消息列表
- 示例:
```python
{'chat_name': 'wxauto交流',
'chat_type': 'group',
'remark': '群备注名', # 仅当有备注名时存在
'msg': [
,
,
,
,
...
]
}
```
### ✨获取最近群聊名称列表 GetAllRecentGroups
```python
groups = wx.GetAllRecentGroups()
if groups:
print(groups)
else:
print('获取失败')
```
**返回值**:
- 类型:WxResponse | List\[str]: 失败时返回WxResponse,成功时返回所有最近群聊列表
### ✨发送链接卡片 SendUrlCard
```python
wx.SendUrlCard(url="https://example.com", friends="张三", timeout=10)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ------- | ----------------------- | ---- | ------------------- |
| url | str | 必填 | 链接地址 |
| friends | Union\[str, List\[str]] | None | 发送对象,可以是单个用户名或用户名列表 |
| message | str | None | 附加消息,默认不发送 |
| timeout | int | 10 | 等待时间(秒) |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:发送结果
### ✨获取历史消息 GetHistoryMessage
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | --------------------------------------------------- | ---- | --------------- |
| n | int | 必填 | 获取数量 |
| callback | Callable\[\[[Message](/docs/class/message/)], None] | None | 消息回调函数 |
| interval | float | 0.2 | 滚动间隔时间 |
| speed | int | 1 | 滚动速度 |
| goback | bool | True | 获取结束后是否返回最新消息位置 |
```python
def callback(msg):
if msg.type == 'image':
msg.download()
wx.ChatWith('工作群') # 先切换到要获取记录的聊天窗口
msgs = wx.GetHistoryMessage(n=50, callback=callback) # 获取50条消息
```
callback函数支持设置停止条件,当回调函数返回值为 `WxParam.CALLBACK_STOP_SIGN` 时停止
```python
from wxautox4 import WxParam
from wxautox4.msgs import TimeMessage # v40.1.9及以上版本支持TimeMessage对象
# 示例:如果找到带有“通知”字眼的消息则停止获取
def history_callback(msg):
# 当消息内容里包含特定字词时停止
if '通知' in msg.content:
print('获取到包含“通知”的消息,停止获取历史消息')
return WxParam.CALLBACK_STOP_SIGN
# 当消息时间超过特定时间时停止 # v40.1.9及以上版本支持TimeMessage对象
if isinstance(msg, TimeMessage) and msg.time < '2026-02-01':
print('获取到早于2026年2月1日的消息,停止获取历史消息')
return WxParam.CALLBACK_STOP_SIGN
wx.GetHistoryMessage(n=100, callback=history_callback)
```
> \[!info]
>
> 1. v40.1.8及以上版本支持CALLBACK\_STOP\_SIGN作为停止条件
> 2. v40.1.9及以上版本支持TimeMessage对象
**返回值**:
- 类型:List\[[Message](/docs/class/message/)]
### ✨获取好友列表 GetFriendDetails
```python
# 获取前10个好友详情信息
messages = wx.GetFriendDetails(n=10)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ----------------- | ----------------------- | ------- | ------------------------------------------------------- |
| n | int | None | 获取前n个好友详情信息,None表示获取所有好友 |
| timeout | int | 0xFFFFF | 获取超时时间(秒),超过该时间则直接返回结果 |
| save\_head\_image | bool | False | 是否保存头像图片 |
| save\_head\_wait | int | 0 | 保存头像等待时间 |
| interval | int | 0 | 获取间隔时间 |
| callback | Callable\[\[str], bool] | None | 回调函数,参数为好友昵称,用于定位开始获取的位置,返回True表示从该好友开始获取,返回False表示继续查找 |
| speed | int | 3 | 滚动速度 |
| max\_repeat | int | 10 | 最大重复次数 |
**返回值**:
- 类型:List\[dict]
- 描述:所有好友详情信息
```python
# 案例
{'头像': 'D:\\myproject\\wxautox文件下载\\头像\\202511210038064171.png',
'昵称': '张三',
'微信号': 'zhangsan',
'标签': 'wxauto',
'共同群聊': '3个',
'个性签名': '天道酬勤',
'来源': '通过扫一扫添加'}
```
**callback 示例**:
```python
# 示例1:从昵称为"陈"开头的好友开始获取
def callback(name):
if name.startswith('陈'):
return True
wx.GetFriendDetails(callback=callback)
```
```python
# 示例2:使用re实现更复杂的定位逻辑
import re
def callback(name):
# 从张三或者李四开始
if re.match(r'张三|李四', name):
return True
wx.GetFriendDetails(callback=callback)
```
```python
# 示例3:使用匿名函数,从“陈”开头的好友开始获取
wx.GetFriendDetails(10, callback=lambda name: name.startswith('李'))
```
> \[!warning]
> 该方法运行时间较长,约0.3\~0.5秒一个好友的速度,好友多的话可将n设置为一个较小的值,先测试一下
### ✨创建群聊 CreateGroup
```python
wx.CreateGroup(contacts=["张三", "李四", "王五"])
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| -------- | ---------- | --- | ----- |
| contacts | List\[str] | 必填 | 联系人列表 |
**返回值**:
- 类型:[`WxResponse`](/docs/class/other/#wxresponse)
- 描述:是否创建成功
### ✨是否在线 IsOnline
```python
wx.IsOnline()
```
**返回值**:
- 类型:bool
### ✨获取我的信息 GetMyInfo
获取自己的微信号等信息
```python
wx.GetMyInfo()
```
**返回值**:
- 类型:Dict\[str, str]
### ✨获取对话框 GetDialog
获取当前窗口的对话框
```python
dialog = wx.GetDialog(wait=3)
```
**参数**:
| 参数 | 类型 | 默认值 | 描述 |
| ---- | --- | --- | --------- |
| wait | int | 3 | 隐性等待时间(秒) |
**返回值**:
- 类型:`WeChatDialog`
- 描述:对话框对象,可对其进行相应处理
---
url: /docs/concepts.md
---
# 三、核心类概念
## Chat
\{\{\< cards >}}
\{\{\< card link="/docs/class/chat" title="👉查看Chat类文档" tag="点击跳转" tagType="info" >}}
\{\{\< /cards >}}
`Chat` 类代表一个微信聊天窗口实例,提供了与聊天相关的操作方法,用于对**微信聊天窗口**进行各种操作,后续文档以变量名`chat`作为该类对象。
## WeChat
\{\{\< cards >}}
\{\{\< card link="/docs/class/wechat" title="👉查看WeChat类文档" tag="点击跳转" tagType="info" >}}
\{\{\< /cards >}}
`WeChat` 类是本项目的主要入口点,它继承自 `Chat` 类,代表微信主窗口实例,用于对**微信主窗口**进行各种操作,后续文档以变量名`wx`作为该类对象。
### 初始化参数
| 参数 | 类型 | 默认值 | 描述 |
| -------- | ---- | ----- | ---------------- |
| nickname | str | None | 微信昵称,用于定位特定的微信窗口 |
| debug | bool | False | 是否开启调试模式 |
```python
wx = WeChat(nickname="张三")
```
## Message
\{\{\< cards >}}
\{\{\< card link="/docs/class/message" title="👉查看Message类文档" tag="点击跳转" tagType="info" >}}
\{\{\< /cards >}}
`Message`类代表微信聊天中的消息,分为两个概念:
- 消息**内容**类型(`type`):文本消息、图片消息、文件消息、语音消息、卡片消息等等
- 消息**来源**类型(`attr`):系统消息、时间消息、自己发送的消息、对方发来的消息
```python
# 导入你想要的消息类型
from wxautox4.msgs import (
TextMessage,
FriendMessage,
FriendTextMessage,
...
)
# 假设你获取到了一个消息对象
msg: Message = ...
# 如果是对方发来的消息,则回复收到
if isinstance(msg, FriendMessage):
msg.reply("收到")
```
| type↓ attr→ | 自己的消息`SelfMessage` | 对方的消息`FriendMessage` |
| :-----------------------: | :-----------------------: | :-------------------------: |
| 文本消息`TextMessage` | `SelfTextMessage` | `FriendTextMessage` |
| 引用消息`QuoteMessage` | `SelfQuoteMessage` | `FriendQuoteMessage` |
| 语音消息`VoiceMessage` | `SelfVoiceMessage` | `FriendVoiceMessage` |
| 图片消息`ImageMessage` | `SelfImageMessage` | `FriendImageMessage` |
| 视频消息`VideoMessage` | `SelfVideoMessage` | `FriendVideoMessage` |
| 文件消息`FileMessage` | `SelfFileMessage` | `FriendFileMessage` |
| 位置消息`LocationMessage` | `SelfLocationMessage` | `FriendLocationMessage` |
| 链接消息`LinkMessage` | `SelfLinkMessage` | `FriendLinkMessage` |
| 表情消息`EmotionMessage` | `SelfEmotionMessage` | `FriendEmotionMessage` |
| 合并消息`MergeMessage` | `SelfMergeMessage` | `FriendMergeMessage` |
| 名片消息`PersonalCardMessage` | `SelfPersonalCardMessage` | `FriendPersonalCardMessage` |
| 其他消息`OtherMessage` | `SelfOtherMessage` | `FriendOtherMessage` |
## WxResponse
该类用于该项目多个方法的返回值
```python
# 这里假设result为某个方法的WxResponse类型返回值
result: WxResponse = ...
# 判断是否成功
if result:
data = result['data'] # 成功,获取返回数据,大多数情况下为None
else:
print(result['message']) # 该方法调用失败,打印错误信息
```
## WxParam
- **ENABLE\_FILE\_LOGGER** ( bool ) :是否启用日志文件,默认True
- **DEFAULT\_SAVE\_PATH** ( str ) :下载文件/图片默认保存路径,默认为当前工作目录下的`wxautox`文件下载文件夹
- **✨MESSAGE\_HASH** ( bool ) :是否启用消息哈希值用于辅助判断消息,开启后会稍微影响性能,默认False
- **DEFAULT\_MESSAGE\_XBIAS** ( int ) :头像到消息X偏移量,用于消息定位,点击消息等操作,默认51
- **FORCE\_MESSAGE\_XBIAS** ( bool ) :是否强制重新自动获取X偏移量,如果设置为True,则每次启动都会重新获取,默认False
- **LISTEN\_INTERVAL** ( int ) :监听消息时间间隔,单位秒,默认1
- **✨LISTENER\_EXCUTOR\_WORKERS** ( int ) :监听执行器线程池大小,根据自身需求和设备性能设置,默认4
- **SEARCH\_CHAT\_TIMEOUT** ( int ) :搜索聊天对象超时时间,单位秒,默认5
```python
from wxautox import WxParam
WxParam.LISTENER_EXCUTOR_WORKERS = 8
...
```
---
url: /docs/example.md
---
# 五、使用示例
### 1. 基本使用
```python title="demo.py"
from wxautox4 import WeChat
# 初始化微信实例
wx = WeChat()
# 切换到文件传输助手
target = "文件传输助手"
wx.ChatWith(target)
# 查看当前窗口信息
chatinfo = wx.ChatInfo()
print(f"当前窗口信息:{chatinfo}")
# 发送消息
if chatinfo.get('chat_name') == target: # 先判断是否为要发送的人
wx.SendMsg("你好")
# 获取当前聊天窗口消息
msgs = wx.GetAllMessage()
for msg in msgs:
print(f"消息内容: {msg.content}, 消息类型: {msg.type}")
```
### 2. 监听消息
```python
from wxautox4 import WeChat
from wxautox4.msgs import FriendMessage
import time
wx = WeChat()
# 消息处理函数
def on_message(msg, chat):
"""消息回调函数"""
print(f'收到来自 {chat} 的消息: {msg.content}', flush=True)
# 自动回复好友的消息,过滤自己的消息
if isinstance(msg, FriendMessage):
chat.SendMsg('收到')
# 添加消息监听
wx.AddListenChat('好友昵称', on_message)
# 保持运行
wx.KeepRunning()
```
```python
# ... 程序运行一段时间后 ...
# 移除监听
wx.RemoveListenChat(nickname="张三")
```
### 3. ✨处理好友申请
```python title="accept_new_friend.py"
from wxautox4 import WeChat
wx = WeChat()
# 获取新的好友申请
newfriends = wx.GetNewFriends(acceptable=True)
# 处理好友申请
tags = ['同学', '技术群']
for new in newfriends:
message = new.content
new.accept(tags=tags) # 接受好友请求,并设置备注和标签
```
### 4. ✨发送朋友圈
:::warning ⚠️ 请谨慎使用,不建议频繁发送朋友圈,此行为可能会被认定过度营销而触发帐号风控!
:::
```python title="send_moment.py"
from wxautox4 import WeChat
wx = WeChat()
text = '''oh
今天天气真好
适合出去走走
嘿嘿~
'''
media_files = [
r"D:\Images\Pictures\1.png",
r"D:\Images\Pictures\2.png",
r"D:\Images\Pictures\3.png",
]
privacy_config = {
'privacy': '白名单', # 设置为黑名单模式
'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人
}
# privacy_config = {} # 公开发布,没有任何权限设置
wx.PublishMoment(text, media_files, privacy_config)
```
---
url: /docs/index.md
---
# Overview
---
url: /docs/issues.md
---
# 六、常见问题
## 会封号吗
**该项目基于Windows官方API开发,不涉及任何侵入、破解、抓包微信客户端应用,完全以人操作微信的行为执行操作**
但是如果你有以下行为,**即使手动操作**也有风控的风险:
- 曾用hook类或webhook类微信工具,如dll注入、itchat及其衍生产品
- 频繁且大量的发送消息、添加好友等,导致风控
- 高频率发送机器人特征明显的消息,导致**被人举报**,致使行为风控
- 扫码手机与电脑客户端不在同一个城市,导致异地风控
- 低权重账号做太多动作,低权重账号可能包括:
- 新注册账号
- 长期未登录或不活跃账号
- 未实名认证账号
- 未绑定银行卡账号
- 曾被官方处罚的账号
- ...
## 支持Linux/Mac吗
不支持,基于windows官方API开发,只支持windows系统
## 激活码有时间限制吗?
一年内可激活,激活后提供一年更新,使用没有时间限制,更新过期后,已获取的版本仍可继续使用。
## 激活码能用几次
一个激活码只能用于一台电脑,不可解绑,如遇问题可联系 [help@wxauto.org](mailto:help@wxauto.org?subject=遇到激活问题:\&body=请详细描述您的问题,如果有报错截图就更好了😊)
## Plus版本后台模式是什么
后台模式即不依赖鼠标移动,绝大部分场景无需将微信调到前台窗口即可进行操作,但是有些操作必须要微信在前台才可以操作成功,例如获取发送者详情信息等;
大部分场景下:
- 不抢占鼠标
- 执行速度快
- 窗口不必在桌面顶部也能操作
:::info 注:
因为原理上还是ui自动化操作,所以某些个别场景可能需要激活微信窗口才可以操作
:::
## 支持自动接收红包/转账吗?
不支持,以后也不会支持,涉及金钱类的都不会支持
## 为什么安装成功但是无法导入
检查下安装wxautox的环境与你运行环境是否同一个python环境。
PyCharm默认会给你的项目创建一个虚拟环境,需要在虚拟环境中安装才可以调用
> 如果不清楚如何使用虚拟环境安装,可问 AI “怎么用pycharm的虚拟环境安装本地离线whl包”
## 支持企业微信吗
不支持。法律风险较高,影响腾讯收入,严抓
> 如果你的企业开启了在个人微信中接受企业消息的功能,可以在个人微信手动将企业微信群拖出来使用wxauto监听模式进行操作

## 有什么限制
- 不可以发布到公共平台
- 不可以做违法的事情
- 个人或内部使用,不允许商业软件厂商进行集成
## 会持续更新吗
订阅期为1年,订阅期内更新免费,订阅过期后不提供更新服务,已获取的版本仍可继续使用
## 可以最小化吗
可以但是**不建议**。
wxauto项目本身是ui自动化,最小化会导致窗口ui绘制更新慢,自动化效率低
---
url: /docs/start.md
---
# 二、快速开始
## 快速开始
### 获取微信实例
```python
from wxautox4 import WeChat
# 初始化微信实例
wx = WeChat()
```
### 发送消息
```python
# 发送消息
wx.SendMsg("你好", who="文件传输助手")
```
### 获取当前聊天窗口消息
```python
# 获取当前聊天窗口消息
msgs = wx.GetAllMessage()
for msg in msgs:
print('==' * 30)
print(f"msg.content")
```
:::tip ✅
恭喜,你已经成功进行了自动化操作,接下来你可以继续探索更多功能。
:::
---
url: /index.md
---
# wxauto
欢迎来到 wxauto 文档!
If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence
***
[安装与激活](/docs/install.md)
[快速开始](/docs/start.md)
[Skill](/plugin/skills.md)
[Claude Code](/plugin/mcp.md)
[Restful](/plugin/http.md)
[零开发 UI 面板](https://wxbot.siverking.online?utm_source=wxauto_docs\&utm_medium=homepage\&utm_campaign=ui_panel)
***
[返回主站](https://wxauto.org)
---
url: /plugin/http.md
---
# HTTP服务
项目地址:[https://github.com/cluic/wxauto-restful-api](https://github.com/cluic/wxauto-restful-api)
基于 FastAPI 开发的 HTTP API 服务,为 wxautox4 提供完整的 RESTful API 接口。支持消息发送、群管理、好友管理等微信自动化功能。
### 安装依赖
```bash
# 安装wxautox4
pip install wxautox4
# 或使用requirements.txt
pip install -r requirements.txt
```
> \[!NOTE]
> 本项目专门为wxautox4设计,需要wxautox4 Plus版本
> \[!WARNING]
>
> **激活要求**:wxautox4需要激活后才能使用。请先使用以下方式激活:
>
> ```bash
> # 检查激活状态
> wxautox4 -k
>
> # 激活
> wxautox4 -a 激活码
> ```
## 配置管理
### 配置文件
项目使用 `config.yaml` 作为主配置文件,所有服务器设置都通过此文件管理:
```yaml
server:
host: "0.0.0.0" # 服务器监听地址
port: 8000 # 服务器监听端口
reload: true # 是否启用热重载
auth:
token: "your-secret-token-here" # API认证密钥
database:
type: "sqlite" # 数据库类型
sqlite:
path: "./data/wxautox.db" # SQLite数据库路径
```
### 手动模式
```bash
# 启动服务(使用配置文件中的设置)
python run.py
# 或使用uvicorn直接启动
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
```
## 文档
### API 文档
启动服务后,可以通过以下地址访问交互式 API 文档(请自行修改端口):
- **Swagger UI**: [http://localhost:8000/docs](http://localhost:8000/docs)
- **ReDoc**: [http://localhost:8000/redoc](http://localhost:8000/redoc)
## 快速开始
### 1. 安装依赖
```bash
# 安装 wxautox4(需要 Plus 版本)
pip install wxautox4
# 或使用项目配置
uv sync
```
### 2. 激活 wxautox4
```bash
# 检查激活状态
wxautox4 -k
# 激活 wxautox4
wxautox4 -a your-activation-code
```
> **重要**: wxautox4 需要激活后才能使用
### 3. 配置服务
编辑 `config.yaml` 文件:
```yaml
server:
host: "0.0.0.0"
port: 8000
reload: true
auth:
token: "your-secret-token-here" # 修改为你的 token
```
### 4. 启动服务
```bash
# 使用 bat 脚本启动(Windows)
run.bat
# 使用 Python 启动
python run.py
# 或使用 uvicorn
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
### 6. 访问 API 文档
打开浏览器访问: [http://localhost:8000/docs](http://localhost:8000/docs) (自行修改端口号)
## API 接口
所有接口都遵循统一的响应格式,详见 [API 响应格式规范](https://github.com/cluic/wxauto-restful-api/blob/main/docs/API_RESPONSE_FORMAT.md)。
### 微信功能接口
#### 初始化
- `POST /v1/wechat/initialize` - 初始化微信实例
- `GET /v1/wechat/status` - 获取微信状态
#### 消息功能
- `POST /v1/wechat/send` - 发送消息
- `POST /v1/wechat/sendfile` - 发送文件
- `POST /v1/wechat/sendurlcard` - 发送 URL 卡片
- `POST /v1/wechat/getallmessage` - 获取当前窗口消息
- `POST /v1/wechat/gethistorymessage` - 获取历史消息
- `POST /v1/wechat/getnextnewmessage` - 获取新消息
#### 会话管理
- `POST /v1/wechat/getsession` - 获取会话列表
- `POST /v1/wechat/getsubwindow` - 获取指定子窗口
- `POST /v1/wechat/getallsubwindow` - 获取所有子窗口
- `POST /v1/wechat/chatwith` - 切换聊天窗口
#### 好友管理
- `POST /v1/wechat/getfriends` - 获取好友列表
- `POST /v1/wechat/getmyinfo` - 获取我的信息
#### 群聊管理
- `POST /v1/wechat/getrecentgroups` - 获取群聊列表
#### 页面控制
- `POST /v1/wechat/switch/chat` - 切换到聊天页面
- `POST /v1/wechat/switch/contact` - 切换到联系人页面
- `POST /v1/wechat/isonline` - 检查在线状态
### 聊天接口
- `POST /v1/chat/send` - 子窗口发送消息
- `POST /v1/chat/getallmessage` - 获取子窗口所有消息
- `POST /v1/chat/getnewmessage` - 获取子窗口新消息
- `POST /v1/chat/msg/quote` - 发送引用消息
- `POST /v1/chat/close` - 关闭子窗口
### 文件管理接口
- `POST /v1/files/upload` - 上传文件
- `GET /v1/files/{file_id}` - 获取文件信息
- `DELETE /v1/files/{file_id}` - 删除文件
- `GET /v1/files/` - 获取文件列表
### 激活接口
- `POST /v1/activation/activate` - 激活许可证
- `GET /v1/activation/check` - 检查激活状态
### 信息接口
- `GET /v1/info/package` - 获取包信息
## 认证
所有 API 请求都需要在 Header 中包含有效的认证 token:
```http
Authorization: Bearer
```
配置你的 token 在 `config.yaml` 中:
```yaml
auth:
token: "your-secret-token-here"
```
## 响应格式
所有 API 接口都遵循统一的响应格式:
```json
{
"success": true,
"message": "操作成功",
"data": {
// 返回数据
}
}
```
### 常见响应类型
#### 列表数据
```json
{
"success": true,
"message": "",
"data": {
"total": 100,
"items": [...]
}
}
```
#### 单个对象
```json
{
"success": true,
"message": "获取成功",
"data": {
"item": {...}
}
}
```
#### 错误响应
```json
{
"success": false,
"message": "操作失败",
"data": {
"error_code": "ERROR_CODE",
"solution": "解决方案"
}
}
```
详见 [API 响应格式规范](https://github.com/cluic/wxauto-restful-api/blob/main/docs/API_RESPONSE_FORMAT.md)
## 配置说明
### 主要配置文件
- `config.yaml` - 主配置文件(包含所有服务器设置)
- `pyproject.toml` - 项目依赖配置
### 重要配置项
- `server.port` - 服务端口(默认8000)
- `server.host` - 服务器监听地址(默认0.0.0.0)
- `server.reload` - 热重载开关(默认true)
- `auth.token` - API访问令牌
- `database.type` - 数据库类型(默认sqlite)
---
url: /plugin/mcp.md
---
# MCP
项目地址:[https://github.com/cluic/wxauto-mcp](https://github.com/cluic/wxauto-mcp)
## 系统要求
- Windows 11/10
- Python 3.9+
- 微信已登录
- wxautox4 激活
## 快速安装
```bash
pip install wxauto-mcp
```
## 使用
### 一键自动安装(推荐)
```bash
wxauto-mcp --install
```
这将自动配置 MCP Server 到 **Claude Desktop** 和 **Claude Code**,无需手动编辑配置文件。
### 生成配置文件(手动配置)
如果需要手动配置,运行:
```bash
# 生成配置文件到默认目录 (./mcp-configs)
wxauto-mcp --config
# 生成配置文件到指定目录
wxauto-mcp --config /path/to/configs
# 例如
wxauto-mcp --config mcp-configs
```
然后将生成的配置文件内容添加到 AI 应用中:
**Claude Desktop** 配置文件位置:
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
**Claude Code** 配置文件位置:
- `%USERPROFILE%\.claude.json`
**Cursor**:在 Settings 的 MCP 配置中添加
## 可用工具(27个)
### 系统工具(6个)
- `wechat_initialize` - 初始化微信连接
- `wechat_status` - 获取微信运行状态
- `wechat_activate` - 激活 wxautox4
- `wechat_check_activation` - 检查激活状态
- `wechat_list_tools` - 列出所有可用工具
- `get_my_info` - 获取我的微信账号信息
### 消息工具(6个)
- `send_message` - 发送文本消息
- `send_url_card` - 发送链接卡片
- `get_messages` - 获取当前聊天消息
- `get_history` - 获取历史消息
- `get_next_new_message` - 获取下一个聊天窗口的新消息
- `send_bulk_messages` - 批量发送消息
### 联系人工具(3个)
- `get_friends` - 获取好友列表
- `get_chat_info` - 获取当前聊天信息
- `switch_chat` - 切换聊天窗口
### 会话工具(4个)
- `get_sessions` - 获取会话列表
- `get_recent_groups` - 获取最近群聊
- `filter_sessions` - 筛选会话列表
- `get_unread_sessions` - 获取有未读消息的会话
### 文件工具(4个)
- `send_files` - 发送文件
- `send_image` - 发送图片
- `send_directory_files` - 发送整个目录的文件
- `check_file_exists` - 检查文件是否存在
### 好友请求工具(3个)
- `get_new_friends` - 获取新的好友请求列表
- `accept_new_friend` - 接受新的好友请求
- `add_friend` - 添加新好友
### 界面工具(1个)
- `switch_to_contact` - 切换到联系人页面
---
url: /plugin/skills.md
---
# AI SKILL
项目地址:[https://github.com/cluic/wxauto-skill](https://github.com/cluic/wxauto-skill)
基于 wxautox4 RESTful API 的微信自动化 OpenClaw 技能。
## 系统要求
- Python 3.9-3.12
- 操作系统:Windows 10 及以上
- wxautox4 (pip install wxautox4)
- wxauto-restful-api 服务
## 安装方式
### 方法一:一键安装(Windows)
1. 下载本仓库
2. 双击运行 `install.bat`
3. 重启 OpenClaw
### 方法二:手动安装
把该项目中的`wxauto`文件夹复制到`~\.openclaw\skills`目录下即可,其他AI应用同理
### 方法三:通过 ClawHub 安装
```powershell
clawhub install wxauto
```
## 服务配置(必须)
1. 克隆 wxauto-restful-api:
```bash
git clone https://github.com/cluic/wxauto-restful-api
```
2. 配置 `config.yaml`
3. 启动服务:
```bash
python run.py
```
## 使用方法
安装完成后,重启 OpenClaw 并尝试:
```
发微信给文件传输助手说你好
```
## 相关链接
- 服务项目:[https://github.com/cluic/wxauto-restful-api](https://github.com/cluic/wxauto-restful-api)
- ClawHub:[https://clawhub.ai](https://clawhub.ai)
---
url: /privacy.md
---
# 隐私政策
最后更新日期:2026年03月16日
### 1. 概述
感谢您使用 wxauto(x4)(以下简称“本库”)。本隐私政策说明我们如何收集、使用和保护您的信息。
### 2. 信息收集
#### 2.1 我们收集的信息
本库仅在激活时收集以下信息:
- 设备硬件码:用于许可证验证。
> 该信息不包含任何用户数据,除验证许可外无任何意义。
#### 2.2 我们不收集的信息
本库明确不会收集、传输或存储以下任何信息:
- 账号信息(用户名、密码、手机号等)
- 聊天记录及消息内容
- 联系人信息
- 任何其他用户数据
### 3. 本地操作声明
本库所有自动化操作均在用户本地设备上执行,不会将任何操作数据上传至服务器,用户对本地数据拥有完全控制权。
### 4. 隐私政策更新
本政策如有重大变更,将通过项目页面或适当方式通知用户。
### 5. 免责声明
本库仅供学习和研究使用,请遵守微信用户协议及相关法律法规,勿用于任何违法或侵权行为。使用本库即表示您已同意本隐私政策。
---
url: /read/audio_settings.md
---
# 语音条消息前置配置
官方4.1.9+客户端支持了语音条消息的发送,40.1.13+版本的wxautox4可使用 [`SendAudio`](/docs/class/chat#发送语音-sendaudio) 方法发送语音条消息,但需要以下前置配置。
## 配置步骤
### 安装 ffmpeg
首先确认自己电脑有没有 ffmpeg
### 安装虚拟麦克风
下载虚拟麦克风驱动:[audio\_driver.zip](/files/audio_driver.zip)
解压后双击 `VBCABLE_Setup_x64.exe` 点击安装即可

安装成功

***
### 配置虚拟麦克风
打开Windows系统设置,系统 - 声音 - 输入,将输入设备改为刚刚安装的虚拟麦克风驱动 `CABLE Output`

至此,所有配置均配置完成
***
### 测试发送语音条消息
```python
from wxautox4 import WeChat
wx = WeChat()
audio = 'D:/xxx.mp3'
wx.ChatWith('文件传输助手')
wx.SendAudio(audio, duration=3) # 发送3秒测试
```
***
## 远程桌面额外配置
:::tip 如果经过上述配置可正常发送语音消息,则不需要看此部分
:::
如果使用的是远程桌面,可能在系统声音设置中,不可设置输入设备,这是因为远程桌面默认使用控制端主机的音频输入,可在连接前设置:
**[object Object]**

**[object Object]**

---
url: /update/wxauto4.md
---
# 开源版更新日志
---
url: /update/wxautox4.md
---
# Plus版更新日志
## v40.1.15
### 修复BUG
- 修复`AddNewFriend`在4.1.9版本无法正常执行完成的问题
- 修复`GetFriendDetails`方法在4.1.9版本获取不到备注的问题
- 修复 `GetNewFriends` 在 4.1.9.x 版本客户端报错的问题
- 修复`msg.forward`方法无法正常转发给企业用户的问题
- 修复发表朋友圈当图片过多无法正常选择可见范围的问题
### 优化
- `WeChat`实例增加缓存机制,优化初始化速度
## v40.1.14
### 新增内容
- [`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法增加 `goback` 参数,可自行指定获取结束后是否返回最新消息位置
- [`GetFriendDetails`](/docs/class/wechat#获取好友列表-getfrienddetails) 方法增加 `callback` 参数,可传入回调函数从指定联系人开始获取
### 修复BUG
- 修复 `GetFriendDetails` 在 4.1.9.x 版本客户端报错的问题
- 修复 `SendUrlCard` 在 4.1.9.x 版本客户端报错的问题
- 修复 `msg.forward` 在 4.1.9.x 版本客户端报错的问题
- 修复国际版微信报错的问题
## v40.1.13
### 新增内容
- [`WeChat`](/docs/class/wechat#初始化参数) 核心对象新增 `version` 参数,wx = WeChat(version='WeChat')即可支持国际号码注册的账号客户端
- 新增 [`GetDialog`](/docs/class/wechat#获取对话框-getdialog) 方法,用于自行获取某些情况下触发的确认对话框并进行相应处理
- 新增 [`EditFriendInfo`](/docs/class/wechat#修改好友信息-editfriendinfo) 方法,可修改好友备注、添加标签、移除标签
- [`ImageMessage`](/docs/class/message#imagemessage) 对象新增 [`ocr`](/docs/class/message#ocr) 方法,可提取图片中的文字
- \[Beta]新增 [`SendAudio`](/docs/class/chat#发送语音-sendaudio) 方法,用于发送语音条消息(需最新4.1.9+版本客户端,以及需要额外配置,可能暂不稳定)
### 修复BUG
- 修复 [`FriendMessage`](/docs/class/message#friendmessage) 的 [`edit_info`](/docs/class/message#edit_info) 方法无法正常修改标签的问题
### 优化
- 新增支持 Python3.13
- 兼容 4.1.9 版本客户端
- 优化图片下载,兼容某些默认以内嵌方式打开图片的客户端
- 优化消息转发方法,当消息被撤回时可处理对话框
- 优化发表朋友圈方法,增加图片、视频上传等待时间,可通过`wait_upload`参数设置
## v40.1.12
### 新增内容
- 新增[`CreateGroup`](/docs/class/wechat#创建群聊-creategroup)方法,创建群聊
- 新增[`SetGroupName`](/docs/class/chat#修改群聊名称-setgroupname)方法,修改群聊名称
- 新增[`SetGroupRemark`](/docs/class/chat#修改群聊备注-setgroupremark)方法,修改群聊备注
- 新增[`SetGroupAnnouncement`](/docs/class/chat#修改群公告-setgroupannouncement)方法,修改群公告
- 新增[`SetGroupMyNickname`](/docs/class/chat#修改我在群里的昵称-setgroupmynickname)方法,修改我在群里的昵称
- [`GetNewFriends`](/docs/class/wechat#获取好友申请-getnewfriends)方法获取到的新好友对象新增`name`、`msg`属性
- [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`edit_info`](/docs/class/message#edit_info) 方法,可修改备注、添加标签、移除标签
- [`HumanMessage`](/docs/class/message#humanmessage) 对象新增 [`download_head_image`](/docs/class/message#download_head_image) 方法,可下载头像图片
- [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`add_friend`](/docs/class/message#add_friend) 方法,可通过消息对象快捷添加好友
- [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`delete_friend`](/docs/class/message#delete_friend) 方法,可通过消息对象快捷删除好友
### 修复BUG
- 修复 `GetNextNewMessage` 方法在过滤免打扰时在某些电脑不能正常获取消息的问题
### 优化
- 优化 SendMsg 和 SendFiles 方法,更严格的切换机制,避免发错对象
## v40.1.11
- 同时适配`4.1.8`和`4.1.7`客户端
## v40.1.10
- 适配`4.1.8`新版客户端
## v40.1.9
### 新增内容
- [`GetNewFriends`](/docs/class/wechat#获取好友申请-getnewfriends)方法增加`roll_times`参数,用于向下滚动好友请求列表
- 新增消息对象[`TimeMessage`](/docs/class/message#timemessage),可通过`msg.time`获取消息时间,`yyyy-mm-dd HH:MM:SS`格式
### 修复BUG
- 修复@多人时无法正常执行的问题
- 修复朋友圈点赞无法正常执行的问题
- 修复发朋友圈卡在选择文件的问题
- 修复在微信支付等官方页面时,[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法报错的问题
- 修复在未选中任何聊天页面时,[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法报错的问题
- 修复视频过期时,[`VideoMessage`](/docs/class/message#videomessage)的[`download`](/docs/class/message#download-2)方法卡死的问题
- 修复好友引用消息 [`download_quote_image`](/docs/class/message#download_quote_image) 方法报错的问题
### 优化
- 优化接受好友请求方法,当好友数超过5000时可处理朋友圈权限
- 优化[`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法
## v40.1.8
### 新增内容
- [`ImageMessage`](/docs/class/message#imagemessage) 和 [`VideoMessage`](/docs/class/message#videomessage) 的 [`download`](/docs/class/message#download) 方法增加 `dir_path` 参数,可指定下载目录
- [`EmotionMessage`](/docs/class/message#emotionmessage) 增加 `capture` 方法,用于截图表情包
- [`QuoteMessage`](/docs/class/message#quotemessage) 增加 [`download_quote_image`](/docs/class/message#download_quote_image) 方法,用于下载引用图片
- [`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法回调函数支持设置停止条件,当回调函数返回值为 `WxParam.CALLBACK_STOP_SIGN` 时停止
```python
from wxautox4 import WxParam
from wxautox4.msgs import TimeMessage # v40.1.9及以上版本支持TimeMessage对象
# 示例:如果找到带有“通知”字眼的消息则停止获取
def history_callback(msg):
# 当消息内容里包含特定字词时停止
if '通知' in msg.content:
print('获取到包含“通知”的消息,停止获取历史消息')
return WxParam.CALLBACK_STOP_SIGN
# 当消息时间超过特定时间时停止 # v40.1.9及以上版本支持TimeMessage对象
if isinstance(msg, TimeMessage) and msg.time < '2026-02-01':
print('获取到早于2026年2月1日的消息,停止获取历史消息')
return WxParam.CALLBACK_STOP_SIGN
wx.GetHistoryMessage(n=100, callback=history_callback)
```
### 修复BUG
- 修复当[`SendMsg`](/docs/class/chat#发送消息-sendmsg)输入内容包含`[微笑]`等默认聊天表情时,无法发送成功的问题
- 修复 [`VoiceMessage`](/docs/class/message#voicemessage) 对象的 `sender` 属性错误问题
- 修复[`AddGroupMembers`](/docs/class/wechat#添加群成员-addgroupmembers)创建群聊无法完成的问题
### 优化
- 优化 [`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage) 方法,获取完后不再关闭当前窗口
- 优化获取实例时间
- 优化获取下一页朋友圈
- 优化适配 4.1.6.46 版本客户端会话内容解析
## v40.1.7
### 新增内容
- [`HumanMessage`](/docs/class/message#humanmessage) 新增 `delete` 方法,删除消息
- 新增 `GetDialog` 方法,用于获取弹窗,并进行处理
#### (Beta)朋友圈相关
- [`MomentsWnd`](/docs/class/moment#momentswnd) 对象新增 [`GetMoments`](/docs/class/moment#getmoments) 方法,获取朋友圈信息
- [`Moment`](/docs/class/moment#moments) 对象新增 [`Like`](/docs/class/moment#like) 方法,点赞/取消点赞
- [`Moment`](/docs/class/moment#moments) 对象新增 [`Comment`](/docs/class/moment#comment) 方法,发表评论
::: warning 注意
朋友圈相关方法未经大量测试,可能存在问题,及时反馈
:::
### 修复BUG
- 修复[`PublishMoment`](/docs/class/wechat#发送朋友圈-publishmoment)方法,4.1版本改为先选择照片再编辑文字
### 优化
- 优化发送朋友圈,可单独发表文字
## v40.1.6
### 新增内容
- 新增[`GetFriendDetails`](/docs/class/wechat#获取好友列表-getfrienddetails)方法,获取所有联系人信息
- 新增[`AddGroupMembers`](/docs/class/wechat#添加群成员-addgroupmembers)方法,邀请好友入群
### 修复BUG
- 修复[`Chat`](/docs/class/chat)对象缺失`chat_type`属性的问题
- 修复子窗口[`SendMsg`](/docs/class/chat#发送消息-sendmsg)方法@群成员消息内容过短无法@成功的问题
- 修复[`AddListenChat`](/docs/class/wechat#添加监听聊天窗口-addlistenchat)方法不打开独立窗口的问题
## v40.1.5
### 新增内容
- [`LinkMessage`](/docs/class/message#linkmessage)新增[`get_url`](/docs/class/message#get_url)方法,获取卡片消息链接
- [`WeChat`](/docs/class/wechat)新增`resize`参数,设置为False时不自动调整窗口尺寸
- [`ImageMessage`](/docs/class/message#imagemessage)和[`VideoMessage`](/docs/class/message#videomessage)新增`original`参数,设置为True时下载原图/原视频
### 修复BUG
- 修复消息对象的`sender`属性错误问题
- 修复添加好友报错`msgedit`属性缺失的问题
- 修复子窗口[`SendMsg`](/docs/class/chat#发送消息-sendmsg)方法无法@群成员的问题
- 修复最小化时获取[`WeChat`](/docs/class/wechat)实例报错的问题
### 优化
- 优化切换聊天窗口的方式,当前会话列表存在目标则不进行搜索
- 优化[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法,过滤免打扰时不再频繁跳转会话列表