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

2022-10-04 18:00:15 字數 3529 閱讀 3447

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

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

首現看了兩個別人實現的**,然後看了看wxpy的文件:萌新,順便鍛鍊下看文件)

我實現的**:

import wxpy

import re

# 例項化微信物件

bot = wxpy.bot(cache_path=true)

# 啟用puid 並指定puid所需對映資料儲存的路徑

bot.enable_puid(path='wxpy_puid.pkl')

# 用於存放每個使用者最近傳送的訊息

msgs = dict()

# 資訊的型別

msg_types =

@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('(\d+)')

# 獲取被撤回訊息的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) != azv**nsiwold_msg_id:

continue

chat = chat_msg.chat

# 如果被撤回的資訊是文字資訊

if chat_msg.type == "text":

# 如果訊息長度過長 則不予處理

if len(chat_msg.text) >= 150:

warning = "【您撤回的訊息過長,有炸群嫌疑,不予處理!!!】"

bot.file_helper.send('%s撤回了azv**nsiw一條文字訊息--【%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('群名')

# 例項化圖靈機械人 免費申請圖靈機械人:

tu_ling = wxpy.tuling(api_key="自行註冊")

# chats指定對哪些使用者起作www.cppcns.com用, 如果chats=none(預設值)對所有使用者起作用

@bot.register(chats=[friend, group])

def reply_msg(msg):

"""自動回覆訊息

:param msg: 接收到的資訊資料

:return: 回覆文字

"""# do_reply會自動回覆訊息並返回訊息文字

tu_ling.do_reply(msg)

本文標題: python使用wxpy輕鬆實現微信防撤回的方法

本文位址: /jiaoben/python/252830.html

python使用 wxpy 簡簡單單實現微信防撤回

import re from wxpy import bot bot cache path xiaohao.pkl bot.register def handlereceivemsg msg raw msg.raw if raw status 4 獲取被撤回訊息的id oldmsgid re.sea...

Python高階 wxpy學習 異常chu li

若響應中的錯誤碼不為 0,程式將丟擲 responseerror 異常。class wxpy.responseerror err code,err msg 源 當 baseresponse 的返回值不為 0 時丟擲的異常 err code 錯誤碼 int err msg 錯誤訊息 文字 但可能為空捕...

python3使用wxpy給女朋友傳送天氣資訊

模擬瀏覽器來獲取網頁的html header 設定超時時間,防止被 認為是爬蟲 timeout random.choice range 80,180 while true try rep requests.get url,headers header,timeout timeout rep.enco...