#!/usr/bin/env python3
# -*- coding: utf-8 -*- __author__ = 'jiangwenwen' import itchat
from itchat.content import *
import time
import re
import os 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()

Python之微信消息防撤回的更多相关文章

  1. Python实现微信消息防撤回

    微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿.在此期间微信也推出了不少的功能如:“摇一摇”.“漂流瓶”.“朋友圈”.“附近的人” ...

  2. Python_20行代码实现微信消息防撤回(简易版)

    学习了一下如何用python实现微信消息的防撤回, 主要思路就是: 时时监控微信,将对方发送的消息缓存下来 如果对方撤回了消息,就将该缓存信息发送给文件传输助手 但其实这功能,基本上毫无意义,看到别人 ...

  3. PC微信逆向--实现消息防撤回

    自从聊天软件消息撤回功能问世后,对于撤回的消息,我们对它一直有种强烈的好奇感."Ta刚撤回了什么?是骂我的话?还是说喜欢我?还是把发给其他人的消息误发给了我?好气呀,都看不到了...&quo ...

  4. [软件逆向]实战Mac系统下的软件分析+Mac QQ和微信的防撤回

      0x00  一点废话 最近因为Mac软件收费的比较多,所以买了几款正版软件,但是有的软件卖的有点贵,买了感觉不值,不买吧,又觉得不方便,用别人的吧,又怕不安全.于是我就买了正版的Hopper Di ...

  5. python查看微信消息撤回

    准备环境 python语言环境 python解释器-pycharm itchat介绍 itchat是一个开源的微信个人号接口,通过itchat可以实现微信(好友或微信群)的信息处理,包括文本.图片.小 ...

  6. Python发送微信消息

    针对此 需要安装itchat第三方模块 采用pip安装就可以了   pip install itchat import itchatimport time#引入时间函数进行测试time_format= ...

  7. macOS 版微信小助手,支持微信多开、防撤回、远程控制mac、自动回复等等

    微信小助手 GitHub大牛提供的微信小助手是一款插件,该插件具备多开.防撤回.免手机认证登录.自动回复.远程控制自己的 macOS.群发等众多功能 GitHub网址:https://github.c ...

  8. 电脑微信电脑PC 多开/防撤回 补丁

    简介 经常使用微信电脑版的用户都会发现一个蛋疼的事情,那就是微信PC版不支持多开,也就是不能同时登陆多个账号,这对于需要在电脑上登陆多个微信账号的朋友来说肯定是极其的不方便.另外有的时候别人撤回了一些 ...

  9. 记录实践PC端微信防撤回实现过程(基于3.1.0.67版本)

    利用OD实现对PC端微信防撤回功能的实现 文章最后有一键补丁工具哦~ 准备工具 1.OD 2.PC微信客户端(3.1.0.67) 过程 1.运行微信客户端,不需要登录 2.运行OD,左上角选择附加进程 ...

随机推荐

  1. 一个完整的HTTP请求过程详细

    整个流程1.域名解析 —> 2.与服务器建立连接 —> 3.发起HTTP请求 —>4. 服务器响应HTTP请求,浏览器得到html代码 —> 5.浏览器解析html代码,并请求 ...

  2. SQLyog安装

    安装 使用 首先看到下面的界面

  3. JSP学习(4)

    JSP学习(4) JavaBean简介 符合某种规范的Java类.使用JavaBean的好处是解决了代码重复编写,减少代码冗余,功能区分明确,提高代码的可维护性 JavaBean设计原则 JSP动作元 ...

  4. nodejs 更新代码自动刷新页面

    安装第三方工具: nodemon npm install --global nodemon 安装完毕后使用: 之前使用: node xxx.js 改成 nodemon xxx.js 只要通过nodem ...

  5. neuoj1472 yuki的氪金之旅(倒置树状数组

    这题一直re不造为啥..后来yww大神把树状数组“倒过来”就过了,倒过来的好处是算sum(d[i]+1)就行,不涉及除法,不用求逆元. 题意:初始手牌颜值是0,一共抽卡n次,第i次抽卡有pi的概率能抽 ...

  6. psexec远程重启服务器

    1 使受控机器支持远程psexec 管理 暂参照其他教程 2 打开远程命令行 3 重启服务执行net命令 停止远程桌面 net stop termservice 启动远程桌面 net start te ...

  7. 解析 Java 反射题中一个有趣的坑

    public class Test { public void age(int age) { System.out.println("int age="+age); } publi ...

  8. Python语言为什么被称为高级程序设计语言?

    Python是一种令人惊叹的编程语言,毫无疑问.从1991年的卑微开始,它现在几乎无处不在.无论您是在进行Web开发,系统管理,测试自动化,devop还是数据科学,Python在您的工作中发挥作用的可 ...

  9. git & gerrit & shell

    g公司使用Gerrit改善评审流程. 比较麻烦.gerrit提交后会触发vertifyCI, 实施代码扫描. 这一堆过程, 打印出一堆信息, 都在log中, 所以处理log就需要自己写shell了. ...

  10. django之配置文件setting.py

    一:配置文件setting.py中的简单配置更改 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 简单解释 ...