4
4
python_wechat.py by xianhu
5
5
主要包括如下功能:
6
6
(1) 自动提醒群红包
7
- (2) 自动提醒群中@自己或@all的内容
8
- (3) 自动提醒群中带有特殊关键字的消息
9
- (4) 自动保存被撤回消息,包括内容、文件、图片、语音、视频等
7
+ (2) 自动提醒群中带有特殊关键字的消息
8
+ (3) 自动保存被撤回消息,包括内容、文件、图片、语音、视频等
10
9
"""
11
10
12
11
import re
18
17
19
18
# 初始化
20
19
my = itchat .new_instance ()
21
- my .auto_login (hotReload = False , enableCmdQR = 2 )
22
- my .global_keys = ["人工智能 " , "机器学习" , "算法" , "数据挖掘 " ]
20
+ my .auto_login (hotReload = False , enableCmdQR = - 2 )
21
+ my .global_keys = ["创业 " , "齐现虎 " ]
23
22
my .to_user_name = "filehelper"
24
23
25
24
# my还包括的以下属性,注意用点.查看:
26
25
# (1) alive 是否还活着,isLogging 是否已登陆
27
26
# (2) loginInfo 登陆信息,其中的User属性为自己的信息User字典类,包括UserName, NickName, RemarkName, Sex(1 or 2)等
28
- # (3) memberList 通讯录列表,每一项为一个User字典类
29
- # (4) chatroomList 群聊列表,每一项为一个Chatroom字典类,包括UserName, NickName, RemarkName, MemberCount等
27
+ # (3) memberList 通讯录列表,每一项为一个User字典类,包括UserName, NickName, RemarkName, Sex(1 or 2)等
28
+ # (4) chatroomList 群聊列表,每一项为一个Chatroom字典类,包括UserName, NickName, RemarkName, MemberCount, MemberList等
30
29
# (5) mpList 订阅号列表,每一项为一个MassivePlatform字典类,包括UserName, NickName等
31
30
32
31
# 获取并更新通讯录: {UserName: UserInstance}
39
38
# 消息提取函数
40
39
def get_msg_list (msg ):
41
40
"""
42
- 提取消息内容
41
+ 提取消息内容,消息来源分类:
42
+ (1)来自好友的消息
43
+ (2)来自自己的消息
44
+ (3)来自文件传输助手的消息等
45
+ (4)来自群聊的消息
46
+ 提取消息内容,消息类型分类:
47
+ (1)文字
48
+ (2)图片
49
+ (3)语音
50
+ (4)视频
51
+ (5)地址
52
+ (6)名片
53
+ (7)Note
54
+ (8)分享
55
+ (9)附件
43
56
"""
44
- logging .warning ("%s" , msg )
45
-
57
+ # logging.warning("%s", msg)
46
58
msg_id = msg ["MsgId" ] # 消息ID
47
59
from_user_name = msg ["FromUserName" ] # 消息发送者ID
48
60
to_user_name = msg ["ToUserName" ] # 消息接受者ID
@@ -59,16 +71,15 @@ def get_msg_list(msg):
59
71
)
60
72
61
73
if from_user_name .startswith ("@@" ):
62
- # 群消息
63
74
nick_name = msg ["ActualNickName" ] if (msg ["ActualUserName" ] not in my .friends ) or \
64
75
(not my .friends [msg ["ActualUserName" ]]["RemarkName" ]) else my .friends [msg ["ActualUserName" ]]["RemarkName" ]
65
76
else :
66
- # 个人消息
67
77
nick_name = wind_name
68
78
69
79
we_type = msg ["Type" ] # 消息类型
70
80
we_text = msg ["Text" ] # 消息内容
71
81
82
+ logging .warning ("wind: %s, nick:%s, %s/%s, %s/%s, %s" , wind_name , nick_name , msg_type , we_type , msg_content , we_text , msg_time )
72
83
return msg_id , from_user_name , to_user_name , msg_type , msg_content , msg_time , msg_file , msg_url , wind_name , nick_name , we_type , we_text
73
84
74
85
@@ -83,11 +94,12 @@ def text_reply(msg):
83
94
84
95
# 消息过滤, 只监测文字、注解、分享、图片、语音、视频、附件等
85
96
if we_type not in ["Text" , "Note" , "Sharing" , "Picture" , "Recording" , "Video" , "Attachment" ]:
86
- logging .warning ("message ignored" )
97
+ logging .warning ("message type isn't included, ignored" )
87
98
return
88
99
89
100
# 处理来自自己的消息
90
101
if from_user_name == my .loginInfo ["User" ]["UserName" ]:
102
+ logging .warning ("message is from myself, ignored" )
91
103
return
92
104
93
105
# 消息存储,删除过期消息
@@ -102,10 +114,7 @@ def text_reply(msg):
102
114
if we_type == "Note" and we_text .find ("收到红包,请在手机上查看" ) >= 0 :
103
115
my .send ("【%s】中有红包,快抢!" % wind_name , toUserName = my .to_user_name )
104
116
105
- # 提到自己消息处理
106
- if msg ["IsAt" ]:
107
- my .send ("【%s】中有@你的消息:\n From: %s\n Time: %s\n %s" % (wind_name , nick_name , msg_time , msg_content ), toUserName = my .to_user_name )
108
-
117
+ # 关键字消息处理
109
118
for key in my .global_keys :
110
119
if msg_content .find (key ) >= 0 :
111
120
my .send ("【%s】中有关键字【%s】:\n From: %s\n Time: %s\n %s" % (wind_name , key , nick_name , msg_time , msg_content ), toUserName = my .to_user_name )
@@ -115,6 +124,7 @@ def text_reply(msg):
115
124
if we_type == "Note" and we_text .find ("撤回了一条消息" ) >= 0 :
116
125
old_msg = my .msg_store .get (msg_content [msg_content .find ("<msgid>" )+ 7 : msg_content .find ("</msgid>" )])
117
126
if not old_msg :
127
+ logging .warning ("not message id in my.msg_store" )
118
128
return
119
129
120
130
msg_id , from_user_name , to_user_name , msg_type , msg_content , msg_time , msg_file , msg_url , wind_name , nick_name , we_type , we_text = get_msg_list (old_msg )
0 commit comments