from __future__ import annotations from typing import Any try: import lark_oapi HAS_LARK_SDK = True except ImportError: HAS_LARK_SDK = False lark_oapi = None # type: ignore async def get_chat_members(client: Any, chat_id: str) -> list[dict[str, Any]]: if not HAS_LARK_SDK or not client: return [] members: list[dict[str, Any]] = [] page_token = "" try: while True: request = ( lark_oapi.api.im.v1.ListChatMembersRequest.builder() .chat_id(chat_id) .page_size(100) .page_token(page_token) .build() ) resp = await client.im.v1.chat.member.list(request) if not resp.success(): break data = resp.data if hasattr(resp, "data") else {} items = data.get("items", []) for item in items: members.append( { "open_id": item.get("open_id", ""), "user_id": item.get("user_id", ""), "name": item.get("name", ""), "member_type": item.get("member_type", ""), } ) page_token = data.get("page_token", "") if not page_token or not items: break except Exception as e: raise RuntimeError(f"获取群成员失败: {e}") from e return members async def search_chat_by_name(client: Any, name: str) -> list[dict[str, Any]]: if not HAS_LARK_SDK or not client: return [] chats: list[dict[str, Any]] = [] page_token = "" try: while True: request = ( lark_oapi.api.im.v1.SearchChatRequest.builder() .search_key(name) .page_size(50) .page_token(page_token) .build() ) resp = await client.im.v1.chat.search(request) if not resp.success(): break data = resp.data if hasattr(resp, "data") else {} items = data.get("items", []) for item in items: chats.append( { "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), } ) page_token = data.get("page_token", "") if not page_token or not items: break except Exception as e: raise RuntimeError(f"搜索群组失败: {e}") from e return chats