"""Microsoft Teams 消息 Pin/Unpin。 通过 Graph API 实现频道消息固定与取消固定。 """ from __future__ import annotations from typing import Any, TYPE_CHECKING if TYPE_CHECKING: from .graph import GraphClient from yuxi.utils.logging_config import logger async def pin_message( client: GraphClient, team_id: str, channel_id: str, message_id: str, ) -> dict[str, Any]: path = f"/teams/{team_id}/channels/{channel_id}/messages/{message_id}" result = await client._request_with_retry("POST", path) if "error" not in result: logger.info(f"MSTeams message pinned: {message_id} in channel {channel_id}") return result async def unpin_message( client: GraphClient, team_id: str, channel_id: str, message_id: str, ) -> dict[str, Any]: path = f"/teams/{team_id}/channels/{channel_id}/messages/{message_id}/undoSoftDelete" result = await client._request_with_retry("POST", path) if "error" not in result: logger.info(f"MSTeams message unpinned: {message_id}") return result async def get_pinned_messages( client: GraphClient, team_id: str, channel_id: str, ) -> list[dict[str, Any]]: path = f"/teams/{team_id}/channels/{channel_id}/pinnedMessages" params = {"$expand": "message"} result = await client._get(path, params=params) if "error" in result: return [] return result.get("value", [])