ForcePilot/backend/package/yuxi/channels/adapters/whatsapp/directory.py
Kris e9b57546ea feat(whatsapp): 新增WhatsApp适配器完整功能模块
新增大量WhatsApp适配器相关代码,包括账号管理、会话处理、消息收发、验证授权、媒体处理、互动命令、审批流程、健康检测等完整功能模块,搭建基础的Baileys协议WhatsApp接入能力
2026-05-12 00:51:58 +08:00

65 lines
2.1 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any
@dataclass
class GroupEntry:
group_id: str
enabled: bool = True
require_mention: bool = False
tools: list[str] | None = None
system_prompt: str | None = None
@classmethod
def from_config(cls, group_id: str, config: dict[str, Any]) -> GroupEntry:
if isinstance(config, bool):
return cls(group_id=group_id, enabled=config)
if isinstance(config, dict):
return cls(
group_id=group_id,
enabled=config.get("enabled", True),
require_mention=config.get("requireMention", False),
tools=config.get("tools"),
system_prompt=config.get("systemPrompt"),
)
return cls(group_id=group_id)
@dataclass
class PerGroupConfig:
entries: dict[str, GroupEntry] = field(default_factory=dict)
@classmethod
def from_config(cls, config: dict) -> PerGroupConfig:
groups_cfg = config.get("groups", {})
entries = {}
if isinstance(groups_cfg, dict):
for gid, gcfg in groups_cfg.items():
entries[gid] = GroupEntry.from_config(gid, gcfg)
return cls(entries=entries)
def get(self, group_jid: str) -> GroupEntry | None:
jid_base = group_jid.split("@")[0] if "@" in group_jid else group_jid
for key, entry in self.entries.items():
if key == jid_base or key == group_jid:
return entry
return None
def is_enabled(self, group_jid: str) -> bool:
entry = self.get(group_jid)
return entry.enabled if entry else True
def require_mention(self, group_jid: str) -> bool:
entry = self.get(group_jid)
return entry.require_mention if entry else False
def allowed_tools(self, group_jid: str) -> list[str] | None:
entry = self.get(group_jid)
return entry.tools if entry else None
def system_prompt(self, group_jid: str) -> str | None:
entry = self.get(group_jid)
return entry.system_prompt if entry else None