87 lines
3.8 KiB
Python
87 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-#
|
||
# -------------------------------------------------------------------------------
|
||
# Name: __init__.py
|
||
# Description: db
|
||
# Author: xaoyaoo
|
||
# Date: 2024/04/15
|
||
# -------------------------------------------------------------------------------
|
||
from .utils import download_file, dat2img
|
||
|
||
from .dbFavorite import FavoriteHandler
|
||
from .dbMSG import MsgHandler
|
||
from .dbMicro import MicroHandler
|
||
from .dbMedia import MediaHandler
|
||
from .dbOpenIMContact import OpenIMContactHandler
|
||
from .dbPublicMsg import PublicMsgHandler
|
||
from .dbOpenIMMedia import OpenIMMediaHandler
|
||
from .dbSns import SnsHandler
|
||
|
||
|
||
class DBHandler(MicroHandler, MediaHandler, OpenIMContactHandler, PublicMsgHandler, OpenIMMediaHandler,
|
||
FavoriteHandler, SnsHandler):
|
||
_class_name = "DBHandler"
|
||
|
||
def __init__(self, db_config, my_wxid, *args, **kwargs):
|
||
self.config = db_config
|
||
self.my_wxid = my_wxid
|
||
|
||
super().__init__(self.config)
|
||
# 加速查询索引
|
||
self.Micro_add_index()
|
||
self.Msg_add_index()
|
||
self.PublicMsg_add_index()
|
||
self.Media_add_index()
|
||
|
||
def get_user(self, word=None, wxids=None, labels=None):
|
||
"""
|
||
获取联系人列表
|
||
:param word: 搜索关键字
|
||
:param wxids: wxid列表
|
||
:param labels: 标签列表
|
||
:return: 联系人dict {wxid: {}}
|
||
"""
|
||
users = self.get_user_list(word=word, wxids=wxids, label_ids=labels)
|
||
users.update(self.get_im_user_list(word=word, wxids=wxids))
|
||
return users
|
||
|
||
def get_msgs(self, wxids: list or str = "", start_index=0, page_size=500, msg_type: str = "",
|
||
msg_sub_type: str = "", start_createtime=None, end_createtime=None):
|
||
"""
|
||
获取聊天记录列表
|
||
:param wxids:[ wxid]
|
||
:param start_index: 起始索引
|
||
:param page_size: 页大小
|
||
:param msg_type: 消息类型
|
||
:param msg_sub_type: 消息子类型
|
||
:param start_createtime: 开始时间
|
||
:param end_createtime: 结束时间
|
||
:return: 聊天记录列表 {"id": _id, "MsgSvrID": str(MsgSvrID), "type_name": type_name, "is_sender": IsSender,
|
||
"talker": talker, "room_name": StrTalker, "msg": msg, "src": src, "extra": {},
|
||
"CreateTime": CreateTime, }
|
||
"""
|
||
msgs0, wxid_list0 = self.get_msg_list(wxids=wxids, start_index=start_index, page_size=page_size,
|
||
msg_type=msg_type,
|
||
msg_sub_type=msg_sub_type, start_createtime=start_createtime,
|
||
end_createtime=end_createtime, my_talker=self.my_wxid)
|
||
msgs1, wxid_list1 = self.get_plc_msg_list(wxids=wxids, start_index=start_index, page_size=page_size,
|
||
msg_type=msg_type,
|
||
msg_sub_type=msg_sub_type, start_createtime=start_createtime,
|
||
end_createtime=end_createtime, my_talker=self.my_wxid)
|
||
msgs = msgs0 + msgs1
|
||
wxid_list = wxid_list0 + wxid_list1
|
||
|
||
users = self.get_user(wxids=wxid_list)
|
||
return msgs, users
|
||
|
||
def get_msgs_count(self, wxids: list = ""):
|
||
chat_count = self.get_m_msg_count(wxids)
|
||
chat_count1 = self.get_plc_msg_count(wxids)
|
||
# 合并两个字典,相同key,则将value相加
|
||
count = {k: chat_count.get(k, 0) + chat_count1.get(k, 0) for k in
|
||
list(set(list(chat_count.keys()) + list(chat_count1.keys())))}
|
||
return count
|
||
|
||
|
||
__all__ = ["DBHandler", "FavoriteHandler", "MsgHandler", "MicroHandler", "MediaHandler",
|
||
"OpenIMContactHandler", "PublicMsgHandler", "OpenIMMediaHandler", "SnsHandler"]
|