ForcePilot/backend/package/yuxi/channels/adapters/feishu/app_owner.py
Kris 1f78c44b03 refactor: 整理并清理项目中的冗余代码与格式问题
这是一个批量整理提交,包含以下主要改动:
1.  删除多处冗余的空行和未使用的导入
2.  修复文件末尾缺少换行符的问题
3.  调整部分模块的导入顺序与代码排版
4.  修复部分配置默认值与策略逻辑
5.  新增多个功能模块与辅助工具
6.  完善异常处理与日志记录
7.  修复速率限制、消息缓存、权限校验等逻辑bug
8.  废弃部分旧有API与配置项并添加警告提示
2026-05-12 14:51:53 +08:00

75 lines
2.5 KiB
Python

from __future__ import annotations
import logging
from typing import Any
logger = logging.getLogger(__name__)
async def fetch_app_owner_open_id(client: Any) -> str | None:
try:
resp = await client.bot.v3.info()
if not resp.success():
logger.warning("[FeishuAppOwner] Failed to fetch bot info: %s", resp.msg)
return None
bot_info = resp.data if hasattr(resp, "data") else {}
app_owner_open_id = getattr(bot_info, "app_owner_open_id", "") or bot_info.get("app_owner_open_id", "")
if app_owner_open_id:
logger.info("[FeishuAppOwner] App owner open_id: %s...", app_owner_open_id[:8])
return app_owner_open_id
logger.warning("[FeishuAppOwner] No app_owner_open_id in bot info response")
return None
except Exception as e:
logger.warning("[FeishuAppOwner] fetch_app_owner_open_id failed: %s", e)
return None
async def resolve_app_owner_open_id(client: Any, config: dict[str, Any]) -> str:
explicit = config.get("docOwnerOpenId", "") or config.get("app_owner_open_id", "")
if explicit:
return explicit
fetched = await fetch_app_owner_open_id(client)
if fetched:
return fetched
logger.warning("[FeishuAppOwner] Could not resolve app owner open_id, using bot_open_id fallback")
return config.get("bot_open_id", "")
async def validate_owner_permission(
client: Any,
owner_open_id: str,
resource_type: str,
resource_token: str,
) -> bool:
try:
from .tools.perm import list_file_members
members = await list_file_members(client, resource_token)
for member in members:
if member.get("member_id") == owner_open_id and member.get("perm") == "full_access":
return True
return False
except Exception as e:
logger.warning("[FeishuAppOwner] Permission validation failed: %s", e)
return False
async def ensure_owner_access(
client: Any,
owner_open_id: str,
resource_type: str,
resource_token: str,
) -> bool:
try:
from .tools.perm import add_file_permission
await add_file_permission(client, resource_token, "openid", owner_open_id, "full_access")
logger.info("[FeishuAppOwner] Granted full_access to owner %s on %s", owner_open_id[:8], resource_token[:16])
return True
except Exception as e:
logger.warning("[FeishuAppOwner] Failed to grant owner access: %s", e)
return False