前提
昨天在群裡,看到小夥伴發了一個 ”不可描述“ 的圖片,我剛準備點開看,就發現TA撤回了,該死的撤回。看我怎麼整治你。
準備工作
- 開發工具
- 一個註冊一年以上的微訊號
工作原理
本專案的防撤回,實際上的原理是這個微信和你聊天的物件同處再一個群裡,它會實時監控聊天記錄,檢測到訊息狀態為撤回,就會從撤回之前的儲存的記錄裡,拿出這條資料,轉發給出去,從而達到一個防撤回的效果。通俗的講就是實時備份你的聊天記錄,然後提取出來撤回的那條。
注意事項
1、如果你想要防撤回效果,本微訊號一定要和你當前的微訊號再同一個群裡。
2、簡單的說就是你的機器人微信 和 你的主微信有著同樣的群聊,以達到防撤回的目的
3、暫不支援單人撤回,只能對群防撤回。
主要程式碼
獲取你要檢測的群物件,如果你想監聽所有物件,則不需要
Test = bot.groups().search(u'Test')
複製程式碼
將撤回的訊息 轉發到特定的群裡,以供再其他微信檢視,可以是單個好友或者檔案傳輸助手
recallNotice = ensure_one(bot.groups().search('recallNotice'))
複製程式碼
# 文字 TEXT = 'Text'
# 位置 MAP = 'Map' 1
# 名片 CARD = 'Card' 2
# 分享 SHARING = 'Sharing' 3
# 圖片 PICTURE = 'Picture' 4
# 語音 RECORDING = 'Recording' 5
# 檔案 ATTACHMENT = 'Attachment' 6
# 視訊 VIDEO = 'Video' 7
複製程式碼
註冊事件,所有群的訊息
@bot.register(Group)
複製程式碼
主要程式碼
def handleReceiveMsg(msg):
'''
監聽訊息
:param msg:
:param chats:
:return:
'''
ra = msg.raw
mss = msg.bot.messages
le = len(mss)
if ra['Status'] == 4:
# 獲取訊息ID
oldmsgid = re.search(re.compile('<msgid>(.*?)</msgid>', re.S),ra['Content']).group(1)
for i in range(le-1,-1,-1):
if oldmsgid == str(mss[i].id):
name = msg.chat.name // 獲取群名
username = msg.member.nick_name // 獲取撤回訊息的人名
if name == None or name == '':
name = msg.chat.nick_name
username = msg.member.nick_name
// 根據不同的訊息型別進行撤回提示
if mss[i].type == 'Text':
recallNotice.send('來自【'+ name + '】的【' + username
+'】撤回了一條訊息:'+ mss[i].text)
bot.file_helper.send('來自【'+ name + '】的【' + username
+'】撤回了一條訊息:'+ mss[i].text)
break
複製程式碼
效果展示
完美通過測試,看你還怎麼撤回。
原始碼地址
微信公眾號 【小夭同學】回覆 【防撤回】
歷史回顧
關於我
小夭同學,頁面切圖仔。
想體驗機器人的小夥伴可以加下面二維碼,驗證資訊 【py】 自動通過拉你入群體驗機器人其他功能。
歡迎小夥伴關注我的微信 【小夭同學】 一起學習前端相關知識。