python微信撤回监测代码
本文实例为大家分享了python微信撤回的监测代码,供大家参考,具体内容如下
注意:这里用了一个wechat库,当然,wechat库是基于微信提供的官方接口实现的。
这里的核心就是通过网页登陆微信的方式,然后获取各个通讯信息,然后存进内存,最后检测各种微信的操作,最后写入微信里面的文件传输助手即可。
直接看代码,然后运行,慢慢调试几次,就明白咋回事了。
#coding=utf8 importitchat importrequests importtime importos importre importthreading #全局变量,对于每个用户的机器人开关 User_bot_control_flag={} #全局变量,我的昵称 myNickName='' defbot_chat_init(): #获取好友列表 friends=itchat.get_friends(update=True)[0:] #将标志位置为0 foriinfriends[1:]: User_bot_control_flag[i["UserName"]]=0 @itchat.msg_register(itchat.content.TEXT) deftuling_reply(msg): #获取到发送消息者身份,如果身份匹配,就做对应的事 #itchat.send_msg('已经收到了文本消息,消息内容为%s'%msg['Text'],toUserName=msg['FromUserName']) #如果图灵Key出现问题,那么reply将会是None ifmsg['Text']=='servicecrondstart': returnu'你一看就是个程序员' ifmsg['Text']=='dididididi': returnu'开车了' reply=get_response(msg['Text']) ifnotmsg['FromUserName']==myUserName: pass #发送一条提示给文件助手 #itchat.send_msg(u"[%s]收到好友@%s的信息:%s\n"% #(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])), #msg['User']['NickName'], #msg['Text']),'filehelper') #aorb的意思是,如果a有内容,那么返回a,否则返回b #有内容一般就是指非空或者非None,你可以用`ifa:print('True')`来测试 returnreplyoru'[自动回复]您好,我现在有事不在,一会再和您联系。\n已经收到您的的信息:%s\n'%(msg['Text']) deffriend(): #初始化计数器,有男有女,当然,有些人是不填的 #获取好友列表 friends=itchat.get_friends(update=True)[0:] male=female=other=0 #遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算 #1表示男性,2女性 foriinfriends[1:]: print(i)#打印出签名 sex=i["Sex"] ifsex==1: male+=1 elifsex==2: female+=1 else: other+=1 #总数算上,好计算比例啊~ total=len(friends[1:]) #好了,打印结果 print(u"共有好友:%d"%total) print(u"男性好友:%.2f%%"%(float(male)/total*100)) print(u"女性好友:%.2f%%"%(float(female)/total*100)) print(u"其他:%.2f%%"%(float(other)/total*100)) defget_response(msg): #这里我们就像在“3.实现最简单的与图灵机器人的交互”中做的一样 #构造了要发送给服务器的数据 apiUrl='http://www.tuling123.com/openapi/api' data={ 'key':key, 'info':msg, 'userid':'wechat-robot', } try: r=requests.post(apiUrl,data=data).json() #字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常 returnr.get('text')+'----来自机器人小Z的智能回复----' #为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常 #如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return except: #将会返回一个None return @itchat.msg_register(itchat.content.TEXT,isGroupChat=True)#msg['ActualNickName']群里发消息的人名#msg['User']['NickName']群名称 deftext_reply(msg): #print(msg['User'])#一个宏大的结构体 #print("群聊名字"+msg['User']['NickName'])#群聊名称 #print(msg['FromUserName']) #监控所有群的消息,后来做统计用,后面可以做关键词分析什么的 file_object=open(myNickName+"群"+msg['User']['NickName'],'a') write_data=''.join(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])))+""+msg['ActualNickName']+":"+msg['Text']+"\n" file_object.write(write_data) file_object.close() #指定群聊可以智能群聊 ifmsg['User']['NickName']=='184': print("184ok") itchat.send(get_response(msg['Text']),msg['FromUserName']) #监控群聊内容发送到文件助手,已经被自己屏蔽掉了 #itchat.send_msg(u"[%s]收到%s群%s的信息:%s\n"% #(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])) #,msg['User']['NickName'],msg['ActualNickName'], #msg['Text']),'filehelper') #判断是否有人@自己 if(msg.isAt): #如果有人@自己,就发一个消息告诉对方我已经收到了信息 itchat.send_msg("我已经收到了来自{0}的消息,实际内容为{1}".format(msg['ActualNickName'],msg['Text']), toUserName=msg['FromUserName']) #defsendmsgToPsh(): #while(True): #pass ##print("123456") # #threads=[] #t1=threading.Thread(target=sendmsgToPsh()) #说明:可以撤回的有文本文字、语音、视频、图片、位置、名片、分享、附件 #{msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)} msg_dict={} #文件存储临时目录 rev_tmp_dir="/home/seen/PycharmProjects/Code" ifnotos.path.exists(rev_tmp_dir):os.mkdir(rev_tmp_dir) #表情有一个问题|接受信息和接受note的msg_id不一致巧合解决方案 face_bug=None ##将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理|不接受不具有撤回功能的信息 ##[TEXT,PICTURE,MAP,CARD,SHARING,RECORDING,ATTACHMENT,VIDEO,FRIENDS,NOTE] #@itchat.msg_register([itchat.content.TEXT,itchat.content.PICTURE,itchat.content.MAP,itchat.content.CARD,itchat.content.SHARING, #itchat.content.RECORDING,itchat.content.ATTACHMENT,itchat.content.VIDEO],isGroupChat=True) #defhandler_receive_msg(msg): ##回复特定用户消息 ##ifmsg['User']['NickName']=='YYYYY'ormsg['User']['NickName']=='彭芊芊': ##print("yhjok") ##itchat.send_msg(get_response(msg['Text']),toUserName=msg['FromUserName']) ##先获取对方说来的话 ##下面一行是获取发送消息者昵称 #send_user_name=itchat.search_friends(userName=msg['FromUserName'])['NickName'] #file_object=open(myNickName+"&"+msg['User']['NickName'],'a') #write_data=''.join(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])))+""+\ #send_user_name+":"+msg['Text']+"\n" #file_object.write(write_data) #file_object.close() # ##控制指令检测模块 #ifmsg['Text']=='servicerobotstart': #User_bot_control_flag[msg['FromUserName']]=1#检测到开启指令后开启机器人 #itchat.send_msg("RobotsmallZstarted...waitingforyourservice",toUserName=msg['FromUserName']) #ifmsg['Text']=='servicerobotstop': #User_bot_control_flag[msg['FromUserName']]=0#检测到开启指令后关闭机器人 #itchat.send_msg("RobotsmallZstoped...get'servicerobotstart'restarted",toUserName=msg['FromUserName']) ##在开关开启的情况下回复对方对话 #ifnotmsg['FromUserName']==myUserName: #ifUser_bot_control_flag[msg['FromUserName']]: ##存储单人对话模块 ##下面一行是获取发送消息者昵称 #reply=get_response(msg['Text']) #file_object=open(myNickName+"&"+msg['User']['NickName'],'a') #write_data=''.join(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])))+""+\ #myNickName+":"+reply+"\n" #file_object.write(write_data) #file_object.close() #itchat.send_msg(reply,toUserName=msg['FromUserName']) # #globalface_bug ##获取的是本地时间戳并格式化本地时间戳e:2017-04-2121:30:08 #msg_time_rec=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime()) ##消息ID #msg_id=msg['MsgId'] ##消息时间 #msg_time=msg['CreateTime'] ##消息发送人昵称|这里也可以使用RemarkName备注但是自己或者没有备注的人为None #msg_from=(itchat.search_friends(userName=msg['FromUserName']))["NickName"] ##消息内容 #msg_content=None ##分享的链接 #msg_share_url=None #ifmsg['Type']=='Text'\ #ormsg['Type']=='Friends': #msg_content=msg['Text'] #elifmsg['Type']=='Recording'\ #ormsg['Type']=='Attachment'\ #ormsg['Type']=='Video'\ #ormsg['Type']=='Picture': #msg_content=r""+msg['FileName'] ##保存文件 #msg['Text'](rev_tmp_dir+msg['FileName']) #elifmsg['Type']=='Card': #msg_content=msg['RecommendInfo']['NickName']+r"的名片" #elifmsg['Type']=='Map': #x,y,location=re.search( #""+x.__str__()+"经度->"+y.__str__() #else: #msg_content=r""+location #elifmsg['Type']=='Sharing': #msg_content=msg['Text'] #msg_share_url=msg['Url'] #face_bug=msg_content ##更新字典 #msg_dict.update( #{ #msg_id:{ #"msg_from":msg_from,"msg_time":msg_time,"msg_time_rec":msg_time_rec, #"msg_type":msg["Type"], #"msg_content":msg_content,"msg_share_url":msg_share_url #} #} #) #将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理|不接受不具有撤回功能的信息 #[TEXT,PICTURE,MAP,CARD,SHARING,RECORDING,ATTACHMENT,VIDEO,FRIENDS,NOTE] @itchat.msg_register([itchat.content.TEXT,itchat.content.PICTURE,itchat.content.MAP,itchat.content.CARD,itchat.content.SHARING, itchat.content.RECORDING,itchat.content.ATTACHMENT,itchat.content.VIDEO]) defhandler_receive_msg(msg): #回复特定用户消息 #ifmsg['User']['NickName']=='YYYYY'ormsg['User']['NickName']=='彭芊芊': #print("yhjok") #itchat.send_msg(get_response(msg['Text']),toUserName=msg['FromUserName']) #先获取对方说来的话 #下面一行是获取发送消息者昵称 send_user_name=itchat.search_friends(userName=msg['FromUserName'])['NickName'] file_object=open(myNickName+"&"+msg['User']['NickName'],'a') write_data=''.join(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])))+""+\ send_user_name+":"+msg['Text']+"\n" file_object.write(write_data) file_object.close() #控制指令检测模块 ifmsg['Text']=='servicerobotstart': User_bot_control_flag[msg['FromUserName']]=1#检测到开启指令后开启机器人 itchat.send_msg("RobotsmallZstarted...waitingforyourservice",toUserName=msg['FromUserName']) ifmsg['Text']=='servicerobotstop': User_bot_control_flag[msg['FromUserName']]=0#检测到开启指令后关闭机器人 itchat.send_msg("RobotsmallZstoped...get'servicerobotstart'restarted",toUserName=msg['FromUserName']) #在开关开启的情况下回复对方对话 ifnotmsg['FromUserName']==myUserName: ifUser_bot_control_flag[msg['FromUserName']]: #存储单人对话模块 #下面一行是获取发送消息者昵称 reply=get_response(msg['Text']) file_object=open(myNickName+"&"+msg['User']['NickName'],'a') write_data=''.join(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime(msg['CreateTime'])))+""+\ myNickName+":"+reply+"\n" file_object.write(write_data) file_object.close() itchat.send_msg(reply,toUserName=msg['FromUserName']) globalface_bug #获取的是本地时间戳并格式化本地时间戳e:2017-04-2121:30:08 msg_time_rec=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime()) #消息ID msg_id=msg['MsgId'] #消息时间 msg_time=msg['CreateTime'] #消息发送人昵称|这里也可以使用RemarkName备注但是自己或者没有备注的人为None msg_from=(itchat.search_friends(userName=msg['FromUserName']))["NickName"] #消息内容 msg_content=None #分享的链接 msg_share_url=None ifmsg['Type']=='Text'\ ormsg['Type']=='Friends': msg_content=msg['Text'] elifmsg['Type']=='Recording'\ ormsg['Type']=='Attachment'\ ormsg['Type']=='Video'\ ormsg['Type']=='Picture': msg_content=r""+msg['FileName'] #保存文件 msg['Text'](rev_tmp_dir+msg['FileName']) elifmsg['Type']=='Card': msg_content=msg['RecommendInfo']['NickName']+r"的名片" elifmsg['Type']=='Map': x,y,location=re.search( " "+x.__str__()+"经度->"+y.__str__() else: msg_content=r""+location elifmsg['Type']=='Sharing': msg_content=msg['Text'] msg_share_url=msg['Url'] face_bug=msg_content #更新字典 msg_dict.update( { msg_id:{ "msg_from":msg_from,"msg_time":msg_time,"msg_time_rec":msg_time_rec, "msg_type":msg["Type"], "msg_content":msg_content,"msg_share_url":msg_share_url } } ) ##收到note通知类消息,判断是不是撤回并进行相应操作,针对于群 #@itchat.msg_register([itchat.content.NOTE],isGroupChat=True) #defsend_msg_helper(msg): #globalface_bug #ifre.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>",msg['Content'])isnotNone: ##获取消息的id #old_msg_id=re.search("\ (.*?)\<\/msgid\>",msg['Content']).group(1) #old_msg=msg_dict.get(old_msg_id,{}) #iflen(old_msg_id)<11: #itchat.send_file(rev_tmp_dir+face_bug,toUserName='filehelper') #os.remove(rev_tmp_dir+face_bug) #else: #msg_body="告诉你一个秘密~"+"\n"\ #+old_msg.get('msg_from')+"撤回了"+old_msg.get("msg_type")+"消息"+"\n"\ #+old_msg.get('msg_time_rec')+"\n"\ #+"撤回了什么⇣"+"\n"\ #+r""+old_msg.get('msg_content') ##如果是分享存在链接 #ifold_msg['msg_type']=="Sharing":msg_body+="\n就是这个链接➣"+old_msg.get('msg_share_url') # ##将撤回消息发送到文件助手 #itchat.send(msg_body,toUserName='filehelper') ##有文件的话也要将文件发送回去 #ifold_msg["msg_type"]=="Picture"\ #orold_msg["msg_type"]=="Recording"\ #orold_msg["msg_type"]=="Video"\ #orold_msg["msg_type"]=="Attachment": #file='@fil@%s'%(rev_tmp_dir+old_msg['msg_content']) #itchat.send(msg=file,toUserName='filehelper') #os.remove(rev_tmp_dir+old_msg['msg_content']) ##删除字典旧消息 #msg_dict.pop(old_msg_id) #收到note通知类消息,判断是不是撤回并进行相应操作 @itchat.msg_register([itchat.content.NOTE]) defsend_msg_helper(msg): globalface_bug ifre.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>",msg['Content'])isnotNone: #获取消息的id old_msg_id=re.search("\ (.*?)\<\/msgid\>",msg['Content']).group(1) old_msg=msg_dict.get(old_msg_id,{}) iflen(old_msg_id)<11: itchat.send_file(rev_tmp_dir+face_bug,toUserName='filehelper') os.remove(rev_tmp_dir+face_bug) else: msg_body="告诉你一个秘密~"+"\n"\ +old_msg.get('msg_from')+"撤回了"+old_msg.get("msg_type")+"消息"+"\n"\ +old_msg.get('msg_time_rec')+"\n"\ +"撤回了什么⇣"+"\n"\ +r""+old_msg.get('msg_content') #如果是分享存在链接 ifold_msg['msg_type']=="Sharing":msg_body+="\n就是这个链接➣"+old_msg.get('msg_share_url') #将撤回消息发送到文件助手 itchat.send(msg_body,toUserName='filehelper') #有文件的话也要将文件发送回去 ifold_msg["msg_type"]=="Picture"\ orold_msg["msg_type"]=="Recording"\ orold_msg["msg_type"]=="Video"\ orold_msg["msg_type"]=="Attachment": file='@fil@%s'%(rev_tmp_dir+old_msg['msg_content']) itchat.send(msg=file,toUserName='filehelper') os.remove(rev_tmp_dir+old_msg['msg_content']) #删除字典旧消息 msg_dict.pop(old_msg_id) key='02dd1dd1b5594e179aa4aca9a6a690a6' if__name__=='__main__': itchat.auto_login(hotReload=True) #获取自己的UserName myNickName=itchat.get_friends(update=True)[0]["NickName"] myUserName=itchat.get_friends(update=True)[0]["UserName"] #做函数功能的实验 #print(itchat.search_friends(name='彭芊芊')[0]['UserName'])#我居然会用了这种办法我是真的猛 #print(type(itchat.search_friends(name='彭芊芊'))) #itchat.send("initmessagestodindsong,Amessagefrombangbangtang,distantareas...",toUserName='@509f2668d9380a6aeb1951585256827dc1d475c2de885b62fae401401d522f9b') friend()#获取朋友信息 bot_chat_init()#初始化开关模块 itchat.run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。