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中的XML 工具
Apr 13 Python
Python利用IPython提高开发效率
Aug 10 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
python绘制条形图方法代码详解
Dec 19 Python
python 识别图片中的文字信息方法
May 10 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 Python
python_mask_array的用法
Feb 18 Python
pycharm安装及如何导入numpy
Apr 03 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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实现utf-8转unicode函数分享
2015/01/06 PHP
php实现json编码的方法
2015/07/30 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
js实现网站首页图片滚动显示
2013/02/04 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python类属性的延迟计算
2016/10/22 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python读写文件基础知识点
2019/06/10 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Python实现代码块儿折叠
2020/04/15 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
什么是GWT的Module
2013/01/20 面试题
付款委托书范本
2014/10/05 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android
MySQL索引失效场景及解决方案
2022/07/23 MySQL