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

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

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

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

我实现的代码:

import wxpy

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

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

python微信库wxpy_python wxpy微信防撤回功能相关推荐

  1. python微信版防撤回_初学python--微信防撤回功能改进(一个用处不大的功能)

    真真是遇到一个好玩的python库,可以玩好几天. 上上篇文章中使用itchat对消息进行实时备份和自动回复,同时兼顾防撤回功能,但是有个知友说了:你这防撤回功能代价太大了,要把所有的消息都备份一遍. ...

  2. 微信6.6自动抢红包防撤回小程序

    过年很多微信群都有很多红包,开着挂估计能抢个几百. 微信6.6自动抢红包防撤回小程序

  3. Python 实现微信防撤回功能

    在微信上突然看到"XXX撤回一条消息"的时候,心里痒不痒?现在就教你如何实现消息防撤回的功能.不限手机型号.手机无需root,只要微信号可以登上网页版就可以了(部分不常用和新申请的 ...

  4. python的wxpy库_Python库学习 wxpy - 微信机器人

    本周考虑到实现一个微信机器人的功能,研究了一下 wxpy 这个库 参考文档 简单的demo 例子1:获取聊天群里面所有@我的消息,并回复信息 #!/usr/bin/env python # -*- c ...

  5. python微信库we_python微信库we_python操作微信客户端:WechatPCAPI库实现自动化回复...

    目前有一个项目 WechatPCAPI 可以对微信进行操作,简单来说它是直接操作 PC 版微信客户端的,当然它有一定不足之处就是:PC 版微信客户端和 Python 都需要使用指定版本的,本文我们使用 ...

  6. python微信库we_python操作微信客户端:WechatPCAPI库实现自动化回复

    目前有一个项目 WechatPCAPI 可以对微信进行操作,简单来说它是直接操作 PC 版微信客户端的,当然它有一定不足之处就是:PC 版微信客户端和 Python 都需要使用指定版本的,本文我们使用 ...

  7. 微信文件只读模式怎么解除,一步解决新版微信接收文件为只读属性的问题,附带多开和消息防撤回功能

    最近PC端微信又进行了一次版本更新,这次更新最令用户难受的一个"新功能"恐怕就是接收到的文件为"只读"属性了,用户要想在接收到的文件中保存修改,需要以" ...

  8. IOS微信逆向-免越狱抢红包防撤回等自定义功能实现

    微信砸壳 CrackerXI+砸壳,或手动使用dumpdecrypted砸壳 把已砸壳的wech使用scp或者助手at.ipa导出 monkeydev MonkeyDev集成在xcode上面,可以快速 ...

  9. 钉钉消息防撤回功能研究与实现-可查看历史消息[文件/图文/管理员/链接 撤回拦截]

    研究背景 由于在某个大学进行上课的时候,遇到的某个老师,总是习惯发过的消息,到第二天的时候撤回,我们用聊天工具的其中一个原因,不就是因为可以随时去查看发过的消息吗,,而这位老师的操作,也让包括我在内的 ...

最新文章

  1. Python 技术篇 - python3使用speech库常见问题原因及解决方法
  2. OMG!又一个频繁FullGC的案例
  3. 瑞士轮(洛谷-P1309)
  4. vue本地模拟数据之mockjs安装 - cmd篇
  5. Magento 默认显示全部 magento products per page on grid default value all
  6. c++课后题(2) 数组排序
  7. C++11 函数模板的默认模板参数
  8. C++11智能指针处理Array对象
  9. 关于jdk11没有jre
  10. 腾讯公司执行董事 董事会主席兼本公司首席执行官 马化腾
  11. openssl SM2签名密钥生成
  12. 超详细的Python安装和环境搭建教程
  13. python3 scrapy中文文档_如何用python3创建scrapy项目
  14. Windows下WordPress安装教程(全)
  15. performing vcs refresh卡住不动解决方法
  16. 网络故障诊断的原则[转自www.cnitblog.com/wildon]
  17. C处理命令行参数 getopt 用法
  18. 大数据方面的核心技术
  19. Ext4.0源码解读(分享二)
  20. 人生终将有一场触及灵魂的旅行

热门文章

  1. 方格4G通讯模块SLM630B
  2. python wav文件与wave bytes的转化
  3. 什么是 gc root
  4. C语言PTA题目:7-22 1022 利息
  5. pcs层到mac层_BaiduPCS Go的安装及使用说明
  6. H3C交换机运维之-通过已知终端MAC地址查询接入交换机接口
  7. 全方位深度介绍化工厂人员定位
  8. mysql数据库删除重复的数据只保留一条
  9. linux系统安装python集成环境_windows和linux中搭建python集成开发环境IDE
  10. 懒人修仙传ce修改方法_除了凡人修仙传,你还看过哪部偏写实的国漫吗?来了解一下吧...