侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python使用wxpy轻松实现微信防撤回的方法

Python  /  管理员 发布于 7年前   261

最近比较闲就随便瞎看,看到了微信防撤回就顺便跟着学着实现一下

使用的是wxpy,安装方法pip install wxpy(我使用的是python2.7),这样实现起来比较快,反正也只是练手

首现看了两个别人实现的代码,然后看了看wxpy的文档:http://wxpy.readthedocs.io/zh/latest/utils.html(萌新,顺便锻炼下看文档)

我实现的代码:

import wxpyimport 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轻松实现微信防撤回的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Python利用itchat库向好友或者公众号发消息的实例
    下一条:
    Python开发网站目录扫描器的实现
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客