from loguru import logger from wechat_ipad.providers.server_864.base import Server864APIClientBase class UserMixin(Server864APIClientBase): """864 用户资料相关接口。""" async def get_profile(self, wxid: str = None) -> dict: """获取当前登录账号的资料。""" del wxid data = await self._request_data("get", "/user/GetProfile", timeout=20) return dict(data or {}) async def get_profile_info_ext(self, wxid: str = None) -> dict: """获取扩展资料。 说明: 1. 864 当前公开接口只直接暴露“当前账号资料”; 2. 为了兼容项目现有调用面,这里先从主资料中补常见字段; 3. 若后续发现 864 某个版本提供了专门扩展接口,再局部替换即可。 """ del wxid profile = await self.get_profile() return dict(profile.get("userInfoExt", {}) or profile.get("UserInfoExt", {}) or profile) async def get_my_qrcode(self, style: int = 8) -> str: """获取当前登录账号个人二维码。""" data = await self._request_data( "post", "/user/GetMyQrCode", json_body={"Style": int(style), "Recover": False}, timeout=20, ) qrcode_info = self._pick_first(data, "qrcode", "Qrcode", "QrCode") or {} return str(self._pick_first(qrcode_info, "buffer", "Buffer", "src", "Src") or "") async def is_logged_in(self, wxid: str = None) -> bool: """检查 864 当前账号是否在线。""" del wxid try: await self.get_profile() return True except Exception as e: logger.error("server_864 is_logged_in:{}", e) return False