Python神级操作,还原已撤回的微信消息

本文介绍了如何使用Python实现捕获并还原已撤回的微信消息,包括文字、表情、图片等各类消息。程序通过监听消息、存储和发送消息到文件传输助手实现这一功能,同时指出了目前存在的限制和未来改进的方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目环境

语言:Python3

编辑器:Pycharm

导包效果展示

以下截图显示的撤回消息类型依次是文字消息、微信自带表情、图片、语音、定位地图、名片、公众号文章、音乐、视频。有群里撤回的,也有个人号撤回的。

图文来源:http://kks.me/aULmF

图文来源:http://kks.me/aULmF

程序思路

主要由两部分组成:

handler_receive_msg():处理接收到的消息,将消息临时放在字典中。

send_msg_helper():将撤回的消息自动发给文件传输助手。

程序分析

首先,我们定义一个字典来储存消息,定义消息储存的临时路径。

接收信息处理

先将我们需要处理的消息用 msg_register 装饰器进行注册,格式化本地时间,定义消息 ID 和消息时间。如果是群成员而且是自己微信好友撤回消息,则显示撤回消息的名称是你备注的名字,如果没有备注名字,则显示名称为微信昵称。

获取你的所有群的消息,判断出撤回的消息来自哪个群,显示出群名称。

个人消息处理

如果为个人聊天信息,也是优先显示备注名称,没有备注名就显示昵称。

各类型消息处理

用判断语句对各种类型的消息进行处理,包括文字消息、微信自带的表情和收藏的表

### 实现微信客户端消息撤回功能的技术方案 #### 技术背景 微信作为一款广泛使用的即时通讯工具,其内置的“消息撤回”功能允许用户在一定时间内撤销已发送的消息。然而,在某些场景下,可能需要阻止这一操作的影响,或者记录被撤回消息内容以便后续查看。这可以通过第三方库和技术手段实现。 --- #### 使用 `itchat` 库实现消息撤回功能 `itchat` 是一个基于微信网页版接口开发的 Python 第三方库,可以用于自动化处理微信消息,包括但不限于消息监听、自动回复等功能[^2]。以下是利用该库实现消息撤回的具体方法: 1. **初始化与登录** 首先,通过调用 `itchat.auto_login()` 方法完成微信账号的自动登录。此过程会打开浏览器并扫描二维码以验证身份。 ```python import itchat itchat.auto_login(hotReload=True) # hotReload参数可保持登录状态 ``` 2. **消息存储机制** 创建一个全局字典变量 `msg_dict` 来缓存最近接收的消息。每条消息都应包含唯一 ID 和具体内容,方便后续查找和处理。 ```python msg_dict = {} ``` 3. **注册消息处理器** 利用 `@itchat.msg_register` 装饰器定义不同类型的回调函数,分别处理文字、图片、语音等消息类型。 ```python @itchat.msg_register(['Text', 'Picture', 'Recording']) def handle_msg(msg): global msg_dict # 存储消息到字典中 msg_id = msg['MsgId'] content = { 'Content': msg.get('Text') or msg.get('FileName'), 'Type': msg['Type'], 'From': msg['User']['NickName'] if 'NickName' in msg['User'] else None, 'Time': msg['CreateTime'] } msg_dict[msg_id] = content return None ``` 4. **检测撤回消息** 当接收到一条特殊格式的通知消息(通常是 “XXX撤回了一条消息”),解析其中嵌套的实际消息 ID 并尝试恢复原始数据。 ```python @itchat.msg_register('Note') def monitor_revoke(msg): revoke_content = re.search(r'\S+\s+(.*)\s+撤回了一条消息$', msg['Content']).group(1) revoked_message = msg_dict.pop(revoke_content, None) if not revoked_message: print(f"未找到对应的消息 {revoke_content}") return message_type = revoked_message['Type'] sender_name = revoked_message['From'] original_text = revoked_message['Content'] notification_template = f"{sender_name} 撤回了一条{message_type}: \n\n{original_text}" itchat.send(notification_template, toUserName='filehelper') # 发送至文件助手 ``` 5. **运行程序** 启动消息循环监听服务,等待新事件触发。 ```python itchat.run() ``` --- #### 注意事项 尽管上述方法能够有效捕获大部分常规消息的内容,但仍需注意以下几点: - 微信官方并未授权任何非官方 SDK 的使用行为,因此长期依赖此类方式可能存在封禁风险[^2]。 - 对于多媒体类资源(如图片、音频文件),即使成功拦截也可能因时效性问题无法完全还原原貌[^3]。 - 如果目标设备上的微信应用版本较新,则可能会屏蔽部分 API 接口访问权限,从而影响兼容性和稳定性。 --- ### 总结 综上所述,借助开源项目所提供的基础框架配合定制化逻辑扩展即可达成预期效果——即实时追踪所有传入信息并将它们妥善保管起来以防丢失;与此同时也要充分认识到潜在局限所在,并据此调整实际部署策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值