Python实现微信中找回好友、群聊用户撤回的消息功能示例

本文实例讲述了Python实现微信中找回好友、群聊用户撤回的消息功能。分享给大家供大家参考,具体如下:

还在好奇好友撤回了什么消息吗?群里撤回了什么消息?下面的代码实现了:即使群、好友撤回了文本消息、表情、图片等消息,自己也能知道撤回的什么。

#coding=utf-8
import itchat
from itchat.content import TEXT
from itchat.content import *
import sys
import time
import re
import os
msg_information = {}
face_bug=None #针对表情包的内容
@itchat.msg_register([TEXT,PICTURE,FRIENDS,CARD,MAP,SHARING,RECORDING,ATTACHMENT,VIDEO],isFriendChat=True,isGroupChat=True)
def receive_msg(msg):
  global face_bug
  msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #接收消息的时间
  if 'ActualNickName' in msg:
    from_user = msg['ActualUserName'] #群消息的发送者,用户的唯一标识
    msg_from = msg['ActualNickName']#发送者群内的昵称
    friends = itchat.get_friends(update=True)#获取所有好友
    for f in friends:
      if from_user == f['UserName']: #如果群消息是好友发的
        if f['RemarkName']: # 优先使用好友的备注名称,没有则使用昵称
          msg_from = f['RemarkName']
        else:
          msg_from = f['NickName']
        break
    groups = itchat.get_chatrooms(update=True)#获取所有的群
    for g in groups:
      if msg['FromUserName'] == g['UserName']:#根据群消息的FromUserName匹配是哪个群
        group_name = g['NickName']
        group_menbers = g['MemberCount']
        break
    group_name = group_name + "(" + str(group_menbers) +")"
  else:
    if itchat.search_friends(userName=msg['FromUserName'])['RemarkName']:#优先使用备注名称
      msg_from = itchat.search_friends(userName=msg['FromUserName'])['RemarkName']
    else:
      msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName'] #在好友列表中查询发送信息的好友昵称
    group_name = ""
  msg_time = msg['CreateTime'] #信息发送的时间
  msg_id = msg['MsgId']  #每条信息的id
  msg_content = None   #储存信息的内容
  msg_share_url = None  #储存分享的链接,比如分享的文章和音乐
  if msg['Type'] == 'Text' or msg['Type'] == 'Friends':   #如果发送的消息是文本或者好友推荐
    msg_content = msg['Text']
  #如果发送的消息是附件、视频、图片、语音
  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'] == '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']    #记录分享的url
  face_bug = msg_content
  #将信息存储在字典中,每一个msg_id对应一条信息
  time.sleep(2)
  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,
        "group_name":group_name
      }
    }
  )
  del_info = []
  for k in msg_information:
    m_time = msg_information[k]['msg_time'] #取得消息时间
    if int(time.time()) - m_time > 130: #如果消息时间是130秒甚至更久之前的,则删除。
      del_info.append(k)
  if del_info:
    for i in del_info:
      msg_information.pop(i)
#监听是否有消息撤回
@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) #在返回的content查找撤回的消息的id
    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['group_name'] + old_msg['msg_from'] +"\n" + old_msg['msg_time_rec'] \
            + "撤回了:" + "\n" + r"" + old_msg['msg_content']
      #如果是分享的文件被撤回了,那么就将分享的url加在msg_body中发送给文件助手
      if old_msg['msg_type'] == "Sharing":
        msg_body += "\n链接是:" + old_msg.get('msg_share_url')
      #print(msg_body)
      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,enableCmdQR=1)
itchat.run()

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • python实现文件助手中查看微信撤回消息

    利用python实现防撤回,对方撤回的消息可在自己的微信文件传输助手中查看. 如果想变成可执行文件放在电脑中运行,可用pyinstaller将此程序打包成exe文件. pyinstaller 文件名.py -F 执行程序后,消息防撤回就启动了. 程序完整代码 # -*-encoding:utf-8-*- import os import re import shutil import time import itchat from itchat.content import * # 说明:可以撤

  • python实现微信定时每天和女友发送消息

    但凡有些事情重复时,我就在想怎么可以用程序来自动化.这里想分享如何每天给女友定时微信发送"晚安",如果只是晚安,就略显单调,于是爬取金山词霸每日一句,英文和翻译,借此设定定时器进行发送. 准备: pip install wxpy pip install requests 实现代码: from __future__ import unicode_literals from threading import Timer from wxpy import * import requests

  • python如何查看微信消息撤回

    本文为大家分享了python查看微信消息撤回的具体代码,供大家参考,具体内容如下 1.安装itchat itchat是一个开源的python微信库,支持发送消息.图片.视频.地图.名片.文件等,还可以实现自动回复等多种功能. 看到的一个文档还不错 1).先安一个python 下载地址 2).安装成功之后,进入pip3.exe所在的目录 安装itchat:pip3.exe install itchat 下图我的已经安装过了(注意:使用3以及以上版本执行). 3.打开cmd拖入按回车就好了 代码实现

  • 使用Python制作自动推送微信消息提醒的备忘录功能

    日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时,导致错过的尴尬.如果有一款小工具,可以及时提醒,而不用再主动去查备忘录,化被动为主动,那就再合适不过了.因此,在这里我们就利用Python,实现这样的一款"小工具". 初步设想 毫无疑问,手机是当前使用最频繁的工具,没有之一.饭可以不吃,手机不可以不带.如果能在某些特定的时点,将备忘记录事项通过某种形式发送到手机端,通过查看手机端消息实现事项提醒,那将是再

  • Python实现微信消息防撤回功能的实例代码

    微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿.在此期间微信也推出了不少的功能如:"摇一摇"."漂流瓶"."朋友圈"."附近的人"."公众平台"."小程序"等等,涵盖了我们生活的方方面面,微信正在慢慢践行着他们的口号:微信,是一个生活方式 一.背景介绍 产品的更新迭代必然会伴随着功能的推出和下线,今天我们要讲的便是微信

  • 78行Python代码实现现微信撤回消息功能

    Python曾经对我说:"时日不多,赶紧用Python".于是看到了一个基于python的微信开源库:itchat,玩了一天,做了一个程序,把私聊撤回的信息可以收集起来并发送到个人微信的文件传输助手,包括: who :谁发送的 when :什么时候发送的消息 what:什么信息 which:哪一类信息,包括:文本.图片.语音.视频.分享.位置.附件... 01 代码实现 # -*-encoding:utf-8-*- import os import re import shutil i

  • python使用wxpy实现微信消息防撤回脚本

    本文实例为大家分享了python实现微信消息防撤回的具体代码,供大家参考,具体内容如下 使用了sqlite3保存数据,当有人撤回消息时取出数据发送到文件传输助手. 文件的话会先保存到本地,语音会以文件的方式发送. wxpy 和 itchat很久没更新了,有些功能没法用了,web微信也不知道什么时候会凉. 帮助信息在注释里. # -*- coding: utf-8 -*- # 使用sqlite3保存message,当有人撤回消息时在数据库中通过ID检索该消息是否存在,如果存在则将撤回的消息发送到文

  • Python实现的微信公众号群发图片与文本消息功能实例详解

    本文实例讲述了Python实现的微信公众号群发图片与文本消息功能.分享给大家供大家参考,具体如下: 在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token(): payload_access_token={ 'grant_type':'client_credential', 'appid':'xxxxxxxxxxxxx', 'secret':'xxxxxxxxxxxxx

  • Python查看微信撤回消息代码

    微信(WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,由张小龙所带领的腾讯广州研发中心产品团队打造 .在互联网飞速发展的下.民众的需求下,微信已经更新到2.6.2.31版本,全民微信时代.村口的张大妈,家里的老父亲都知道怎么使用微信. 微信撤回消息功能是在微信的5.3.1中新增的. 如果需要撤回微信消息,长按刚刚发出去的消息,会弹出菜单,其中有撤回选项.点击撤回后可以看到提示,会撤回刚才发出去的最后一条微信消息.点击确定后,你会看到"你撤回了一

  • 使用Python微信库itchat获得好友和群组已撤回的消息

    具体代码如下所述: #coding=utf-8 import itchat from itchat.content import TEXT from itchat.content import * import sys import time import re import os msg_information = {} face_bug=None #针对表情包的内容 # 这里的TEXT表示如果有人发送文本消息() # TEXT 文本 文本内容(文字消息) # MAP 地图 位置文本(位置分享

  • Python 实现还原已撤回的微信消息

    导包效果展示 以下截图显示的撤回消息类型依次是文字消息.微信自带表情.图片.语音.定位地图.名片.公众号文章.音乐.视频.有群里撤回的,也有个人号撤回的. 图文来源:http://kks.me/aULmF 图文来源:http://kks.me/aULmF 程序思路 主要由两部分组成: handler_receive_msg():处理接收到的消息,将消息临时放在字典中. send_msg_helper():将撤回的消息自动发给文件传输助手. 程序分析 首先,我们定义一个字典来储存消息,定义消息储存

随机推荐