diff --git a/utils/wechat/contact_manager.py b/utils/wechat/contact_manager.py new file mode 100644 index 0000000..7994e61 --- /dev/null +++ b/utils/wechat/contact_manager.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +""" +联系人管理器 - 提供全局访问联系人信息的单例类 +""" +import logging +from typing import Dict, Optional + + +class ContactManager: + """联系人管理器单例类""" + _instance = None + _contacts: Dict[str, str] = {} + _initialized = False + _logger = logging.getLogger("ContactManager") + + def __new__(cls): + if cls._instance is None: + cls._instance = super(ContactManager, cls).__new__(cls) + return cls._instance + + def __init__(self): + # 确保初始化代码只执行一次 + if not ContactManager._initialized: + self._logger.info("初始化联系人管理器") + ContactManager._initialized = True + + @classmethod + def get_instance(cls): + """获取单例实例""" + if cls._instance is None: + cls._instance = ContactManager() + return cls._instance + + def set_contacts(self, contacts: Dict[str, str]) -> None: + """设置联系人字典 + + Args: + contacts: 联系人字典,格式为 {"wxid": "NickName"} + """ + self._contacts = contacts + self._logger.info(f"联系人信息已更新,共 {len(contacts)} 个联系人") + + def get_contacts(self) -> Dict[str, str]: + """获取所有联系人 + + Returns: + 联系人字典,格式为 {"wxid": "NickName"} + """ + return self._contacts + + def get_nickname(self, wxid: str) -> str: + """根据微信ID获取昵称 + + Args: + wxid: 微信ID + + Returns: + 对应的昵称,如果不存在则返回wxid本身 + """ + return self._contacts.get(wxid, wxid) + + def update_contact(self, wxid: str, nickname: str) -> None: + """更新单个联系人信息 + + Args: + wxid: 微信ID + nickname: 昵称 + """ + self._contacts[wxid] = nickname + self._logger.debug(f"已更新联系人: {wxid} -> {nickname}") + + def refresh_contacts(self, new_contacts: Dict[str, str]) -> None: + """刷新联系人信息 + + Args: + new_contacts: 新的联系人字典 + """ + self._contacts = new_contacts + self._logger.info(f"联系人信息已刷新,共 {len(new_contacts)} 个联系人") \ No newline at end of file