随着微信成为生活中必不可少的通信工具,越来越多的人使用微信与朋友、家人、同事保持联系。然而,微信的防撤回功能却给用户带来了困扰。一旦发送了一条消息,如果对方撤回了,我们就无法查看当时发送的内容了。为解决这个问题,很多开发者自发开发出了电脑微信防撤回插件,这里介绍一个基于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的电脑微信防撤回插件,详细阐述了插件的原理、实现、使用及功能扩展。该插件不仅可以帮助我们防止被好友撤回消息,还可以实现微信消息的自动回复、微信信息的发送、微信客户端控制等等功能扩展,具有很高的可扩展性和实用性。
