ForcePilot/backend/package/yuxi/channel/extensions/googlechat/reactions.py
Kris c4e301a5e0 feat(googlechat): 新增Google Chat渠道完整实现
新增Google Chat插件的所有核心功能模块,包括账户配置、消息收发、权限控制、媒体处理、会话管理等完整能力
2026-05-21 10:49:33 +08:00

66 lines
1.7 KiB
Python

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}