新增 Signal 渠道扩展,支持在 Yuxi 平台中集成 Signal 加密即时通讯渠道。 包含以下功能模块: - client: Signal 客户端封装 - daemon: signald 守护进程管理 - config_schema: 配置模式 - send: 消息发送 - accounts: 账户管理 - account_management: 账户综合管理 - access_policy: 访问策略 - identity: 身份管理 - profiles: 用户资料 - groups: 群组管理 - format: 消息格式转换 - normalize: 消息规范化 - dedupe: 消息去重 - monitor: 渠道状态监控 - probe: 健康探测 - sse_reconnect: SSE 重连机制
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
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)
|