from __future__ import annotations import logging from yuxi.channel.extensions.googlechat.api import ( create_reaction, delete_reaction, list_reactions, ) from yuxi.channel.extensions.googlechat.types import ResolvedGoogleChatAccount logger = logging.getLogger(__name__) async def add_reaction( account: ResolvedGoogleChatAccount, message_name: str, emoji: str, ) -> dict: return await create_reaction(account, message_name, emoji) async def remove_reaction( account: ResolvedGoogleChatAccount, message_name: str, emoji: str, bot_user: str | None = None, ) -> bool: reactions = await list_reactions(account, message_name) target = None for r in reactions: user = r.get("user", {}) user_name = user.get("name", "") if user_name == "users/app" or (bot_user and user_name == bot_user): if r.get("emoji", {}).get("unicode") == emoji: target = r break if not target: return False await delete_reaction(account, target["name"]) return True async def get_reactions( account: ResolvedGoogleChatAccount, message_name: str, ) -> list[dict]: return await list_reactions(account, message_name) async def execute_react_action( account: ResolvedGoogleChatAccount, message_name: str, emoji: str, remove: bool = False, bot_user: str | None = None, ) -> dict: if remove: removed = await remove_reaction(account, message_name, emoji, bot_user) return {"success": removed, "action": "remove", "emoji": emoji} else: result = await add_reaction(account, message_name, emoji) return {"success": True, "action": "add", "emoji": emoji, "result": result}