ForcePilot/backend/package/yuxi/channel/extensions/signal/groups.py
Kris 6713dc2d0d feat(channel): 添加 Signal 渠道扩展
新增 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 重连机制
2026-05-21 11:41:55 +08:00

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)