豬哥給大家演示一下正常消息
和撤回消息
的內容到底有什么區別:
正常消息:Content='你好騷啊'
,大家留意一下MsgId='8784390488772995470'
撤回消息:Content是一串xml格式的內容
我們在下面把它格式化看看
<sysmsg type="revokemsg"> <revokemsg> <session>xxx</session> <oldmsgid>1090336364</oldmsgid> <msgid>8784390488772995470</msgid> <replacemsg><![CDATA["豬哥" 撤回了一條消息]]></replacemsg> </revokemsg> </sysmsg>
分析上面撤回的Content
字段我們發現<msgid>8784390488772995470</msgid>
的id與我們之前發送消息的id是一致的,而<replacemsg>
這個標簽也驗證了我的猜想,確實是用新消息替換原消息。
根據抓取正常消息
和撤回消息
的內容我們發現規則:撤回消息中會包含之前被撤回的那條消息的msgid
,那我們只要找到之前那條消息就可以了,而wxpy
模塊默認為我們緩存了最近的200條消息,所以我們只要遍歷這些歷史消息然后比較msgid
就可以找到被撤回的那條消息啦!
如果你微信消息太過頻繁,2分鐘之內消息數量超過200,則可以將max_history
設置大些。
原理也搞懂了,被撤回的消息也找到了,就差最后一步轉發消息了,如果你之前玩過wxpy
肯定會了吧,只要一行代碼就可以將消息轉發:
msg.forward(bot.file_helper)
原理和過程講完了,代碼貼出來給大家看看,注釋還是比較詳細,有不懂得話可以在學習群中問我。
微信消息防撤回功能實現簡單,但實用性很好,目前項目的唯一缺點就是易用性差,簡單說就是我們還沒有將項目部署服務器,每次使用都得打開電腦然后運行還得一直開著,豬哥考慮后面將項目部署在云服務器上或者打包成apk,這樣就使用起來就非常方便了,而且還可以把apk發給朋友,讓朋友也體驗此功能!
學會這招,再也不用好奇對方到底撤回了啥消息,快下載項目試試吧!下載項目后可直接運行不需要修改代碼!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com