当前位置:   article > 正文

3步实现用Python防止微信消息撤回功能!_微信防撤回

微信防撤回

我们在使用微信时,如果发错消息,可以撤回,但你有没有想过在某些特殊情况下,防止对方撤回消息呢?

今天我们就使用Python实现一下查看好友撤回的微信消息的功能。运行程序,手机端微信扫描弹出的二维码即可登录网页版微信,程序会将网页版微信收到的所有消息都缓存下来,当检测到有消息(语音、文字、图片等)撤回时,将撤回消息的缓存版本通过文件传输助手发送到自己的手机上,如下图所示。

实现微信消息防撤回功能主要通过Python内置的os模块、re模块、time模块、platform模块,以及第三方模块itchat实现。具体步骤如下:

(1)由于使用了第三方模块itchat,所以需要先安装该模块。使用pip命令安装模块的命令如下:

pip install itchat
  • 1

(2)导入程序中需要使用的模块,具体代码如下:

import re

import os

import time

import itchat

import platform

from itchat.content import *
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(3)实现逻辑。首先使用platform模块获取操作系统底层的数据,根据不同的操作系统传入不同的登录参数,登陆成功后,缓存接收到的所有信息并监听是否有消息撤回。代码如下:

import re

import os

import time

import itchat

import platform

from itchat.content import *

 

msg_info = {}

face_package = None

 

# 处理接收到的信息

@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO], isFriendChat=True, isMpChat=True)

def handle_rsg(msg):

    global face_package

    # 接收消息的时间

    msg_time_receive = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    # 发信人

    try:

        msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName']

    except:

        msg_from = 'WeChat Official Accounts'

    # 发信时间

    msg_time_send = msg['CreateTime']

    # 信息ID

    msg_id = msg['MsgId']

    msg_content = None

    msg_link = None

    # 文本或者好友推荐

    if msg['Type'] == 'Text' or msg['Type'] == 'Friends':

        msg_content = msg['Text']

        print('[Text/Friends]: %s' % 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))

        print('[Attachment/Video/Picture/Recording]: %s' % 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

        print('[Map]: %s' % msg_content)

    # 分享的音乐/文章

    elif msg['Type'] == 'Sharing':

        msg_content = msg['Text']

        msg_link = msg['Url']

        print('[Sharing]: %s' % msg_content)

    msg_info.update(

            {

                msg_id: {

                    "msg_from": msg_from,

                    "msg_time_send": msg_time_send,

                    "msg_time_receive": msg_time_receive,

                    "msg_type": msg["Type"],

                    "msg_content": msg_content,

                    "msg_link": msg_link

                }

            }

        )

    face_package = msg_content

 

# 监听是否有消息撤回

@itchat.msg_register(NOTE, isFriendChat=True, isGroupChat=True, isMpChat=True)

def monitor(msg):

    if '撤回了一条消息' in msg['Content']:

        recall_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['Content']).group(1)

        recall_msg = msg_info.get(recall_msg_id)

        print('[Recall]: %s' % recall_msg)

        # 表情包

        if len(recall_msg_id) < 11:

            itchat.send_file(face_package, toUserName='filehelper')

        else:

            msg_prime = '---' + recall_msg.get('msg_from') + '撤回了一条消息---\n' \

                        '消息类型:' + recall_msg.get('msg_type') + '\n' \

                        '时间:' + recall_msg.get('msg_time_receive') + '\n' \

                        '内容:' + recall_msg.get('msg_content')

            if recall_msg['msg_type'] == 'Sharing':

                msg_prime += '\n链接:' + recall_msg.get('msg_link')

            itchat.send_msg(msg_prime, toUserName='filehelper')

            if recall_msg['msg_type'] == 'Attachment' or recall_msg['msg_type'] == "Video" or recall_msg['msg_type'] == 'Picture' or recall_msg['msg_type'] == 'Recording':

                file = '@fil@%s' % (recall_msg['msg_content'])

                itchat.send(msg=file, toUserName='filehelper')

                os.remove(recall_msg['msg_content'])

            msg_info.pop(recall_msg_id)

 

if __name__ == '__main__':

    if platform.platform()[:7] == 'Windows':

        itchat.auto_login(enableCmdQR=False, hotReload=True)

    else:

        itchat.auto_login(enableCmdQR=True, hotReload=True)

    itchat.run()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/420930
推荐阅读
相关标签
  

闽ICP备14008679号