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翻译软件实现代码(使用google api完成)
Nov 26 Python
python循环监控远程端口的方法
Mar 14 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python3多线程操作简单示例
May 22 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
django url到views参数传递的实例
Jul 19 Python
django实现用户注册实例讲解
Oct 30 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
零基础学python应该从哪里入手
Aug 11 Python
深入了解Python 方法之类方法 &amp; 静态方法
Aug 17 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常用image图像函数集
2013/06/24 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP中常用的魔术方法
2017/04/28 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python 日志增量抓取实现方法
2018/04/28 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
Python threading的使用方法解析
2019/08/28 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
学习方法演讲稿
2014/05/10 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
升学宴学生致辞
2015/07/27 职场文书
素质教育培训心得体会
2016/01/19 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
JavaScript中isPrototypeOf函数
2021/11/07 Javascript