最近比較閒就隨便瞎看,看到了微信防撤回就順便跟著學著實現一下
使用的是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...