随着微信成为生活中必不可少的通信工具,越来越多的人使用微信与朋友、家人、同事保持联系。然而,微信的防撤回功能却给用户带来了困扰。一旦发送了一条消息,如果对方撤回了,我们就无法查看当时发送的内容了。为解决这个问题,很多开发者自发开发出了电脑微信防撤回插件,这里介绍一个基于Python的插件。
一、插件原理
电脑微信防撤回插件原理其实并不复杂。当我们发送消息给好友时,实际上在我们的微信客户端和服务器之间会产生一条消息记录。插件则是访问微信客户端的消息记录,将撤回的消息的记录重新发送到本机微信客户端,从而达到防止撤回的目的。
二、插件实现
基于Python,实现电脑微信防撤回插件需要用到itchat库和Python拦截器机制。
1.itchat库的使用
import itchat itchat.auto_login(hotReload=True)
itchat库是基于微信网页版开发的一个IM库,通过itchat库,我们可以快速地实现微信的登录和微信消息的监控。其中,auto_login用于实现微信的登录,hotReload参数用于缓存登录信息,可以免除每次登录的麻烦。
2.Python拦截器机制的使用
@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=True) def send_msg(msg): # 消息类型不是撤回类型则保存 if msg['Type'] != 'Recalled': msg['User']['NickName'] = msg['User']['RemarkName'] if msg['User']['RemarkName'] else msg['User']['NickName'] msg['MsgId'] = str(msg['MsgId']) msg_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") msg['Time'] = msg_time msg['ToUserName'] = '' msg['NickName'] = '' if msg['Type'] == 'Text': msg['Content'] = str(msg['Content']) save_msg(msg) # 消息类型是撤回类型则执行防撤回 else: from_users = [] from_groups = [] msg_id = '' recall_msg_from_user_nick_name = '' for message in msg['Content'].split("n"): if message.find("消息: ") > -1: from_users.append(message.replace("消息: ", "")) elif message.find("群聊: ") > -1: from_groups.append(message.replace("群聊: ", "")) elif message.find("撤回了一条消息") > -1: msg_id = message[5:21] recall_msg_from_user_nick_name = message[22:-7] for fr_user in from_users: print('正在接收消息 %s' % fr_user) recallmsg = get_recall_msg(msg_id, recall_msg_from_user_nick_name, fr_user) send_msg_data_2_wechat(recallmsg) for fr_group in from_groups: print('正在接收消息 %s' % fr_group) recallmsg = get_recall_msg(msg_id, recall_msg_from_user_nick_name, fr_group) send_msg_data_2_wechat(recallmsg, fr_group)
通过Python拦截器机制,我们可以监控、拦截微信消息。代码中如果捕捉到的消息类型不是撤回类型,则将该消息保存,否则执行防撤回操作。具体来说, 防撤回的实现是通过将撤回的消息重新发送到微信客户端完成。在执行该操作前,需要用到保存在本地的被撤回的消息记录及其相关信息,然后将该消息记录重新发送到本机微信客户端,完成防撤回。
三、插件使用和功能扩展
使用该插件时,我们需要先安装itchat库,然后添加插件代码到Python文件中即可。该插件不仅可以实现电脑微信的防撤回功能,还可以实现微信消息的自动回复、微信信息的发送、微信客户端控制等等功能扩展。比如,我们可以添加一个代码片段,实现当接收到指定关键字时,自动回复给好友“机器人正在开发中,敬请期待……”。
# 自动回复 @itchat.msg_register(TEXT) def text_reply(msg): # 如果收到“机器人”,就回复“机器人正在开发中” if msg['Text'] == '机器人': itchat.send_msg('机器人正在开发中,敬请期待......', toUserName=msg['FromUserName'])
通过这样的方式,我们可以实现更多的功能扩展,让电脑微信成为更加强大的实用工具。
四、总结
本文介绍了一款基于Python的电脑微信防撤回插件,详细阐述了插件的原理、实现、使用及功能扩展。该插件不仅可以帮助我们防止被好友撤回消息,还可以实现微信消息的自动回复、微信信息的发送、微信客户端控制等等功能扩展,具有很高的可扩展性和实用性。