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 相关文章推荐
Python 文件重命名工具代码
Jul 26 Python
Python实现简单状态框架的方法
Mar 19 Python
Python实现的Google IP 可用性检测脚本
Apr 23 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
python如何爬取个性签名
Jun 19 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
基于pandas中expand的作用详解
Dec 17 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 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
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
js几个验证函数代码
2010/03/25 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
python中upper是做什么用的
2020/07/20 Python
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2014年团委工作总结
2014/11/13 职场文书
民事答辩状格式范文
2015/05/21 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书