44python_wechat.py by xianhu 
55主要包括如下功能: 
66(1) 自动提醒群红包 
7- (2) 自动提醒群中@自己或@all的内容 
8- (3) 自动提醒群中带有特殊关键字的消息 
9- (4) 自动保存被撤回消息,包括内容、文件、图片、语音、视频等 
7+ (2) 自动提醒群中带有特殊关键字的消息 
8+ (3) 自动保存被撤回消息,包括内容、文件、图片、语音、视频等 
109""" 
1110
1211import  re 
1817
1918# 初始化 
2019my  =  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  =  ["创业 " , "齐现虎 " ]
2322my .to_user_name  =  "filehelper" 
2423
2524# my还包括的以下属性,注意用点.查看: 
2625# (1) alive 是否还活着,isLogging 是否已登陆 
2726# (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等  
3029# (5) mpList 订阅号列表,每一项为一个MassivePlatform字典类,包括UserName, NickName等 
3130
3231# 获取并更新通讯录: {UserName: UserInstance} 
3938# 消息提取函数 
4039def  get_msg_list (msg ):
4140 """ 
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)附件 
4356 """ 
44-  logging .warning ("%s" , msg )
45- 
57+  # logging.warning("%s", msg) 
4658 msg_id  =  msg ["MsgId" ] # 消息ID 
4759 from_user_name  =  msg ["FromUserName" ] # 消息发送者ID 
4860 to_user_name  =  msg ["ToUserName" ] # 消息接受者ID 
@@ -59,16 +71,15 @@ def get_msg_list(msg):
5971 )
6072
6173 if  from_user_name .startswith ("@@" ):
62-  # 群消息 
6374 nick_name  =  msg ["ActualNickName" ] if  (msg ["ActualUserName" ] not  in my .friends ) or  \
6475 (not  my .friends [msg ["ActualUserName" ]]["RemarkName" ]) else  my .friends [msg ["ActualUserName" ]]["RemarkName" ]
6576 else :
66-  # 个人消息 
6777 nick_name  =  wind_name 
6878
6979 we_type  =  msg ["Type" ] # 消息类型 
7080 we_text  =  msg ["Text" ] # 消息内容 
7181
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 )
7283 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 
7384
7485
@@ -83,11 +94,12 @@ def text_reply(msg):
8394
8495 # 消息过滤, 只监测文字、注解、分享、图片、语音、视频、附件等 
8596 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" )
8798 return 
8899
89100 # 处理来自自己的消息 
90101 if  from_user_name  ==  my .loginInfo ["User" ]["UserName" ]:
102+  logging .warning ("message is from myself, ignored" )
91103 return 
92104
93105 # 消息存储,删除过期消息 
@@ -102,10 +114,7 @@ def text_reply(msg):
102114 if  we_type  ==  "Note"  and  we_text .find ("收到红包,请在手机上查看" ) >=  0 :
103115 my .send ("【%s】中有红包,快抢!"  %  wind_name , toUserName = my .to_user_name )
104116
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+  # 关键字消息处理 
109118 for  key  in  my .global_keys :
110119 if  msg_content .find (key ) >=  0 :
111120 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):
115124 if  we_type  ==  "Note"  and  we_text .find ("撤回了一条消息" ) >=  0 :
116125 old_msg  =  my .msg_store .get (msg_content [msg_content .find ("<msgid>" )+ 7 : msg_content .find ("</msgid>" )])
117126 if  not  old_msg :
127+  logging .warning ("not message id in my.msg_store" )
118128 return 
119129
120130 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