python实现文件助手中查看微信撤回消息


Posted in Python onApril 29, 2019

利用python实现防撤回,对方撤回的消息可在自己的微信文件传输助手中查看。

如果想变成可执行文件放在电脑中运行,可用pyinstaller将此程序打包成exe文件。

pyinstaller 文件名.py -F

执行程序后,消息防撤回就启动了。

程序完整代码

# -*-encoding:utf-8-*-
import os
import re
import shutil
import time
import itchat
from itchat.content import *

# 说明:可以撤回的有文本文字、语音、视频、图片、位置、名片、分享、附件

# {msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)}
msg_dict = {}

# 文件存储临时目录
rev_tmp_dir = r"G:\python代码\微信\撤回到文件助手"
if not os.path.exists(rev_tmp_dir): os.mkdir(rev_tmp_dir)

# 表情有一个问题 | 接受信息和接受note的msg_id不一致 巧合解决方案
face_bug = None

# 将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理 | 不接受不具有撤回功能的信息
# [TEXT, PICTURE, MAP, CARD, SHARING, RECORDING, ATTACHMENT, VIDEO, FRIENDS, NOTE]
@itchat.msg_register([TEXT, PICTURE, MAP, CARD, SHARING, RECORDING, ATTACHMENT, VIDEO])
def handler_receive_msg(msg):
 global face_bug
 # 获取的是本地时间戳并格式化本地时间戳 e: 2017-04-21 21:30:08
 msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 # 消息ID
 msg_id = msg['MsgId']
 # 消息时间
 msg_time = msg['CreateTime']
 # 消息发送人昵称 | 这里也可以使用RemarkName备注 但是自己或者没有备注的人为None
 msg_from = (itchat.search_friends(userName=msg['FromUserName']))["NickName"]
 # 消息内容
 msg_content = None
 # 分享的链接
 msg_share_url = None
 if msg['Type'] == 'Text' \
   or msg['Type'] == 'Friends':
  msg_content = msg['Text']
 elif msg['Type'] == 'Recording' \
   or msg['Type'] == 'Attachment' \
   or msg['Type'] == 'Video' \
   or msg['Type'] == 'Picture':
  msg_content = r"" + msg['FileName']
  # 保存文件
  msg['Text'](rev_tmp_dir + msg['FileName'])
 elif msg['Type'] == 'Card':
  msg_content = msg['RecommendInfo']['NickName'] + r" 的名片"
 elif msg['Type'] == 'Map':
  x, y, location = re.search(
   "<location x=\"(.*?)\" y=\"(.*?)\".*label=\"(.*?)\".*", msg['OriContent']).group(1, 2, 3)
  if location is None:
   msg_content = r"纬度->" + x.__str__() + " 经度->" + y.__str__()
  else:
   msg_content = r"" + location
 elif msg['Type'] == 'Sharing':
  msg_content = msg['Text']
  msg_share_url = msg['Url']
 face_bug = msg_content
 # 更新字典
 msg_dict.update(
  {
   msg_id: {
    "msg_from": msg_from, "msg_time": msg_time, "msg_time_rec": msg_time_rec,
    "msg_type": msg["Type"],
    "msg_content": msg_content, "msg_share_url": msg_share_url
   }
  }
 )

# 收到note通知类消息,判断是不是撤回并进行相应操作
@itchat.msg_register([NOTE])
def send_msg_helper(msg):
 global face_bug
 if re.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>", msg['Content']) is not None:
  # 获取消息的id
  old_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['Content']).group(1)
  old_msg = msg_dict.get(old_msg_id, {})
  if len(old_msg_id) < 11:
   itchat.send_file(rev_tmp_dir + face_bug, toUserName='filehelper')
   os.remove(rev_tmp_dir + face_bug)
  else:
   msg_body = "告诉你一个秘密~" + "\n" \
      + old_msg.get('msg_from') + " 撤回了 " + old_msg.get("msg_type") + " 消息" + "\n" \
      + old_msg.get('msg_time_rec') + "\n" \
      + "撤回了什么 ⇣" + "\n" \
      + r"" + old_msg.get('msg_content')
   # 如果是分享存在链接
   if old_msg['msg_type'] == "Sharing": msg_body += "\n就是这个链接➣ " + old_msg.get('msg_share_url')

   # 将撤回消息发送到文件助手
   itchat.send(msg_body, toUserName='filehelper')
   # 有文件的话也要将文件发送回去
   if old_msg["msg_type"] == "Picture" \
     or old_msg["msg_type"] == "Recording" \
     or old_msg["msg_type"] == "Video" \
     or old_msg["msg_type"] == "Attachment":
    file = '@fil@%s' % (rev_tmp_dir + old_msg['msg_content'])
    itchat.send(msg=file, toUserName='filehelper')
    os.remove(rev_tmp_dir + old_msg['msg_content'])
   # 删除字典旧消息
   msg_dict.pop(old_msg_id)

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
Python线程详解
Jun 24 Python
python中 logging的使用详解
Oct 25 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python读取xlsx的方法
Dec 25 Python
详解python使用turtle库来画一朵花
Mar 21 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
简单了解Python3里的一些新特性
Jul 13 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python中_del_还原数据的方法
Dec 09 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 #Python
python控制nao机器人身体动作实例详解
Apr 29 #Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 #Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 #Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 #Python
python实现nao机器人手臂动作控制
Apr 29 #Python
python机器人运动范围问题的解答
Apr 29 #Python
You might like
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
ansible作为python模块库使用的方法实例
2017/01/17 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
Python 学习教程之networkx
2019/04/15 Python
Python中遍历列表的方法总结
2019/06/27 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
十佳教师事迹材料
2014/01/11 职场文书
合作意向书模板
2014/03/31 职场文书
金融保险专业求职信
2014/09/03 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
付款证明模板
2015/06/19 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL