python基于itchat模块实现微信防撤回


Posted in Python onApril 29, 2019

有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。

环境要求

Python3
电脑

安装itchat

pip install itchat

使用代码

新建chehui.py,拷贝以下代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'jiangwenwen'

import itchat
from itchat.content import *
import time
import re
import os

print("该程序由里客云资源站开发,网址:likeyunba.com")
print("作者:TANKING")
print("打开程序会弹出一个二维码,微信扫码")
print("如果二维码弹不出,那就在你这个程序的同一个目录下找到QR.png双击打开扫码")
print("扫码后,出现Start auto replying就可以实时监控消息了...")

msg_information = {}
# 针对表情包的内容
face_bug = None

@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO], isFriendChat=True, isMpChat=True)
def handle_receive_msg(msg):
 global face_bug
 # 接收消息的时间
 msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 # 在好友列表列表中查询发送信息的好友昵称
 msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName']
 # 信息发送的时间
 msg_time = msg['CreateTime']
 # 每条信息的ID
 msg_id = msg['MsgId']
 # 储存信息的内容
 msg_content = None
 # 储存分享的连接,比如分享的文章和音乐
 msg_share_url = None

 # 如果发送的消息是文本或者好友推荐
 if msg['Type'] == 'Text' or msg['Type'] == 'Friends':
 msg_content = msg['Text']
 print(msg_content)

 # 如果发送的消息是附件,视频,图片,语音
 elif msg['Type'] == 'Attachment' or msg['Type'] == 'Video' \
 or msg['Type'] == 'Picture'\
  or msg['Type'] == 'Recording':
 # 内容为下载文件名
 msg_content = msg['FileName']
 msg['Text'](str(msg_content))

 # 如果消息是推荐的名片
 elif msg['Type'] == 'Card':
 # 内容是推荐人的昵称和性别
 msg_content = msg['RecommendInfo']['NickName'] + '的名片'
 if msg['RecommendInfo']['Sex'] == 1:
  msg_content += '性别为男'
 else:
  msg_content += '性别为女'

 print(msg_content)

 # 如果消息为分享的位置信息
 elif msg['Type'] == 'Map':
 x, y, location = re.search(
  "<location x=\"(.*?)\" y=\"(.*?)\".*label=\"(.*?)\".*", msg['OriContent']).group(1, 2, 3)
 if location is None:
  # 内容为详细地址
  msg_content = r'纬度->' + x.__str__() + "经度->" + y.__str__()
 else:
  msg_content = r"" + location

 # 如果消息是分享的音乐或者文章,详细的内容为文章的标题或者分享的名字
 elif msg['Type'] == 'Sharing':
 msg_content = msg['Text']
 msg_share_url = msg['Url']
 print(msg_share_url)
 face_bug = msg_content

 # 将信息存储在字典中,每一个msg_id对应一条消息
 msg_information.update(
 {
  msg_id: {
  "msg_from": msg_from, "msg_time": msg_time, "msg_time_rec": msg_time_rec,
  "msg_type": msg['Type'],
  "msg_content": msg_content, "msg_share_url": msg_share_url
  }
 }
)

#这个是用于监听是否有friend消息撤回
@itchat.msg_register(NOTE, isFriendChat=True, isGroupChat=True, isMpChat=True)
def information(msg):
 # 这里如果这里的msg['Content']中包含消息撤回和id,就执行下面的语句
 if '撤回了一条消息' in msg['Content']:
 old_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['Content']).group(1)
 # 得到消息
 old_msg = msg_information.get(old_msg_id)
 print(old_msg)

 # 如果发送的是表情
 if len(old_msg_id)<11:
  itchat.send_file(face_bug, toUserName='filehelper')
 # 发送撤回的提示给文件助手
 else:
  msg_body = "【"\
   + old_msg.get('msg_from') + "撤回了】\n"\
   + old_msg.get("msg_type") + "消息:" + "\n"\
   + old_msg.get("msg_time_rec") + "\n"\
   + r"" + old_msg.get("msg_content")

 # 如果分享的文件被撤回了,那么就将分享的url加在msg_body中发送给文件助手
 if old_msg['msg_type'] == "Sharing":
  msg_body += "\n就是这个链接>" + old_msg.get('msg_share_url')

 # 将撤回消息发送到文件助手
 itchat.send_msg(msg_body, toUserName="filehelper")

 # 有文件的话也要将文件发送回去
 if old_msg["msg_type"] == "Picture"\
  or old_msg["msg_type"] == "Recording"\
  or old_msg["msg_type"] == "Video"\
  or old_msg["msg_type"] == "Attachment":
  file = "@fil@%s" % (old_msg['msg_content'])
  itchat.send(msg=file, toUserName='filehelper')
  os.remove(old_msg['msg_content'])

 # 删除字典旧信息
 msg_information.pop(old_msg_id)

itchat.auto_login(hotReload=True)
itchat.run()

CMD运行即可。

考虑到有一些人没有Python环境,我已经打包成可执行文件了,直接双击exe就可以在电脑运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
pandas中Timestamp类用法详解
Dec 11 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
Python装饰器语法糖
Jan 02 Python
Python3爬虫全国地址信息
Jan 05 Python
Python语言进阶知识点总结
May 28 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
详解如何用Python实现感知器算法
Jun 18 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 Python
手把手教你使用Python创建微信机器人
Apr 29 #Python
python实现微信防撤回神器
Apr 29 #Python
python实现文件助手中查看微信撤回消息
Apr 29 #Python
Python实现微信消息防撤回功能的实例代码
Apr 29 #Python
python控制nao机器人身体动作实例详解
Apr 29 #Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 #Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 #Python
You might like
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP异常处理Exception类
2015/12/11 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
jquery json 实例代码
2010/12/02 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
详解python while 函数及while和for的区别
2018/09/07 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
拾金不昧锦旗标语
2014/06/27 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
父亲去世追悼词
2015/06/23 职场文书
中秋节主题班会
2015/08/14 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
python代码实现备忘录案例讲解
2021/07/26 Python
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python