1. 程式人生 > >大早上起來錯過女神給我發的微信訊息,還好我用Python找回來了!

大早上起來錯過女神給我發的微信訊息,還好我用Python找回來了!

一大早醒來,發現女神昨晚發來三條訊息,但是顯示都已撤回,OMG,我錯過了什麼?群裡有一個漂亮妹紙的爆照照片撤回了,想看又看不到!群裡大佬分享的經典語錄被撤回了,感覺錯過一個億!怎麼辦?用無所不能的 Python 就可以將這些撤回的訊息發給你的微信,讓你從此走上人生巔峰

專案環境

語言:Python3
編輯器:Pycharm

導包

itchat:控制微信的第三方庫

這個庫相信大家不陌生了,之前寫的 Python 機器人陪你聊天   Python 定時給女神發早安 兩篇文章裡用的 wxpy 庫就是在 itchat 庫的基礎上封裝的。

效果展示

以下截圖顯示的撤回訊息型別依次是文字訊息、微信自帶表情、圖片、語音、定位地圖、名片、公眾號文章、音樂、視訊。有群裡撤回的,也有個人號撤回的。

程式思路

主要由兩部分組成:
handler_receive_msg():處理接收到的訊息,將訊息臨時放在字典中。
send_msg_helper():將撤回的訊息自動發給檔案傳輸助手。

程式分析

首先,我們定義一個字典來儲存訊息,定義訊息儲存的臨時路徑。

接收資訊處理

先將我們需要處理的訊息用 msg_register 裝飾器進行註冊,格式化本地時間,定義訊息 ID 和訊息時間。如果是群成員而且是自己微信好友撤回訊息,則顯示撤回訊息的名稱是你備註的名字,如果沒有備註名字,則顯示名稱為微信暱稱。

獲取你的所有群的訊息,判斷出撤回的訊息來自哪個群,顯示出群名稱。

 

個人訊息處理

如果為個人聊天資訊,也是優先顯示備註名稱,沒有備註名就顯示暱稱。

各型別訊息處理

用判斷語句對各種型別的訊息進行處理,包括文字訊息、微信自帶的表情和收藏的表情、圖片、語音、位置、名片、分享、附件、視訊。多條件時這裡用了 in 的用法,還記得之前講  Python 優雅的寫法  文章裡把用 or 連線條件改成用 in,程式碼更簡潔,這樣我們通過專案不斷的鞏固之前學到的知識點,這樣才能不斷進步。

更新資訊字典

處理撤回訊息

先判斷是否是撤回訊息,將撤回訊息傳送到你的檔案傳輸助手裡,把上面函式儲存的訊息的傳送人、傳送型別、傳送時間、撤回的內容發出來。以下是部分程式碼。

主函式

最後用主函式執行微信的登入和執行。第一次需要掃碼登入微信,登入時加上 hotReload 引數,為 True 時,短時間內再次執行會儲存上次微信的登入態,不需要再次掃碼登入。

if __name__ == '__main__':
    itchat.auto_login(hotReload=True)
    itchat.run()

如果你電腦中有安裝 Python 環境,在編輯器中直接執行原始碼或者在 cmd 中執行 py 檔案即可。原始碼獲取方式在文末給出。有需要的話以後可以做成介面化工具,掛在伺服器上,支援做成介面化工具的點個贊看看,我看看需求量,哈哈。

寫在最後

今天的分享就到這裡了,需要優化的地方:撤回的視訊只支援檢視微信自帶拍的視訊,非微信自帶拍的視訊開啟無法檢視。長時間執行時會報 ConnectionError 提示的錯誤,但是不影響傳送撤回訊息的功能,後期加個異常捕捉機制優化下。

趕緊動手試試吧,把你朋友撤回的訊息發給 TA 看看,看看他是什麼反應,有趣的撤回訊息發到朋友圈去提高逼格,奈斯!

在公眾號後臺回覆「防微信撤回原始碼」獲取本專案的原始碼