1. 程式人生 > >python使用wxpy輕鬆實現微信防撤回

python使用wxpy輕鬆實現微信防撤回

最近比較閒就隨便瞎看,看到了微信防撤回就順便跟著學著實現一下

使用的是wxpy,安裝方法pip install wxpy(我使用的是python2.7),這樣實現起來比較快,反正也只是練手

首現看了兩個別人實現的程式碼,然後看了看wxpy的文件:http://wxpy.readthedocs.io/zh/latest/utils.html(萌新,順便鍛鍊下看文件)

我實現的程式碼:

import wxpy
import re

# 例項化微信物件
bot = wxpy.Bot(cache_path=True)

# 啟用puid 並指定puid所需對映資料儲存的路徑
bot.enable_puid(path='wxpy_puid.pkl')

# 用於存放每個使用者最近傳送的訊息
msgs = dict()

# 資訊的型別
msg_types = {
    'Text': '文字',
    'Map': '位置',
    'Picture': '圖片',
    'Video': '視訊',
    'Attachment': '檔案',
    'Sharing': '分享',
    'Card': '名片',
    'Recording': '語音',
}


@bot.register()
def handle_receive_msg(msg):
    """
    監聽訊息
    :param msg: 接收到的訊息
    :return:
    """
    # 原資訊資料
    raw = msg.raw

    # 如果訊息的狀態碼是4  即撤回訊息
    if raw.get('Status') == 4:
        # 如果是群訊息
        if isinstance(msg.chat, wxpy.api.chats.group.Group):
            # 獲取群成員的puid
            puid = msg.member.puid
            # 獲取傳送者的暱稱
            name = msg.member.nick_name
        # 如果是好友訊息
        elif isinstance(msg.chat, wxpy.api.chats.friend.Friend):
            # 獲取好友的puid
            puid = msg.chat.puid
            # 獲取好友的暱稱
            name = msg.chat.nick_name
        else:
            puid = None
            name = None
        if puid:
            # 被撤回訊息的msgid的匹配規則
            msg_id_regex = re.compile('<msgid>(\d+)</msgid>')
            # 獲取被撤回訊息的msgid
            old_msg_id = msg_id_regex.findall(raw.get('Content'))[0]
            # 獲取該傳送者的最後5次的訊息記錄
            chat_msgs = msgs.get(puid)
            # 遍歷訊息記錄
            for chat_msg in chat_msgs[::-1]:
                # 跳過不是被撤回的資訊
                if str(chat_msg.id) != old_msg_id:
                    continue
                chat = chat_msg.chat
                # 如果被撤回的資訊是文字資訊
                if chat_msg.type == "Text":
                    # 如果訊息長度過長 則不予處理
                    if len(chat_msg.text) >= 150:
                        warning = "【您撤回的訊息過長,有炸群嫌疑,不予處理!!!】"
                        bot.file_helper.send('%s撤回了一條文字訊息--【%s】'.decode('utf-8') % (name, warning))
                        break
                    # 將此訊息轉發出來
                    chat_msg.forward(chat, prefix='%s撤回了一條文字訊息,訊息內容為:'.decode('utf-8') % name)
                # 如果被撤回的是位置資訊
                elif chat_msg.type == "Map":
                    # 位置資訊的匹配規則
                    map_regex = re.compile(r'label="(.+?)"')
                    # 獲取位置資訊中的位置
                    map = map_regex.findall(chat_msg.raw.get("OriContent"))[0]
                    # 將位置資訊發出來
                    msg.reply('%s撤回了一條位置訊息,位置資訊為:【%s】'.decode('utf-8') % (name, map))
                else:
                    # 獲取資訊的型別
                    msg_type = msg_types.get(chat_msg.type).decode('utf-8')
                    # 將資訊轉發出來
                    chat_msg.forward(chat, prefix='%s撤回了一條%s訊息, 訊息內容為:'.decode('utf-8') % (name, msg_type))
                break
    else:
        # 如果是群訊息
        if isinstance(msg.chat, wxpy.api.chats.group.Group):
            # 獲取群成員的puid
            puid = msg.member.puid
        # 如果是好友訊息
        elif isinstance(msg.chat, wxpy.api.chats.friend.Friend):
            # 獲取好友的puid
            puid = msg.chat.puid
        else:
            puid = None
        if puid:
            # 記錄訊息
            msgs.setdefault(puid, []).append(msg)
            # 擷取訊息  保留最大5條記錄
            msgs[puid] = msg[puid][-5:]

# 使機器人後臺執行,並進入互動模式
wxpy.embed()

也未做過多的測試和優化,測試了文字、圖片、語音、位置資訊,視訊、名片、分享、檔案訊息未做測試

ps:這裡語音訊息撤回後發出來的是語音檔案,位置資訊發出來的是地址的文字

===================================割=======================================

如果想要新增聊天機器人 可以加入:

# 指定一個好友
friend = bot.friends().search('您對朋友的備註')
# 指定一個群
group = bot.groups().search('群名')

# 例項化圖靈機器人    免費申請圖靈機器人: http://www.tuling123.com/
tu_ling = wxpy.Tuling(api_key="自行註冊")
# chats指定對哪些使用者起作用, 如果chats=None(預設值)對所有使用者起作用
@bot.register(chats=[friend, group])  
def reply_msg(msg):
    """
    自動回覆訊息
    :param msg: 接收到的資訊資料
    :return: 回覆文字
    """
    # do_reply會自動回覆訊息並返回訊息文字
    tu_ling.do_reply(msg)

相關推薦

python使用wxpy輕鬆實現撤回

最近比較閒就隨便瞎看,看到了微信防撤回就順便跟著學著實現一下 使用的是wxpy,安裝方法pip install wxpy(我使用的是python2.7),這樣實現起來比較快,反正也只是練手 首現看了兩個別人實現的程式碼,然後看了看wxpy的文件:http://wxpy.r

Python3.5+PyQt5多執行緒+itchat實現撤回桌面版程式碼(二)

weChatThread執行緒類 之前一直不會python多執行緒,寫這個程式的時候,發現不用多執行緒會陷入無限未響應狀態。於是學了半天python多執行緒,但是在主函式裡寫的時候,發現一個問題,Ui主執行緒和工作執行緒沒有分離,使用itchat等庫的時候會堵

Python3.5+PyQt5多執行緒+itchat實現撤回桌面版(一)

前幾日在某乎看到有大神用itchat實現了微信防撤回功能,,覺得很有趣,看到下面評論很多人求桌面版,於是乎,手癢便利用清明節幾天時間做了一個簡陋的桌面程式。廢話不多說,先上圖位敬。 執行環境 win10專業版64位系統1703創造者更新 開發環

Python3.5+PyQt5多執行緒+itchat實現撤回桌面版程式碼

weChatThread執行緒類 之前一直不會python多執行緒,寫這個程式的時候,發現不用多執行緒會陷入無限未響應狀態。於是學了半天python多執行緒,但是在主函式裡寫的時候,發現一個問題,Ui主執行緒和工作執行緒沒有分離,使用itchat等庫的時候會堵塞主執行緒,換句話說PyQt中

Python3.5+PyQt5多線程+itchat實現撤回桌面版代碼

logs rep not cio backup 界面 sel store for weChatThread線程類 之前一直不會python多線程,寫這個程序的時候,發現不用多線程會陷入無限未響應狀態。於是學了半天python多線程,但是在主函數裏寫的時候,發現一個問題,

Python 實現撤回功能

在微信上突然看到“XXX撤回一條訊息”的時候,心裡癢不癢?現在就教你如何實現訊息防撤回的功能。不限手機型號、手機無需root,只要微訊號可以登上網頁版就可以了(部分不常用和新申請的賬號會登不上網頁版)。 環境 Centos7 python2.

撤回

con rev hand sts location end pat msg alt 1 # -*-encoding:utf-8-*- 2 import os 3 import re 4 import shutil 5 import time

用Python教你撤回(文字、圖片、語音、視訊、名片等...)

大家在使用微信過程中,有時候訊息還沒看到,就被撤回了。畢竟好奇心大家都有,明知到訊息被撤回了,就更想去看一下是什麼內容心裡想著萬一是女神給我表白了呢.. 今天就用Python來做個微信防撤回的小功能。支援文字、圖片、語音、視訊、名片的防撤回。 思路:利用itchat庫將每次接收到的訊息進行快取。監

Mac多開與撤回分享

一、關閉Mac上微信 二、開啟應用程式-實用工具-Terminal(終端) 執行下面的命令 輸入curl -o- -L https://raw.githubusercontent.com/lm

手把手教會你Android手機QQ和撤回

如今QQ和微信都能撤回訊息,當對方撤回了訊息,想看又看不了,是不是很想知道對方撤回了什麼?接下來我就來教會大家阻止對方QQ撤回的訊息和檢視微信撤回的訊息。 1.首先,手機需要獲取root許可權(目前有很多app支援手機一鍵root);然後下載安裝Xpoesd框架並激活(Xp

基於wxpy的撤回

目前存在的問題是圖片或者檔案大小有限制,圖片可以先擇先壓縮,在傳送,但是壓縮之後感覺太小,就沒有加入這個功能。# -*- coding:utf-8 -*- from wxpy import * import re import os import ctypes bot =

ImageViewer:打造萬能圖片瀏覽器,輕鬆實現朋友圈、今日頭條、橫向列表、縱向列表等圖片瀏覽效果

ImageViewer 關於 圖片預覽器,支援圖片手勢縮放、拖拽等操作,自定義View的模式顯示,自定義圖片載入方式,更加靈活,易於擴充套件,同時也適用於RecyclerView、ListView的

Python輕鬆檢視撤回訊息,祕密無處可藏

一個基於python的微信開源庫:itchat,接著我做了一個程式,可以把微信好友撤回的資訊收集起來,然後會自動傳送到我的個人微信的檔案傳輸助手。 程式碼瞭解一下: 將接收到的訊息存放在字典中,當接收到新訊息時對字典中超時的訊息進行清理 | 不接受不具有撤回功能的資訊。 收到note通知類訊

女神把訊息撤回後好慌, Python幾十行程式碼輕鬆檢視撤回訊息!

曾幾何時Python對我說:"時日已不多,速度學Python"。於是乎上天讓我看到了一個基於python的微信開源庫:itchat,玩的不亦樂乎,接著我做了一個程式,可以把微信好友撤回的資訊收集起來,然後會自動傳送到我的個人微信的檔案傳輸助手。小夥伴需要Python學習資料的話私信我回復01,會自

python實現檢視訊息撤回

娛樂(windows系統) 1.安裝itchat itchat是一個開源的python微信庫,支援傳送訊息、圖片、視訊、地圖、名片、檔案等,還可以實現自動回覆等多種功能。 看到的一個文件還不錯 https://segmentfault.com/a/1190000

內如何實現域名封,封跳轉系統

com 最好 返回 nsf nbsp ans 可用 lose 微信 來源分析 我們常常遇到自己正規的網站鏈接,無端被微信攔截,大家都為這問題苦惱不已,網絡上流傳很多域名防封、二維碼防封、微信防紅的技術,但效果並不理想,因為太多是坑人的無良商家,不可能用代碼就能實現域名防封

Android實戰簡易教程-第二十六槍(基於ViewPager實現頁面切換效果)

stat addview data android tid des viewpage 聊天 == 1.頭部布局文件top.xml:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

cacti實現告警功能

cacti 微信告警 背景近來受朋友所托,為他實現cacti的微信告警功能,但是在印象之中,cacti的thold插件貌似只有郵件告警功能吧?於是花了點時間在網絡上搜索了相關信息,發現cacti的微信告警的信息著實很少,唯一看似可用的文章嘗試了下卻無法成功,在那篇文章的基礎上,我修改了一下微信腳本的代

SwipeListView 具體解釋 實現,QQ等滑動刪除效果

span 點擊 tor 支持 position pad edi find htm QQ或者微信出現過滑動,近期聯系人列表,能夠刪去當前選中的聯系人,這個功能玩起來非常爽 , 就是試著做了下。事實上是使用了開源框架SwipeListView 。