Python基于itchat实现微信消息防撤回工具

拾光
拾光
发布时间:2026-10-13| 5人浏览过
原创

本文介绍如何利用Python的itchat模块实现微信消息防撤回功能。通过注册消息接收接口,程序可实时捕获并保存好友发送的文字、图片及文件,即使对方撤回也能保留记录。文中提供完整代码示例,并说明如何安装依赖、运行程序及打包为exe文件供无Python环境用户使用。

微信防撤回原理介绍

经常遇到这样的情况:好友发来一条消息,比如约你去看电影,但随后又撤回了,导致你错过了重要信息。如果你想知道对方究竟发了什么内容,可以尝试使用微信防撤回工具来解决这个问题。

环境准备与安装

环境要求

需要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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。