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的轻便web框架Bottle
Apr 08 Python
Python实现控制台输入密码的方法
May 29 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
如何获取Python简单for循环索引
Nov 21 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
Python之matplotlib绘制折线图
Apr 13 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错误和异长常处理总结
2014/03/06 PHP
PHP多态代码实例
2015/06/26 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php7 新增功能实例总结
2020/05/25 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js中判断控件是否存在
2010/08/25 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
Vue.js用法详解
2017/11/13 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python实现决策树分类
2018/08/30 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
Python中qutip用法示例详解
2020/10/02 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis