加入通讯录管理功能
This commit is contained in:
@@ -3,13 +3,15 @@
|
||||
联系人管理器 - 提供全局访问联系人信息的单例类
|
||||
"""
|
||||
import logging
|
||||
from typing import Dict, Optional
|
||||
from typing import Dict, Optional, List, Tuple
|
||||
|
||||
|
||||
class ContactManager:
|
||||
"""联系人管理器单例类"""
|
||||
_instance = None
|
||||
_contacts: Dict[str, str] = {}
|
||||
_group_contacts: Dict[str, str] = {} # 群组联系人
|
||||
_personal_contacts: Dict[str, str] = {} # 个人联系人
|
||||
_initialized = False
|
||||
_logger = logging.getLogger("ContactManager")
|
||||
|
||||
@@ -39,6 +41,22 @@ class ContactManager:
|
||||
"""
|
||||
self._contacts = contacts
|
||||
self._logger.info(f"联系人信息已更新,共 {len(contacts)} 个联系人")
|
||||
# 分类联系人
|
||||
self._classify_contacts()
|
||||
|
||||
def _classify_contacts(self) -> None:
|
||||
"""将联系人分类为群组和个人联系人"""
|
||||
self._group_contacts = {}
|
||||
self._personal_contacts = {}
|
||||
|
||||
for wxid, nickname in self._contacts.items():
|
||||
# 微信群ID通常以@@开头
|
||||
if wxid.startswith('@@'):
|
||||
self._group_contacts[wxid] = nickname
|
||||
else:
|
||||
self._personal_contacts[wxid] = nickname
|
||||
|
||||
self._logger.info(f"联系人分类完成: {len(self._group_contacts)} 个群组, {len(self._personal_contacts)} 个个人联系人")
|
||||
|
||||
def get_contacts(self) -> Dict[str, str]:
|
||||
"""获取所有联系人
|
||||
@@ -48,6 +66,22 @@ class ContactManager:
|
||||
"""
|
||||
return self._contacts
|
||||
|
||||
def get_group_contacts(self) -> Dict[str, str]:
|
||||
"""获取所有群组联系人
|
||||
|
||||
Returns:
|
||||
群组联系人字典,格式为 {"wxid": "GroupName"}
|
||||
"""
|
||||
return self._group_contacts
|
||||
|
||||
def get_personal_contacts(self) -> Dict[str, str]:
|
||||
"""获取所有个人联系人
|
||||
|
||||
Returns:
|
||||
个人联系人字典,格式为 {"wxid": "NickName"}
|
||||
"""
|
||||
return self._personal_contacts
|
||||
|
||||
def get_nickname(self, wxid: str) -> str:
|
||||
"""根据微信ID获取昵称
|
||||
|
||||
@@ -67,6 +101,11 @@ class ContactManager:
|
||||
nickname: 昵称
|
||||
"""
|
||||
self._contacts[wxid] = nickname
|
||||
# 更新分类
|
||||
if wxid.endswith('@chatroom'):
|
||||
self._group_contacts[wxid] = nickname
|
||||
else:
|
||||
self._personal_contacts[wxid] = nickname
|
||||
self._logger.debug(f"已更新联系人: {wxid} -> {nickname}")
|
||||
|
||||
def refresh_contacts(self, new_contacts: Dict[str, str]) -> None:
|
||||
@@ -76,4 +115,14 @@ class ContactManager:
|
||||
new_contacts: 新的联系人字典
|
||||
"""
|
||||
self._contacts = new_contacts
|
||||
self._logger.info(f"联系人信息已刷新,共 {len(new_contacts)} 个联系人")
|
||||
self._logger.info(f"联系人信息已刷新,共 {len(new_contacts)} 个联系人")
|
||||
# 重新分类联系人
|
||||
self._classify_contacts()
|
||||
|
||||
def get_contact_statistics(self) -> Tuple[int, int, int]:
|
||||
"""获取联系人统计信息
|
||||
|
||||
Returns:
|
||||
包含总联系人数、群组数和个人联系人数的元组
|
||||
"""
|
||||
return len(self._contacts), len(self._group_contacts), len(self._personal_contacts)
|
||||
Reference in New Issue
Block a user