python基于itchat模块实现微信防撤回


Posted in Python onApril 29, 2019

有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。

环境要求

Python3
电脑

安装itchat

pip install itchat

使用代码

新建chehui.py,拷贝以下代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'jiangwenwen'

import itchat
from itchat.content import *
import time
import re
import os

print("该程序由里客云资源站开发,网址:likeyunba.com")
print("作者:TANKING")
print("打开程序会弹出一个二维码,微信扫码")
print("如果二维码弹不出,那就在你这个程序的同一个目录下找到QR.png双击打开扫码")
print("扫码后,出现Start auto replying就可以实时监控消息了...")

msg_information = {}
# 针对表情包的内容
face_bug = None

@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO], isFriendChat=True, isMpChat=True)
def handle_receive_msg(msg):
 global face_bug
 # 接收消息的时间
 msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 # 在好友列表列表中查询发送信息的好友昵称
 msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName']
 # 信息发送的时间
 msg_time = msg['CreateTime']
 # 每条信息的ID
 msg_id = msg['MsgId']
 # 储存信息的内容
 msg_content = None
 # 储存分享的连接,比如分享的文章和音乐
 msg_share_url = None

 # 如果发送的消息是文本或者好友推荐
 if msg['Type'] == 'Text' or msg['Type'] == 'Friends':
 msg_content = msg['Text']
 print(msg_content)

 # 如果发送的消息是附件,视频,图片,语音
 elif msg['Type'] == 'Attachment' or msg['Type'] == 'Video' \
 or msg['Type'] == 'Picture'\
  or msg['Type'] == 'Recording':
 # 内容为下载文件名
 msg_content = msg['FileName']
 msg['Text'](str(msg_content))

 # 如果消息是推荐的名片
 elif msg['Type'] == 'Card':
 # 内容是推荐人的昵称和性别
 msg_content = msg['RecommendInfo']['NickName'] + '的名片'
 if msg['RecommendInfo']['Sex'] == 1:
  msg_content += '性别为男'
 else:
  msg_content += '性别为女'

 print(msg_content)

 # 如果消息为分享的位置信息
 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']
 print(msg_share_url)
 face_bug = msg_content

 # 将信息存储在字典中,每一个msg_id对应一条消息
 msg_information.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
  }
 }
)

#这个是用于监听是否有friend消息撤回
@itchat.msg_register(NOTE, isFriendChat=True, isGroupChat=True, isMpChat=True)
def information(msg):
 # 这里如果这里的msg['Content']中包含消息撤回和id,就执行下面的语句
 if '撤回了一条消息' in msg['Content']:
 old_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['Content']).group(1)
 # 得到消息
 old_msg = msg_information.get(old_msg_id)
 print(old_msg)

 # 如果发送的是表情
 if len(old_msg_id)<11:
  itchat.send_file(face_bug, toUserName='filehelper')
 # 发送撤回的提示给文件助手
 else:
  msg_body = "【"\
   + old_msg.get('msg_from') + "撤回了】\n"\
   + old_msg.get("msg_type") + "消息:" + "\n"\
   + old_msg.get("msg_time_rec") + "\n"\
   + r"" + old_msg.get("msg_content")

 # 如果分享的文件被撤回了,那么就将分享的url加在msg_body中发送给文件助手
 if old_msg['msg_type'] == "Sharing":
  msg_body += "\n就是这个链接>" + old_msg.get('msg_share_url')

 # 将撤回消息发送到文件助手
 itchat.send_msg(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" % (old_msg['msg_content'])
  itchat.send(msg=file, toUserName='filehelper')
  os.remove(old_msg['msg_content'])

 # 删除字典旧信息
 msg_information.pop(old_msg_id)

itchat.auto_login(hotReload=True)
itchat.run()

CMD运行即可。

考虑到有一些人没有Python环境,我已经打包成可执行文件了,直接双击exe就可以在电脑运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
python开发之函数定义实例分析
Nov 12 Python
Python实现将xml导入至excel
Nov 20 Python
Python引用传值概念与用法实例小结
Oct 07 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
使用python实现链表操作
Jan 26 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python中qutip用法示例详解
Oct 02 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
手把手教你使用Python创建微信机器人
Apr 29 #Python
python实现微信防撤回神器
Apr 29 #Python
python实现文件助手中查看微信撤回消息
Apr 29 #Python
Python实现微信消息防撤回功能的实例代码
Apr 29 #Python
python控制nao机器人身体动作实例详解
Apr 29 #Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 #Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 #Python
You might like
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
利用php生成验证码
2017/02/23 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
python发送伪造的arp请求
2014/01/09 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
python函数与方法的区别总结
2019/06/23 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
详解python中的数据类型和控制流
2019/08/08 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
Shell编程面试题
2012/05/30 面试题
党员公开承诺践诺书
2014/03/25 职场文书
个人授权委托书范本
2014/09/14 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
执行力心得体会范文
2016/01/11 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
手把手教你导入Go语言第三方库
2021/08/04 Golang
python图像处理 PIL Image操作实例
2022/04/09 Python
Win11 BitLocker 驱动器加密
2022/04/19 数码科技