python实现文件助手中查看微信撤回消息
利用python实现防撤回,对方撤回的消息可在自己的微信文件传输助手中查看。
如果想变成可执行文件放在电脑中运行,可用pyinstaller将此程序打包成exe文件。
pyinstaller文件名.py-F
执行程序后,消息防撤回就启动了。
程序完整代码
#-*-encoding:utf-8-*- importos importre importshutil importtime importitchat fromitchat.contentimport* #说明:可以撤回的有文本文字、语音、视频、图片、位置、名片、分享、附件 #{msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)} msg_dict={} #文件存储临时目录 rev_tmp_dir=r"G:\python代码\微信\撤回到文件助手" ifnotos.path.exists(rev_tmp_dir):os.mkdir(rev_tmp_dir) #表情有一个问题|接受信息和接受note的msg_id不一致巧合解决方案 face_bug=None #将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理|不接受不具有撤回功能的信息 #[TEXT,PICTURE,MAP,CARD,SHARING,RECORDING,ATTACHMENT,VIDEO,FRIENDS,NOTE] @itchat.msg_register([TEXT,PICTURE,MAP,CARD,SHARING,RECORDING,ATTACHMENT,VIDEO]) defhandler_receive_msg(msg): globalface_bug #获取的是本地时间戳并格式化本地时间戳e:2017-04-2121:30:08 msg_time_rec=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime()) #消息ID msg_id=msg['MsgId'] #消息时间 msg_time=msg['CreateTime'] #消息发送人昵称|这里也可以使用RemarkName备注但是自己或者没有备注的人为None msg_from=(itchat.search_friends(userName=msg['FromUserName']))["NickName"] #消息内容 msg_content=None #分享的链接 msg_share_url=None ifmsg['Type']=='Text'\ ormsg['Type']=='Friends': msg_content=msg['Text'] elifmsg['Type']=='Recording'\ ormsg['Type']=='Attachment'\ ormsg['Type']=='Video'\ ormsg['Type']=='Picture': msg_content=r""+msg['FileName'] #保存文件 msg['Text'](rev_tmp_dir+msg['FileName']) elifmsg['Type']=='Card': msg_content=msg['RecommendInfo']['NickName']+r"的名片" elifmsg['Type']=='Map': x,y,location=re.search( ""+x.__str__()+"经度->"+y.__str__() else: msg_content=r""+location elifmsg['Type']=='Sharing': msg_content=msg['Text'] msg_share_url=msg['Url'] face_bug=msg_content #更新字典 msg_dict.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 } } ) #收到note通知类消息,判断是不是撤回并进行相应操作 @itchat.msg_register([NOTE]) defsend_msg_helper(msg): globalface_bug ifre.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>",msg['Content'])isnotNone: #获取消息的id old_msg_id=re.search("\ (.*?)\<\/msgid\>",msg['Content']).group(1) old_msg=msg_dict.get(old_msg_id,{}) iflen(old_msg_id)<11: itchat.send_file(rev_tmp_dir+face_bug,toUserName='filehelper') os.remove(rev_tmp_dir+face_bug) else: msg_body="告诉你一个秘密~"+"\n"\ +old_msg.get('msg_from')+"撤回了"+old_msg.get("msg_type")+"消息"+"\n"\ +old_msg.get('msg_time_rec')+"\n"\ +"撤回了什么⇣"+"\n"\ +r""+old_msg.get('msg_content') #如果是分享存在链接 ifold_msg['msg_type']=="Sharing":msg_body+="\n就是这个链接➣"+old_msg.get('msg_share_url') #将撤回消息发送到文件助手 itchat.send(msg_body,toUserName='filehelper') #有文件的话也要将文件发送回去 ifold_msg["msg_type"]=="Picture"\ orold_msg["msg_type"]=="Recording"\ orold_msg["msg_type"]=="Video"\ orold_msg["msg_type"]=="Attachment": file='@fil@%s'%(rev_tmp_dir+old_msg['msg_content']) itchat.send(msg=file,toUserName='filehelper') os.remove(rev_tmp_dir+old_msg['msg_content']) #删除字典旧消息 msg_dict.pop(old_msg_id) if__name__=='__main__': itchat.auto_login() itchat.get_QR itchat.run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。