吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5754|回复: 16
收起左侧

[Python 原创] 【原创源码】【python】 查看被撤回的X信消息

  [复制链接]
姜蕴 发表于 2019-3-9 11:18
本帖最后由 wushaominkk 于 2019-6-6 20:58 编辑
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'jiangwenwen'

import itchat
from itchat.content import *
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, 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()

免费评分

参与人数 5吾爱币 +7 热心值 +4 收起 理由
howmoney + 1 用心讨论,共获提升!
a128638 + 1 + 1 我很赞同!
xiaohuo1229 + 1 + 1 我很赞同!
wushaominkk + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
夏520 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaole5200 发表于 2019-9-26 16:36
Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Your wechat account may be LIMITED to log in WEB wechat, error info:
<error><ret>1203</ret><message>为了你的帐号安全,此微信号已不允许登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。Windows微信下载地址:https://pc.weixin.qq.com  Mac微信下载地址:https://mac.weixin.qq.com</message></error>
Start auto replying.
 楼主| 姜蕴 发表于 2019-3-9 23:40 来自手机
worinima2128 发表于 2019-3-9 20:59
看不懂,不知道代码的意思

可以看下python的ichat的模块用法就大概知道了
845xyz 发表于 2019-3-9 12:07
违规昵称36 发表于 2019-3-9 20:59
看不懂,不知道代码的意思
陈武阳 发表于 2019-3-13 17:26
怎么用啊
 楼主| 姜蕴 发表于 2019-3-13 22:54

在python环境下直接运行就好
陈武阳 发表于 2019-4-1 17:40
是python3.6的运行环境么
菜鸟--不二 发表于 2019-4-1 17:56
可以呀,谢谢
yzmno0 发表于 2019-5-23 10:21
学习学习
wl754659125 发表于 2019-5-27 12:27
非常好的资料,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 15:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表