import logging from typing import Any from yuxi.channel.extensions.signal.client import SignalRpcClient logger = logging.getLogger(__name__) async def list_groups(client: SignalRpcClient, *, account: str | None = None) -> list[dict]: result = await client.call("listGroups", account=account) if isinstance(result, list): return result if isinstance(result, dict): return result.get("groups", []) return [] async def get_group(client: SignalRpcClient, group_id: str, *, account: str | None = None) -> dict: return await client.call("getGroup", {"groupId": group_id}, account=account) async def update_group( client: SignalRpcClient, group_id: str, *, name: str | None = None, description: str | None = None, avatar: str | None = None, add_members: list[str] | None = None, remove_members: list[str] | None = None, admins: list[str] | None = None, banned: list[str] | None = None, reset_link: bool = False, link: str | None = None, permissions: dict | None = None, expiration: int | None = None, account: str | None = None, ) -> None: params: dict[str, Any] = {"groupId": group_id} if name is not None: params["name"] = name if description is not None: params["description"] = description if avatar is not None: params["avatar"] = avatar if add_members: params["addMember"] = add_members if remove_members: params["removeMember"] = remove_members if admins: params["admin"] = admins if banned: params["ban"] = banned if reset_link: params["resetLink"] = True if link is not None: params["link"] = link if permissions: params["permissions"] = permissions if expiration is not None: params["expiration"] = expiration if account: params["account"] = account await client.call("updateGroup", params, account=account) async def join_group(client: SignalRpcClient, invite_link: str, *, account: str | None = None) -> None: params: dict[str, Any] = {"uri": invite_link} if account: params["account"] = account await client.call("joinGroup", params, account=account) async def quit_group(client: SignalRpcClient, group_id: str, *, account: str | None = None) -> None: params: dict[str, Any] = {"groupId": group_id} if account: params["account"] = account await client.call("quitGroup", params, account=account)