Python 骚操作 | 还原已撤回的微信消息
0

此文首发于公众号 brucepk,可以点击这里查看。

阅读文本大概需要 4.5 分钟。

一大早醒来,发现女神昨晚发来三条消息,但是显示都已撤回,OMG,我错过了什么?群里有一个漂亮妹纸的爆照照片撤回了,想看又看不到!群里大佬分享的经典语录被撤回了,感觉错过一个亿!怎么办?用无所不能的 Python 就可以将这些撤回的消息发给你的微信,让你从此走上人生巅峰!

项目环境

语言:Python3
编辑器:Pycharm

导包

itchat:控制微信的第三方库,这个库相信大家不陌生了,之前写的:Python 机器人陪你聊天,Python 定时给女神发早安两篇文章里用的 wxpy 库就是在 itchat 库的基础上封装的。

效果展示

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

程序思路

主要由两部分组成:
handler_receive_msg():处理接收到的消息,将消息临时放在字典中。
send_msg_helper():将撤回的消息自动发给文件传输助手。

程序分析

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

接收信息处理

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

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

个人消息处理

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

各类型消息处理

用判断语句对各种类型的消息进行处理,包括文字消息、微信自带的表情和收藏的表情、图片、语音、位置、名片、分享、附件、视频。多条件时这里用了 in 的用法,还记得之前讲 

Python 优雅的写法

  文章里把用 or 连接条件改成用 in,代码更简洁,这样我们通过项目不断的巩固之前学到的知识点,这样才能不断进步。

更新信息字典

处理撤回消息

先判断是否是撤回消息,将撤回消息发送到你的文件传输助手里,把上面函数储存的消息的发送人、发送类型、发送时间、撤回的内容发出来。以下是部分代码。

主函数

最后用主函数执行微信的登录和运行。第一次需要扫码登录微信,登录时加上 hotReload 参数,为 True 时,短时间内再次运行会保存上次微信的登录态,不需要再次扫码登录。

if __name__ == '__main__':   
    itchat.auto_login(hotReload=True)    
    itchat.run()

如果你电脑中有安装 Python 环境,在编辑器中直接运行源码或者在 cmd 中运行 py 文件即可。源码获取方式在文末给出。有需要的话以后可以做成界面化工具,挂在服务器上,支持做成界面化工具的点个赞看看,我看看需求量,哈哈。

写在最后

今天的分享就到这里了,需要优化的地方:长时间运行时会报 ConnectionError 提示的错误,但是不影响发送撤回消息的功能,后期加个异常捕捉机制优化下。

赶紧动手试试吧,把你朋友撤回的消息发给 TA 看看,看看他是什么反应,有趣的撤回消息发到朋友圈去提高逼格,奈斯!

在公众号后台回复「撤回」获取本项目的源码。

原创不易,觉得有意思的点赞转发分享下呗,对我也是一种鼓励,有什么问题欢迎在后台联系我,也可以在后台加入技术交流群,群里有大神,可以一起交流学习。

本文思路来源于简书 AlicFeng,我对其进行了改进,增加了群消息撤回功能。

原地址:https://www.jianshu.com/p/712d19374b2e

以梦为马,不负韶华

讨论数量: 2

代码区都是图片,差评

1个月前

@qq975686955 文章末有给出源码的获取方式的,可自取。

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!