from __future__ import annotations import logging from typing import Any logger = logging.getLogger(__name__) try: import lark_oapi HAS_LARK_SDK = True except ImportError: HAS_LARK_SDK = False lark_oapi = None # type: ignore async def list_peers(client: Any, page_size: int = 50) -> list[dict]: if not HAS_LARK_SDK or not client: return [] try: request = lark_oapi.api.contact.v3.ListUserRequest.builder().page_size(page_size).build() resp = await client.contact.v3.user.list(request) if resp.success(): items = resp.data.get("items", []) return [ { "open_id": item.get("open_id", ""), "user_id": item.get("user_id", ""), "name": item.get("name", ""), "nickname": item.get("nickname", ""), "email": item.get("email", ""), "department_ids": item.get("department_ids", []), "avatar": item.get("avatar", {}), } for item in items ] return [] except Exception as e: logger.error(f"[FeishuDir] list_peers failed: {e}") return [] async def list_groups(client: Any, page_size: int = 50) -> list[dict]: if not HAS_LARK_SDK or not client: return [] try: request = lark_oapi.api.im.v1.ListChatRequest.builder().page_size(page_size).build() resp = await client.im.v1.chat.list(request) if resp.success(): items = resp.data.get("items", []) return [ { "chat_id": item.get("chat_id", ""), "name": item.get("name", ""), "description": item.get("description", ""), "chat_type": item.get("chat_type", ""), "member_count": item.get("member_count", 0), "owner_id": item.get("owner_id", ""), } for item in items ] return [] except Exception as e: logger.error(f"[FeishuDir] list_groups failed: {e}") return []