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聊天室实现方法
Jun 28 Python
总结Python编程中函数的使用要点
Mar 20 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
详解Python 循环嵌套
Jul 09 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 表单数据的获取代码
2009/03/10 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
JS验证字符串功能
2017/02/22 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python解析json实例方法
2013/11/19 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
彻底理解Python中的yield关键字
2019/04/01 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
英语专业学子个人的自我评价
2013/10/02 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL