ForcePilot/backend/package/yuxi/channel/extensions/feishu/pins.py
Kris 5e91bb9985 feat(feishu): 新增飞书渠道完整插件实现
新增飞书渠道插件,包含基础配置、事件处理、消息收发、工具调用、权限管理等完整功能模块,支持WebSocket长连接、卡片消息、流式响应、群管理、审批通知等能力
2026-05-21 10:46:42 +08:00

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"}