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实现的重启关机程序实例
Aug 21 Python
Python爬取读者并制作成PDF
Mar 10 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python爬虫 正则表达式解析
Sep 28 Python
python中seaborn包常用图形使用详解
Nov 25 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
python与idea的集成的实现
Nov 20 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静态新闻列表自动生成代码
2007/06/14 PHP
php编写一个简单的路由类
2011/04/13 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
js防止表单重复提交实现代码
2012/09/05 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
mac下如何将python2.7改为python3
2018/07/13 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
岗位职责范本
2013/11/23 职场文书
工作的心得体会
2013/12/31 职场文书
战友聚会邀请函
2014/01/18 职场文书
七年级地理教学反思
2014/01/26 职场文书
大学生秋游活动方案
2014/02/17 职场文书
诚信考试倡议书
2014/04/15 职场文书
学习经验演讲稿
2014/05/10 职场文书
2014年城管工作总结
2014/11/20 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书