66 lines
1.7 KiB
Python
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} |