1212import time
1313import itchat
1414import logging
15- import datetime
1615from itchat .content import *
1716
1817# 初始化
@@ -52,11 +51,10 @@ def get_msg_list(msg):
5251
5352 msg_type = msg ["MsgType" ] # 消息类型
5453 msg_content = msg ["Content" ] # 消息内容
55- msg_time = datetime . datetime . fromtimestamp ( msg ["CreateTime" ]) # 消息发送时间
54+ msg_time = msg ["CreateTime" ] # 消息发送时间
5655
5756 msg_file = msg ["FileName" ] # 消息中所带文件的名称
5857 msg_file_length = msg ["FileSize" ] # 消息中所带文件的大小
59- msg_file_length = int (msg_file_length ) if msg_file_length .strip () else 0
6058 msg_voice_length = msg ["VoiceLength" ] # 消息中所带语音的长度(毫秒)
6159 msg_play_length = msg ["PlayLength" ] # 消息中所带视频的长度(秒)
6260 msg_url = msg ["Url" ] # 消息中所带链接的地址
@@ -75,7 +73,7 @@ def get_msg_list(msg):
7573 we_type = msg ["Type" ] # 消息类型
7674 we_text = msg ["Text" ] # 消息内容
7775
78- logging .warning ("show: nick_name =%s, wind_name=%s, we_type=%s, we_text=%s, msg_time=%s " , msg_nick_name , wind_name , we_type , we_text , msg_time )
76+ logging .warning ("show: msg_nick_name =%s, wind_name=%s, we_type=%s, we_text=%s" , msg_nick_name , wind_name , we_type , we_text )
7977 return msg_id , from_user_name , to_user_name , msg_type , msg_content , msg_time , msg_file , msg_file_length , msg_voice_length , msg_play_length , msg_url , \
8078 wind_name , msg_user_name , msg_nick_name , is_at , we_type , we_text
8179
@@ -84,25 +82,25 @@ def get_msg_list(msg):
8482@my .msg_register ([TEXT , PICTURE , RECORDING , VIDEO , MAP , CARD , NOTE , SHARING , ATTACHMENT ], isFriendChat = True , isGroupChat = True )
8583def text_reply (msg ):
8684 """
87- 消息自动接收, 接受全部的消息
85+ 消息自动接收, 接受全部的消息(自己发送的消息除外)
8886 """
87+ # 跳过来自自己的消息
88+ if msg ["FromUserName" ] == my .loginInfo ["User" ]["UserName" ]:
89+ return
90+
8991 # 消息提取
92+ msg_list = get_msg_list (msg )
9093 msg_id , from_user_name , to_user_name , msg_type , msg_content , msg_time , msg_file , msg_file_length , msg_voice_length , msg_play_length , msg_url , \
91- wind_name , msg_user_name , msg_nick_name , is_at , we_type , we_text = get_msg_list ( msg )
94+ wind_name , msg_user_name , msg_nick_name , is_at , we_type , we_text = msg_list
9295
93- # 消息过滤, 只监测文字、图片、语音、注解、分享等
94- if we_type not in ["Text" , "Picture" , "Recording" , "Note" , "Sharing" ]:
96+ # 消息过滤, 只监测文字、图片、语音、名片、 注解、分享等
97+ if we_type not in ["Text" , "Picture" , "Recording" , "Card" , " Note" , "Sharing" ]:
9598 logging .warning ("message type isn't included, ignored" )
9699 return
97100
98- # 处理来自自己的消息
99- if from_user_name == my .loginInfo ["User" ]["UserName" ]:
100- logging .warning ("message is from myself, ignored" )
101- return
102-
103101 # 消息存储,删除过期消息
104- my .msg_store [msg_id ] = msg
105- for _id in [_id for _id in my .msg_store if time .time () - my .msg_store [_id ]["CreateTime" ] > 120 ]:
102+ my .msg_store [msg_id ] = msg_list
103+ for _id in [_id for _id in my .msg_store if time .time () - my .msg_store [_id ][5 ] > 120 ]:
106104 my .msg_store .pop (_id )
107105
108106 # 保存消息中的内容(图片、语音等),不保存动态图片
@@ -113,15 +111,15 @@ def text_reply(msg):
113111 except Exception as excep :
114112 logging .error ("downloading %s to .Cache/ error: %s" , msg_file , excep )
115113
116- # ==== 处理红包消息 ====
114+ # ==== 处理群消息 ====
117115 if from_user_name .startswith ("@@" ):
118116 # ==== 处理红包消息 ====
119117 if we_type == "Note" and we_text .find ("收到红包,请在手机上查看" ) >= 0 :
120- my .send ("【%s】中【%s】发红包啦 ,快抢!" % ( wind_name , msg_nick_name ) , toUserName = my .to_user_name )
118+ my .send ("【%s】中有人发红包啦 ,快抢!" % wind_name , toUserName = my .to_user_name )
121119 # ==== 处理关键词消息 ====
122120 for key in my .global_keys :
123121 if we_type == "Text" and we_text .find (key ) >= 0 :
124- my .send ("【%s】中【%s】提及关键字 :%s" % (wind_name , msg_nick_name , key ), toUserName = my .to_user_name )
122+ my .send ("【%s】中【%s】提及了关键字 :%s" % (wind_name , msg_nick_name , key ), toUserName = my .to_user_name )
125123 my .send (we_text , toUserName = my .to_user_name )
126124 break
127125 # ==== 群内是否被@ ====
@@ -131,20 +129,22 @@ def text_reply(msg):
131129
132130 # ==== 撤回消息处理(必须为最后一步) ====
133131 if we_type == "Note" and we_text .find ("撤回了一条消息" ) >= 0 :
134- old_msg = my .msg_store .get (msg_content [msg_content .find ("<msgid>" )+ 7 : msg_content .find ("</msgid>" )])
135- if not old_msg :
132+ msg_list = my .msg_store .get (msg_content [msg_content .find ("<msgid>" )+ 7 : msg_content .find ("</msgid>" )])
133+ if not msg_list :
136134 logging .warning ("not message id in my.msg_store" )
137135 return
138136
139137 msg_id , from_user_name , to_user_name , msg_type , msg_content , msg_time , msg_file , msg_file_length , msg_voice_length , msg_play_length , msg_url , \
140- wind_name , msg_user_name , msg_nick_name , is_at , we_type , we_text = get_msg_list ( old_msg )
138+ wind_name , msg_user_name , msg_nick_name , is_at , we_type , we_text = msg_list
141139 my .send ("【%s】中【%s】撤回了自己发送的消息:\n Type: %s\n Time: %s\n %s" % (wind_name , msg_nick_name , we_type , msg_time , msg_file ), toUserName = my .to_user_name )
142140
143- if we_type == "Text" :
144- my .send (we_text , toUserName = my .to_user_name )
141+ if we_type in [ "Text" , "Card" ] :
142+ my .send (str ( we_text ) , toUserName = my .to_user_name )
145143 elif we_type == "Sharing" :
146144 my .send (we_text + "\n " + msg_url , toUserName = my .to_user_name )
147- elif (we_type in ["Picture" , "Recording" ]) and (not msg_file .endswith (".gif" )):
145+ elif we_type == "Recording" :
146+ my .send_file (".Cache/" + msg_file , toUserName = my .to_user_name )
147+ elif we_type == "Picture" and (not msg_file .endswith (".gif" )):
148148 my .send_image (".Cache/" + msg_file , toUserName = my .to_user_name )
149149
150150 return
@@ -219,7 +219,7 @@ def text_reply(msg):
219219"""
220220
221221"""
222- 群消息(来自别人) :
222+ 群消息:
223223{
224224 'MsgId': '7844877618948840992',
225225 'FromUserName': '@@8dc5df044444d1fb8e3972e755b47adf9d07f5a032cae90a4d822b74ee1e4880',
@@ -332,114 +332,4 @@ def text_reply(msg):
332332 'Type': 'Text',
333333 'Text': '就是那个,那个协议我们手上有吗'
334334}
335-
336- 群消息(来自自己):
337- WARNING: root: message: {
338- 'MsgId': '6658361167561279652',
339- 'FromUserName': '@e79dde912b8f817514c01f399ca9ba12',
340- 'ToUserName': '@@cbd264b76a28d4f5bad27197de60735bc082c95ab49891cf64d745ff4be17e30',
341- 'MsgType': 1,
342- 'Content': '看来最近是没有线下活动了',
343- 'Status': 3,
344- 'ImgStatus': 1,
345- 'CreateTime': 1498455090,
346- 'VoiceLength': 0,
347- 'PlayLength': 0,
348- 'FileName': '',
349- 'FileSize': '',
350- 'MediaId': '',
351- 'Url': '',
352- 'AppMsgType': 0,
353- 'StatusNotifyCode': 0,
354- 'StatusNotifyUserName': '',
355- 'HasProductId': 0,
356- 'Ticket': '',
357- 'ImgHeight': 0,
358- 'ImgWidth': 0,
359- 'SubMsgType': 0,
360- 'NewMsgId': 6658361167561279652,
361- 'OriContent': '',
362- 'ActualNickName': '齐现虎',
363- 'IsAt': False,
364- 'ActualUserName': '@e79dde912b8f817514c01f399ca9ba12',
365- 'User': <Chatroom: {
366- 'MemberList': <ContactList: [
367- <ChatroomMember: {
368- 'MemberList': <ContactList: []>,
369- 'Uin': 0,
370- 'UserName': '@143b0d468a5be892768e372aae5d3c97f20dd73c6f28a99092fb96d4fc7862e3',
371- 'NickName': '李小盛',
372- 'AttrStatus': 235557,
373- 'PYInitial': '',
374- 'PYQuanPin': '',
375- 'RemarkPYInitial': '',
376- 'RemarkPYQuanPin': '',
377- 'MemberStatus': 0,
378- 'DisplayName': '',
379- 'KeyWord': ''
380- }>,
381- <ChatroomMember: {
382- 'MemberList': <ContactList: []>,
383- 'Uin': 0,
384- 'UserName': '@edb9eb66b235ef72237ad025290813159b6d3e9cdaa15284ad7f6748b38c2c1f',
385- 'NickName': '小z@德研社',
386- 'AttrStatus': 103461,
387- 'PYInitial': '',
388- 'PYQuanPin': '',
389- 'RemarkPYInitial': '',
390- 'RemarkPYQuanPin': '',
391- 'MemberStatus': 0,
392- 'DisplayName': '小z研值512',
393- 'KeyWord': ''
394- }>,
395- ]>,
396- 'Uin': 0,
397- 'UserName': '@@cbd264b76a28d4f5bad27197de60735bc082c95ab49891cf64d745ff4be17e30',
398- 'NickName': '德研社z战队',
399- 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=688463282&username=@@cbd264b76a28d4f5bad27197de60735bc082c95ab49891cf64d745ff4be17e30&skey=',
400- 'ContactFlag': 2,
401- 'MemberCount': 70,
402- 'RemarkName': '',
403- 'HideInputBarFlag': 0,
404- 'Sex': 0,
405- 'Signature': '',
406- 'VerifyFlag': 0,
407- 'OwnerUin': 0,
408- 'PYInitial': 'DYSZZD',
409- 'PYQuanPin': 'deyanshezzhandui',
410- 'RemarkPYInitial': '',
411- 'RemarkPYQuanPin': '',
412- 'StarFriend': 0,
413- 'AppAccountFlag': 0,
414- 'Statues': 0,
415- 'AttrStatus': 0,
416- 'Province': '',
417- 'City': '',
418- 'Alias': '',
419- 'SnsFlag': 0,
420- 'UniFriend': 0,
421- 'DisplayName': '',
422- 'ChatRoomId': 0,
423- 'KeyWord': '',
424- 'EncryChatRoomId': '@be08ab93d4d5440069d6617df937b689',
425- 'IsOwner': 0,
426- 'IsAdmin': None,
427- 'Self': <ChatroomMember: {
428- 'MemberList': <ContactList: []>,
429- 'Uin': 0,
430- 'UserName': '@e79dde912b8f817514c01f399ca9ba12',
431- 'NickName': '齐现虎',
432- 'AttrStatus': 2147600869,
433- 'PYInitial': '',
434- 'PYQuanPin': '',
435- 'RemarkPYInitial': '',
436- 'RemarkPYQuanPin': '',
437- 'MemberStatus': 0,
438- 'DisplayName': '',
439- 'KeyWord': 'qix'
440- }>
441- }>,
442- 'Type': 'Text',
443- 'Text': '看来最近是没有线下活动了'
444- }
445335"""
0 commit comments