脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python基于itchat模块实现微信防撤回

python基于itchat模块实现微信防撤回

2021-06-21 00:46TANKING- Python

这篇文章主要为大家详细介绍了python实现微信防撤回,基于itchat模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。

环境要求

python3
电脑

安装itchat

?
1
pip install itchat

使用代码

新建chehui.py,拷贝以下代码

?
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
__author__ = 'jiangwenwen'
 
import itchat
from itchat.content import *
import time
import re
import os
 
print("该程序由里客云资源站开发,网址:likeyunba.com")
print("作者:tanking")
print("打开程序会弹出一个二维码,微信扫码")
print("如果二维码弹不出,那就在你这个程序的同一个目录下找到qr.png双击打开扫码")
print("扫码后,出现start auto replying就可以实时监控消息了...")
 
msg_information = {}
# 针对表情包的内容
face_bug = none
 
@itchat.msg_register([text, picture, friends, card, map, sharing, recording, attachment, video], isfriendchat=true, ismpchat=true)
def handle_receive_msg(msg):
 global face_bug
 # 接收消息的时间
 msg_time_rec = time.strftime("%y-%m-%d %h:%m:%s", time.localtime())
 # 在好友列表列表中查询发送信息的好友昵称
 msg_from = itchat.search_friends(username=msg['fromusername'])['nickname']
 # 信息发送的时间
 msg_time = msg['createtime']
 # 每条信息的id
 msg_id = msg['msgid']
 # 储存信息的内容
 msg_content = none
 # 储存分享的连接,比如分享的文章和音乐
 msg_share_url = none
 
 # 如果发送的消息是文本或者好友推荐
 if msg['type'] == 'text' or msg['type'] == 'friends':
 msg_content = msg['text']
 print(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))
 
 # 如果消息是推荐的名片
 elif msg['type'] == 'card':
 # 内容是推荐人的昵称和性别
 msg_content = msg['recommendinfo']['nickname'] + '的名片'
 if msg['recommendinfo']['sex'] == 1:
  msg_content += '性别为男'
 else:
  msg_content += '性别为女'
 
 print(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
 
 # 如果消息是分享的音乐或者文章,详细的内容为文章的标题或者分享的名字
 elif msg['type'] == 'sharing':
 msg_content = msg['text']
 msg_share_url = msg['url']
 print(msg_share_url)
 face_bug = msg_content
 
 # 将信息存储在字典中,每一个msg_id对应一条消息
 msg_information.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
  }
 }
)
 
#这个是用于监听是否有friend消息撤回
@itchat.msg_register(note, isfriendchat=true, isgroupchat=true, ismpchat=true)
def information(msg):
 # 这里如果这里的msg['content']中包含消息撤回和id,就执行下面的语句
 if '撤回了一条消息' in msg['content']:
 old_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['content']).group(1)
 # 得到消息
 old_msg = msg_information.get(old_msg_id)
 print(old_msg)
 
 # 如果发送的是表情
 if len(old_msg_id)<11:
  itchat.send_file(face_bug, tousername='filehelper')
 # 发送撤回的提示给文件助手
 else:
  msg_body = "【"\
   + old_msg.get('msg_from') + "撤回了】\n"\
   + old_msg.get("msg_type") + "消息:" + "\n"\
   + old_msg.get("msg_time_rec") + "\n"\
   + r"" + old_msg.get("msg_content")
 
 # 如果分享的文件被撤回了,那么就将分享的url加在msg_body中发送给文件助手
 if old_msg['msg_type'] == "sharing":
  msg_body += "\n就是这个链接>" + old_msg.get('msg_share_url')
 
 # 将撤回消息发送到文件助手
 itchat.send_msg(msg_body, tousername="filehelper")
 
 # 有文件的话也要将文件发送回去
 if old_msg["msg_type"] == "picture"\
  or old_msg["msg_type"] == "recording"\
  or old_msg["msg_type"] == "video"\
  or old_msg["msg_type"] == "attachment":
  file = "@fil@%s" % (old_msg['msg_content'])
  itchat.send(msg=file, tousername='filehelper')
  os.remove(old_msg['msg_content'])
 
 # 删除字典旧信息
 msg_information.pop(old_msg_id)
 
itchat.auto_login(hotreload=true)
itchat.run()

cmd运行即可。

考虑到有一些人没有python环境,我已经打包成可执行文件了,直接双击exe就可以在电脑运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_39927850/article/details/88874350

延伸 · 阅读

精彩推荐