温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python如何使用wxpy轻松实现微信防撤回

发布时间:2021-03-30 10:11:09 来源:亿速云 阅读:288 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关python如何使用wxpy轻松实现微信防撤回,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

实现的代码:

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('<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轻松实现微信防撤回”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI