python使用wxpy实现微信消息防撤回脚本
本文实例为大家分享了python实现微信消息防撤回的具体代码,供大家参考,具体内容如下
使用了sqlite3保存数据,当有人撤回消息时取出数据发送到文件传输助手。
文件的话会先保存到本地,语音会以文件的方式发送。
wxpy和itchat很久没更新了,有些功能没法用了,web微信也不知道什么时候会凉。
帮助信息在注释里。
#-*-coding:utf-8-*- #使用sqlite3保存message,当有人撤回消息时在数据库中通过ID检索该消息是否存在,如果存在则将撤回的消息发送到文件助手里。 #目前只支持textpicturemapsharingrecordingvideoattachment类型的消息。 importwxpy importsqlite3 importos importre #准备工作 #创建attachment目录用于存储图像、地图/位置、分享、语音、视频、文件 ifnotos.path.isdir('attachment'): os.mkdir('attachment') attachment_path=os.path.join(os.getcwd(),'attachment') bot=wxpy.Bot() #用于获取msgID pattern=re.compile(r'\d{19}') #测试wxpy能否正常工作 myself=bot.friends()[0] myself.send('Hello?') #创建数据库和message表 try: conn=sqlite3.connect('wxpy.db') cursor=conn.cursor() #cursor.execute('DROPTABLEMESSAGES') cursor.execute("""CREATETABLEIFNOTEXISTSMESSAGES(idINTEGERPRIMARYKEYAUTOINCREMENT, msg_idINTEGERNOTNULL, msg_textTEXT, create_timeDATENOTNULL, revoke_timeDATE, attachment_pathTEXT, msg_senderTEXTNOTNULL, msg_typeTEXTNOTNULL, msg_urlTEXT, msg_raw_dataTEXTNOTNULL)""") #print('establishsuccessfully') finally: conn.commit() cursor.close() conn.close() #注册所有消息,在程序运行期间将插入所有支持的信息 @bot.register() defstore_data(msg): #print(msg.raw) #如果消息是支持的类型就将数据插入数据库 ifmsg.typein[wxpy.TEXT,wxpy.RECORDING,wxpy.PICTURE,wxpy.ATTACHMENT,wxpy.VIDEO,wxpy.SHARING,wxpy.MAP]: insert_data(msg) #撤回的消息类型是note elifmsg.type==wxpy.NOTE: send_revoke(msg) #插入数据 definsert_data(msg): try: conn=sqlite3.connect('wxpy.db') cursor=conn.cursor() ifmsg.type==wxpy.TEXT: cursor.execute("INSERTINTOMESSAGES(msg_id,msg_text,create_time,msg_sender,msg_type,msg_raw_data)\ values(?,?,?,?,?,?)",(msg.id,msg.text,msg.create_time,str(msg.sender)[9:-1], msg.type,str(msg.raw))) #将录音/图像/文件/视频下载到本地,插入保存路径。 elifmsg.typein[wxpy.RECORDING,wxpy.PICTURE,wxpy.ATTACHMENT,wxpy.VIDEO]: save_path=os.path.join(attachment_path,msg.file_name) msg.get_file(save_path) cursor.execute('INSERTINTOMESSAGES(msg_id,create_time,attachment_path,msg_sender,msg_type,\ msg_raw_data)values(?,?,?,?,?,?)', (msg.id,msg.create_time,save_path,str(msg.sender)[9:-1],msg.type,str(msg.raw))) #插入分享/位置链接 elifmsg.typein[wxpy.SHARING,wxpy.MAP]: cursor.execute('INSERTINTOMESSAGES(msg_id,msg_text,create_time,msg_sender,msg_type,msg_url,\ msg_raw_data)values(?,?,?,?,?,?,?)', (msg.id,msg.text,msg.create_time,str(msg.sender)[9:-1],msg.type,str(msg.url),str(msg.raw))) #print('insertdatasuccessfully') finally: conn.commit() cursor.close() conn.close() #在数据库中检索消息是否存在,如果存在则将被撤回的消息发送到文件传输助手。 defsend_revoke(message): msg_id=pattern.search(message.raw['Content']).group() try: conn=sqlite3.connect('wxpy.db') cursor=conn.cursor() cursor.execute('INSERTINTOMESSAGES(msg_id,create_time,msg_sender,msg_type,msg_raw_data)\ values(?,?,?,?,?)', (message.id,message.create_time,str(message.sender)[9:-1],message.type,str(message.raw))) msg_data=cursor.execute('SELECT*FROMMESSAGESWHEREmsg_id=?',(msg_id,)).fetchall() #print('takeoutdatasuccessfully') finally: conn.commit() cursor.close() conn.close() ifmsg_data[0][7]=='Text': msg_info='告诉你一个秘密{}在{}撤回了文本\n{}'.format(msg_data[0][6],msg_data[0][3],msg_data[0][2]) bot.file_helper.send(msg_info) else: send_revoke_nontext(msg_data) #非文本信息发送 defsend_revoke_nontext(msg_data): ifmsg_data[0][7]=='Picture': ifmsg_data[0][5][-4:]=='.gif': #现在wxpy&itchat发不了GIF了 bot.file_helper('很抱歉,暂时不支持表情(gif)的撤回重发。') else: msg_info='告诉你一个秘密{}在{}撤回了图像'.format(msg_data[0][6],msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_image(msg_data[0][5]) elifmsg_data[0][7]=='Recording': msg_info='告诉你一个秘密{}在{}撤回了语音'.format(msg_data[0][6],msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_file(msg_data[0][5]) elifmsg_data[0][7]=='Attachment': msg_info='告诉你一个秘密{}在{}撤回了文件'.format(msg_data[0][6],msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_file(msg_data[0][5]) elifmsg_data[0][7]=='Video': msg_info='告诉你一个秘密{}在{}撤回了视频'.format(msg_data[0][6],msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_video(msg_data[0][5]) elifmsg_data[0][7]=='Sharing': msg_info='告诉你一个秘密{}在{}撤回了分享\n{}\n{}'.format(msg_data[0][6],msg_data[0][3],msg_data[0][2],\ msg_data[0][8]) bot.file_helper.send(msg_info) elifmsg_data[0][7]=='Map': msg_info='告诉你一个秘密{}在{}撤回了位置\n{}\n{}'.format(msg_data[0][6],msg_data[0][3],msg_data[0][2],\ msg_data[0][8]) bot.file_helper.send(msg_info) wxpy.embed()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。