python使用wxpy實(shí)現(xiàn)微信消息防撤回腳本
本文實(shí)例為大家分享了python實(shí)現(xiàn)微信消息防撤回的具體代碼,供大家參考,具體內(nèi)容如下
使用了sqlite3保存數(shù)據(jù),當(dāng)有人撤回消息時(shí)取出數(shù)據(jù)發(fā)送到文件傳輸助手。
文件的話會(huì)先保存到本地,語(yǔ)音會(huì)以文件的方式發(fā)送。
wxpy 和 itchat很久沒更新了,有些功能沒法用了,web微信也不知道什么時(shí)候會(huì)涼。
幫助信息在注釋里。
# -*- coding: utf-8 -*- # 使用sqlite3保存message,當(dāng)有人撤回消息時(shí)在數(shù)據(jù)庫(kù)中通過(guò)ID檢索該消息是否存在,如果存在則將撤回的消息發(fā)送到文件助手里。 # 目前只支持 text picture map sharing recording video attachment 類型的消息。 import wxpy import sqlite3 import os import re # 準(zhǔn)備工作 # 創(chuàng)建attachment目錄用于存儲(chǔ) 圖像、地圖/位置、分享、語(yǔ)音、視頻、文件 if not os.path.isdir('attachment'): os.mkdir('attachment') attachment_path = os.path.join(os.getcwd(), 'attachment') bot = wxpy.Bot() # 用于獲取msg ID pattern = re.compile(r'\d{19}') # 測(cè)試wxpy能否正常工作 myself = bot.friends()[0] myself.send('Hello?') # 創(chuàng)建數(shù)據(jù)庫(kù)和message表 try: conn = sqlite3.connect('wxpy.db') cursor = conn.cursor() # cursor.execute('DROP TABLE MESSAGES') cursor.execute("""CREATE TABLE IF NOT EXISTS MESSAGES (id INTEGER PRIMARY KEY AUTOINCREMENT, msg_id INTEGER NOT NULL, msg_text TEXT, create_time DATE NOT NULL, revoke_time DATE, attachment_path TEXT, msg_sender TEXT NOT NULL, msg_type TEXT NOT NULL, msg_url TEXT, msg_raw_data TEXT NOT NULL)""") # print('establish successfully') finally: conn.commit() cursor.close() conn.close() # 注冊(cè)所有消息,在程序運(yùn)行期間將插入所有支持的信息 @bot.register() def store_data(msg): # print(msg.raw) # 如果消息是支持的類型就將數(shù)據(jù)插入數(shù)據(jù)庫(kù) if msg.type in [wxpy.TEXT, wxpy.RECORDING, wxpy.PICTURE, wxpy.ATTACHMENT, wxpy.VIDEO, wxpy.SHARING, wxpy.MAP]: insert_data(msg) # 撤回的消息類型是note elif msg.type == wxpy.NOTE: send_revoke(msg) # 插入數(shù)據(jù) def insert_data(msg): try: conn = sqlite3.connect('wxpy.db') cursor = conn.cursor() if msg.type == wxpy.TEXT: cursor.execute("INSERT INTO MESSAGES (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))) # 將錄音/圖像/文件/視頻下載到本地,插入保存路徑。 elif msg.type in [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('INSERT INTO MESSAGES (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))) # 插入分享/位置鏈接 elif msg.type in [wxpy.SHARING, wxpy.MAP]: cursor.execute('INSERT INTO MESSAGES (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('insert data successfully') finally: conn.commit() cursor.close() conn.close() # 在數(shù)據(jù)庫(kù)中檢索消息是否存在,如果存在則將被撤回的消息發(fā)送到文件傳輸助手。 def send_revoke(message): msg_id = pattern.search(message.raw['Content']).group() try: conn = sqlite3.connect('wxpy.db') cursor = conn.cursor() cursor.execute('INSERT INTO MESSAGES (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 * FROM MESSAGES WHERE msg_id=?', (msg_id, )).fetchall() # print('take out data successfully') finally: conn.commit() cursor.close() conn.close() if msg_data[0][7] == 'Text': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了文本\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) # 非文本信息發(fā)送 def send_revoke_nontext(msg_data): if msg_data[0][7] == 'Picture': if msg_data[0][5][-4:] == '.gif': # 現(xiàn)在wxpy & itchat發(fā)不了GIF了 bot.file_helper('很抱歉,暫時(shí)不支持表情(gif)的撤回重發(fā)。') else: msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了圖像'.format(msg_data[0][6], msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_image(msg_data[0][5]) elif msg_data[0][7] == 'Recording': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了語(yǔ)音'.format(msg_data[0][6], msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_file(msg_data[0][5]) elif msg_data[0][7] == 'Attachment': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了文件'.format(msg_data[0][6], msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_file(msg_data[0][5]) elif msg_data[0][7] == 'Video': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了視頻'.format(msg_data[0][6], msg_data[0][3]) bot.file_helper.send(msg_info) bot.file_helper.send_video(msg_data[0][5]) elif msg_data[0][7] == 'Sharing': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了分享\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) elif msg_data[0][7] == 'Map': msg_info = '告訴你一個(gè)秘密 {} 在 {} 撤回了位置\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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python繪圖并標(biāo)記出指定點(diǎn)(最大值點(diǎn))方法實(shí)例
我們?cè)谟胮ython畫散點(diǎn)圖的時(shí)候經(jīng)常會(huì)需要標(biāo)記出特定的點(diǎn),這篇文章主要給大家介紹了關(guān)于Python繪圖并標(biāo)記出指定點(diǎn)(最大值點(diǎn))的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程
Python的一大優(yōu)勢(shì)就是可以輕松制作Web爬蟲,而超高人氣的Scrapy則是名副其實(shí)的Python編寫爬蟲的利器,這里我們就來(lái)看一下Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程:2016-07-07Python中多繼承與菱形繼承問(wèn)題的解決方案與實(shí)踐
在Python這個(gè)靈活且功能強(qiáng)大的編程語(yǔ)言中,多繼承是一個(gè)既強(qiáng)大又復(fù)雜的概念,它允許一個(gè)類繼承自多個(gè)父類,從而能夠復(fù)用多個(gè)父類的屬性和方法,本文將深入解釋Python中的多繼承概念,詳細(xì)剖析菱形繼承問(wèn)題,并探討Python是如何解決這一難題的,需要的朋友可以參考下2024-07-07Pytorch+PyG實(shí)現(xiàn)GraphSAGE過(guò)程示例詳解
這篇文章主要為大家介紹了Pytorch+PyG實(shí)現(xiàn)GraphSAGE過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Python實(shí)現(xiàn)讀取文本文件并轉(zhuǎn)換為pdf
這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)便快捷地完成TXT文件到PDF文檔的轉(zhuǎn)換,滿足多樣化的文檔處理需求,感興趣的小伙伴可以參考下2024-04-04python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)
這篇文章主要介紹了python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python?SDK實(shí)現(xiàn)私服上傳下載的示例
本文主要介紹了Python?SDK實(shí)現(xiàn)私服上傳下載的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2021-11-11Python?Tkinter庫(kù)從入門到進(jìn)階使用教程
Tkinter是Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置的圖形用戶界面(GUI)工具包,提供了創(chuàng)建窗口、按鈕、文本框等GUI元素的功能,本文將介紹Tkinter的基礎(chǔ)知識(shí),幫助大家快速入門2023-12-12