from __future__ import annotations import logging from yuxi.channel.extensions.feishu.client import get_client logger = logging.getLogger(__name__) async def create_pin( app_id: str, app_secret: str, domain: str, message_id: str, http_timeout_ms: int = 30000, ) -> dict: try: client = get_client(app_id, app_secret, domain, http_timeout_ms) import lark_oapi req = lark_oapi.im.v1.CreatePinRequest( request_body=lark_oapi.im.v1.CreatePinRequestBody( message_id=message_id, ), ) resp = await client.im.v1.pin.create_async(req) if resp.success(): return {"success": True, "pin": getattr(resp.data, "pin", {})} else: return {"success": False, "error": getattr(resp, "msg", ""), "code": getattr(resp, "code", 0)} except ImportError: return {"success": False, "error": "lark-oapi SDK not installed"} except Exception: logger.exception("Feishu create_pin error") return {"success": False, "error": "Internal error"} async def remove_pin( app_id: str, app_secret: str, domain: str, message_id: str, http_timeout_ms: int = 30000, ) -> dict: try: client = get_client(app_id, app_secret, domain, http_timeout_ms) import lark_oapi req = lark_oapi.im.v1.DeletePinRequest(message_id=message_id) resp = await client.im.v1.pin.delete_async(req) if resp.success(): return {"success": True} else: return {"success": False, "error": getattr(resp, "msg", ""), "code": getattr(resp, "code", 0)} except ImportError: return {"success": False, "error": "lark-oapi SDK not installed"} except Exception: logger.exception("Feishu remove_pin error") return {"success": False, "error": "Internal error"} async def list_pins( app_id: str, app_secret: str, domain: str, chat_id: str, *, page_size: int = 50, page_token: str = "", http_timeout_ms: int = 30000, ) -> dict: try: client = get_client(app_id, app_secret, domain, http_timeout_ms) import lark_oapi req = lark_oapi.im.v1.ListPinRequest( chat_id=chat_id, page_size=page_size, page_token=page_token if page_token else None, ) resp = await client.im.v1.pin.list_async(req) if resp.success() and resp.data: items = getattr(resp.data, "items", []) or [] return { "success": True, "items": items, "has_more": getattr(resp.data, "has_more", False), "page_token": getattr(resp.data, "page_token", ""), } else: return {"success": False, "error": getattr(resp, "msg", "")} except ImportError: return {"success": False, "error": "lark-oapi SDK not installed"} except Exception: logger.exception("Feishu list_pins error") return {"success": False, "error": "Internal error"}