歡迎光臨
每天分享高質量文章

Python實現微信防撤回

來自:裸睡的豬(微訊號:IT–Pig)

一、背景介紹

產品的更新迭代必然會伴隨著功能的推出和下線,今天我們要講的便是微信在2014年推出的一個小小的新功能:撤回訊息,使用此功能者提神醒腦、神清氣爽,但被施用者卻可能會抓耳撓腮、咬牙切齒的想知道你到底撤回了啥,這就是所謂的好奇害死貓(Curiosity kills the cat),今天我們就來用Python實現防微信訊息撤回,滿足一下大家的好奇心!

二、功能設計

我們希望當有好友或者群中有人撤回訊息的時候,第一時間能把原訊息、傳送者資訊轉發到檔案助手中(當然你也可以把訊息發回給他,哈哈),這樣方便我們檢視。

給大家來演示一下實現的功能。

三、功能實現

1.微信撤回訊息實現原理

我們先來瞭解一下微信撤回訊息的原理:

其實微信撤回訊息原理就是操作者在點選撤回的時候,客戶端會自動發一條系統訊息:“xxx撤回了一條訊息”,然後對方app端收到訊息後解析,替換原訊息,改個顯示的樣式即可

豬哥給大家演示一下正常訊息撤回訊息的內容到底有什麼區別:
正常訊息:Content='你好騷啊',大家留意一下MsgId='8784390488772995470'

撤回訊息:Content是一串xml格式的內容

我們在下麵把它格式化看看

<sysmsg type="revokemsg">
  <revokemsg>
    <session>xxxsession>

<oldmsgid>1090336364oldmsgid>
<msgid>8784390488772995470msgid>
<replacemsg>replacemsg>
revokemsg>sysmsg>

分析上面撤回的Content欄位我們發現8784390488772995470的id與我們之前傳送訊息的id是一致的,而這個標簽也驗證了我們的猜想,確實是用新訊息替換原訊息。

2.找到被撤回訊息

根據抓取正常訊息撤回訊息的內容我們發現規則:撤回訊息中會包含之前被撤回的那條訊息的msgid,那我們只要找到之前那條訊息就可以了,而wxpy模組預設為我們快取了最近的200條訊息,所以我們只要遍歷這些歷史訊息然後比較msgid就可以找到被撤回的那條訊息啦!
 如果你微信訊息太過頻繁,2分鐘之內訊息數量超過200,則可以將max_history設定大些。

3.轉發被撤回訊息

原理也搞懂了,被撤回的訊息也找到了,就差最後一步轉發訊息了,如果你之前玩過wxpy肯定會了吧,只要一行程式碼就可以將訊息轉發:

msg.forward(bot.file_helper)

4.程式碼

原理和過程講完了,程式碼貼出來給大家看看,註釋還是比較詳細。

四、功能驗證

五、總結

微信訊息防撤回功能實現簡單,但實用性很好,目前專案的唯一缺點就是易用性差,簡單說就是我們還沒有將專案部署伺服器,每次使用都得開啟電腦然後執行還得一直開著,豬哥考慮後面將專案部署在雲伺服器上或者打包成apk,這樣就使用起來就非常方便了,而且還可以把apk發給朋友,讓朋友也體驗此功能!

學會這招,再也不用好奇對方到底撤回了啥訊息,快下載專案試試吧!下載專案後可直接執行不需要修改程式碼

Github專案地址:https://github.com/pig6/wxrobot
wxpy官方檔案:https://wxpy.readthedocs.io/zh/latest

贊(0)

分享創造快樂