原文链接: https://blog.csdn.net/vcx08/article/details/80233092
pip install itchat
pip install apscheduler
python3 reword.py
'msg_create_time':msg_time,
'msg_type':msg_type,
'msg_content':msg_content
}
})
print("msg_from:%s, msg_time:%s, msg_content:%s"%(msg_from,msg_time,msg_content))
@itchat.msg_register([TEXT, PICTURE, MAP, CARD, SHARING, RECORDING, ATTACHMENT, VIDEO],isGroupChat=True)
def handler_receive_msg(msg):
msg_id = msg['MsgId']
# 获取的是本地时间戳并格式化本地时间戳 e: 2019-02-16 13:43:20
msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 消息ID
msg_id = msg['MsgId']
# 消息时间
msg_time = msg['CreateTime']
#消息类型
msg_type = msg['Type']
# 消息发送人昵称 | 这里也可以使用RemarkName备注 但是自己或者没有备注的人为None
msg_from = (msg['User']['NickName']+"-->"+msg['ActualNickName'])
# 消息内
msg_content = None
# 分享的链接
msg_share_url = None
if msg['Type'] == 'Text'\
or msg['Type'] == 'Friends':
msg_content = msg['Text']
elif msg['Type'] == 'Recording' \
or msg['Type'] == 'Attachment' \
or msg['Type'] == 'Video' \
or msg['Type'] == 'Picture':
msg_content = r"" + msg['FileName']
# 保存文件
msg['Text'](rev_tmp_dir + msg['FileName'])
rev_msg_dict.update({
msg_id:{
'msg_from_user':msg_from,
'msg_time_rec':msg_time_rec,
'msg_create_time':msg_time,
'msg_type':msg_type,
'msg_content':msg_content
}
})
print("msg_from:%s, msg_time:%s, msg_content:%s"%(msg_from,msg_time,msg_content))
@itchat.msg_register([NOTE], isFriendChat=True, isGroupChat=True)
def revoke_msg(msg):
if re.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>", msg['Content']) is not None:
# 获取消息的id
print('somebody release word')
old_msg_id = re.search("\
(.*?)\<\/msgid\>", msg['Content']).group(1)
old_msg = rev_msg_dict.get(old_msg_id, {})
# 先发送一条文字信息
itchat.send_msg(str(old_msg.get('msg_from_user') + "撤回了一条信息:"
+ old_msg.get('msg_content')), toUserName="filehelper")
# 判断文msg_content是否存在,不存在说明可能是
if os.path.exists(os.path.join(rev_tmp_dir, old_msg.get('msg_content'))):
if old_msg.get('msg_type') == 'Picture':
itchat.send_image(os.path.join(rev_tmp_dir, old_msg.get('msg_content')),
toUserName="filehelper")
elif old_msg.get('msg_type') == 'Video':
itchat.send_video(os.path.join(rev_tmp_dir, old_msg.get('msg_content')),
toUserName="filehelper")
elif old_msg.get('msg_type') == 'Attachment' \
or old_msg.get('msg_type') == 'Recording':
itchat.send_file(os.path.join(rev_tmp_dir, old_msg.get('msg_content')),
toUserName="filehelper")
def clear_cache():
# 当前时间
cur_time = time.time()
# 遍历字典,如果有创建时间超过2分钟(120s)的记录,删除,非文本的话,连文件也删除
for key in list(rev_msg_dict.keys()):
if int(cur_time) - int(rev_msg_dict.get(key).get('msg_create_time')) > 120:
rev_msg_dict.pop(key)
# 开始轮询任务
def start_schedule():
sched.add_job(clear_cache, 'interval', minutes=2)
sched.start()
if __name__ == '__main__':
sched = BlockingScheduler()
#itchat.auto_login(hotReload=True,enableCmdQR=2
itchat.auto_login(hotReload=True,enableCmdQR=2)
itchat.run()
start_schedule()
注意用python3
如果需要解析更多的内容,可以直接打印msg,自己去解析