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利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
python队列queue模块详解
Apr 27 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Python面向对象封装操作案例详解
Dec 31 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
python与idea的集成的实现
Nov 20 Python
Python入门之使用pandas分析excel数据
May 12 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
Python字符串的转义字符
Apr 07 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框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jQuery 动画基础教程
2008/12/25 Javascript
Javascript 解疑
2009/11/11 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
bootstrap table实例详解
2017/01/06 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
python默认参数调用方法解析
2020/02/09 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
十周年庆典策划方案
2014/06/03 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
加强作风建设工作总结
2014/10/23 职场文书
公司放假通知怎么写
2015/04/15 职场文书
涨价通知
2015/04/23 职场文书
三年级作文之趣事作文
2019/11/04 职场文书