99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
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"} |