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