大家在使用微信过程中,有时候消息还没看到,就被撤回了。毕竟好奇心大家都有,明知到消息被撤回了,就更想去看一下是什么内容。
心里想着万一是女神给我表白了呢… 今天的Python学习教程就教大家用Python来做个微信防撤回的小功能。支持文本、图片、语音、视频、名片的防撤回。
思路:
利用itchat库将每次接收到的消息进行缓存。监听撤回事件,当有消失被撤回时,通过msgId去缓存中取到信息再发送给文件传输助手。这样就实现了一个简单的防撤回功能。
效果图
Python学习教程操作:将接收的消息缓存
import itchat from itchat.content import * import datetime import re import os # 微信接受的信息存储路径 FILE_PATH = '/home/wechat/' # 存放微信消息的缓存字典 MSG_DICT = {} # 微信消息类型字典 MSG_MESSAGE = {'Text': '文本', 'Map': '位置分享', 'Sharing': '分享链接', 'Picture': '图片', 'Video': '视频', 'Card': '名片', 'Attachment': '附件', 'Recording': '语音'} """ 监听消息 """ # 监听的消息类型 为TEXT, MAP, SHARING, PICTURE, VIDEO, CARD, RECORDING, ATTACHMENT @itchat.msg_register([TEXT, MAP, SHARING, PICTURE, VIDEO, CARD, RECORDING, ATTACHMENT]) def wechat_msg(msg): # 获取消息id msg_id = msg['MsgId'] # 当前时间 msg_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 发送人 msg_from = itchat.search_friends(userName=msg['FromUserName'])['RemarkName'] # 备注为空 获取昵称 if not msg_from: msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName'] # 内容 msg_text = msg['Text'] # 消息类型 msg_type = msg['Type'] msg_url = None # 消息为视频、照片、语音、附件的时候需要进行保存 save_type = [VIDEO, PICTURE, RECORDING, ATTACHMENT] if msg_type in save_type: # 保存文件 msg['Text'](FILE_PATH + msg['FileName']) msg_text = msg['FileName'] # 消息类型为地图、分享链接时 记录url url_type = [MAP, SHARING] if msg_type in url_type: msg_url = msg['msg_url'] # 名片 if msg_type == CARD: sex = msg['RecommendInfo']['Sex'] if sex == 1: sex = '小哥哥' elif sex == 2: sex = '小姐姐' else: sex = 'ladyBoy' msg_text = f'来自{msg["RecommendInfo"]["Province"]} { msg["RecommendInfo"]["City"]}的 {msg["RecommendInfo"]["NickName"]} {sex} 的名片.' # 消息放入字典中 MSG_DICT[msg_id] = {'msg_from': msg_from, 'msg_time': msg_time, 'msg_text': msg_text, 'msg_url': msg_url, 'msg_type': MSG_MESSAGE[msg_type]} print({'msg_from': msg_from, 'msg_time': msg_time, 'msg_text': msg_text, 'msg_url': msg_url, 'msg_type': MSG_MESSAGE[msg_type]})
我们将微信接收到的文本、视频、语音、图像、附件等消息类型都缓存到了MSG_DICT这个字典当中。下面我们就可以对 撤回 事件进行监听
Python学习教程:监听撤回、发送撤回内容
# 监听微信事件, @itchat.msg_register([NOTE]) def get_withdraw_message(msg): # 文本消息 content = msg['Content'] print('监听事件...') # result = re.search(r"\<\!\[CDATA\[.*撤回了一条消息]\]\>", msg['Content']) # 判断是否是撤回消息 pattern = re.compile(r"\<\!\[CDATA\[.*撤回了一条消息]\]\>") match = pattern.findall(content) """ msg 内容 '<sysmsg type="revokemsg"> <revokemsg> <session>wxid_ajl8ccgq8ehf22</session> <oldmsgid>1671792812</oldmsgid> <msgid>3341430144853335059</msgid> <replacemsg><![CDATA["初一丶" 撤回了一条消息]]></replacemsg> </revokemsg> </sysmsg>' """ # 有撤回的消息 if match: # 获取撤回消息的msg_id withdraw_msg_id = re.search(r"\<msgid>(.*?)\<\/msgid", content).group(1) if MSG_DICT: # 获取撤回消息的内容 withdraw_msg = MSG_DICT.get(withdraw_msg_id) # 构建消息文本 semd_msg = withdraw_msg.get('msg_from') + '撤回了他在' + withdraw_msg.get('msg_time') + \ '发送的' + withdraw_msg.get('msg_type') + '消息。' + '内容为:' + withdraw_msg.get('msg_text') print(semd_msg) # 撤回信息的消息类型 type = withdraw_msg['msg_type'] # 如果是地图、或者分享信息的时候 拼接url if type in [MAP, SHARING]: semd_msg += "信息链接为:" + withdraw_msg.get('msg_url') # 将文本信息发送至文件传输助手 result = itchat.send(semd_msg, toUserName='filehelper') # 如果是['视屏', '图片', '语音', '附件'] 发送相应文件 file = FILE_PATH + withdraw_msg['msg_text'] if type in ['视频', '图片', '语音', '附件']: # 发送文件至传输助手 result = itchat.send_file(file, toUserName='filehelper') # 发送图片也可以 # result = itchat.send_image(file, toUserName='filehelper') # 发送视频 # result = itchat.send_video(file, toUserName='filehelper') # 将已发送的文件 从硬盘上删除 os.remove(file) # 从字典中删除已发送的文件 del MSG_DICT[withdraw_msg_id] if __name__ == '__main__': # 微信热登录 itchat.auto_login(True) # 启动 itchat.run()
有兴趣的伙伴可以试一下的,这篇关于微信防撤回的教程,去年就在琢磨跟大家出了。库存啦哈哈哈!更多的Python学习教程和Python实用小技巧也会继续为大家更新!
本文暂时没有评论,来添加一个吧(●'◡'●)