解锁并提取Linux客户端微信数据库 (vibe coded)
at 86 lines 3.9 kB view raw
1# -*- coding: utf-8 -*-# 2# ------------------------------------------------------------------------------- 3# Name: __init__.py 4# Description: db 5# Author: xaoyaoo 6# Date: 2024/04/15 7# ------------------------------------------------------------------------------- 8from .utils import download_file, dat2img 9 10from .db_favorite import FavoriteHandler 11from .db_msg import MsgHandler 12from .db_micro import MicroHandler 13from .db_media import MediaHandler 14from .db_open_im_contact import OpenIMContactHandler 15from .db_public_msg import PublicMsgHandler 16from .db_open_im_media import OpenIMMediaHandler 17from .db_sns import SnsHandler 18 19 20class DBHandler(MicroHandler, MediaHandler, OpenIMContactHandler, PublicMsgHandler, OpenIMMediaHandler, 21 FavoriteHandler, SnsHandler): 22 _class_name = "DBHandler" 23 24 def __init__(self, db_config, my_wxid, *args, **kwargs): 25 self.config = db_config 26 self.my_wxid = my_wxid 27 28 super().__init__(self.config) 29 # 加速查询索引 30 self.Micro_add_index() 31 self.Msg_add_index() 32 self.PublicMsg_add_index() 33 self.Media_add_index() 34 35 def get_user(self, word=None, wxids=None, labels=None): 36 """ 37 获取联系人列表 38 :param word: 搜索关键字 39 :param wxids: wxid列表 40 :param labels: 标签列表 41 :return: 联系人dict {wxid: {}} 42 """ 43 users = self.get_user_list(word=word, wxids=wxids, label_ids=labels) 44 users.update(self.get_im_user_list(word=word, wxids=wxids)) 45 return users 46 47 def get_msgs(self, wxids: list or str = "", start_index=0, page_size=500, msg_type: str = "", 48 msg_sub_type: str = "", start_createtime=None, end_createtime=None): 49 """ 50 获取聊天记录列表 51 :param wxids:[ wxid] 52 :param start_index: 起始索引 53 :param page_size: 页大小 54 :param msg_type: 消息类型 55 :param msg_sub_type: 消息子类型 56 :param start_createtime: 开始时间 57 :param end_createtime: 结束时间 58 :return: 聊天记录列表 {"id": _id, "MsgSvrID": str(MsgSvrID), "type_name": type_name, "is_sender": IsSender, 59 "talker": talker, "room_name": StrTalker, "msg": msg, "src": src, "extra": {}, 60 "CreateTime": CreateTime, } 61 """ 62 msgs0, wxid_list0 = self.get_msg_list(wxids=wxids, start_index=start_index, page_size=page_size, 63 msg_type=msg_type, 64 msg_sub_type=msg_sub_type, start_createtime=start_createtime, 65 end_createtime=end_createtime, my_talker=self.my_wxid) 66 msgs1, wxid_list1 = self.get_plc_msg_list(wxids=wxids, start_index=start_index, page_size=page_size, 67 msg_type=msg_type, 68 msg_sub_type=msg_sub_type, start_createtime=start_createtime, 69 end_createtime=end_createtime, my_talker=self.my_wxid) 70 msgs = msgs0 + msgs1 71 wxid_list = wxid_list0 + wxid_list1 72 73 users = self.get_user(wxids=wxid_list) 74 return msgs, users 75 76 def get_msgs_count(self, wxids: list = ""): 77 chat_count = self.get_m_msg_count(wxids) 78 chat_count1 = self.get_plc_msg_count(wxids) 79 # 合并两个字典,相同key,则将value相加 80 count = {k: chat_count.get(k, 0) + chat_count1.get(k, 0) for k in 81 list(set(list(chat_count.keys()) + list(chat_count1.keys())))} 82 return count 83 84 85__all__ = ["DBHandler", "FavoriteHandler", "MsgHandler", "MicroHandler", "MediaHandler", 86 "OpenIMContactHandler", "PublicMsgHandler", "OpenIMMediaHandler", "SnsHandler"]