ForcePilot/backend/package/yuxi/channel/extensions/irc/status.py
Kris 061cc7076b feat(channel): 添加 IRC 渠道扩展插件
新增 IRC 渠道的完整扩展实现,包括客户端连接管理、消息收发与流式处理、安全策略与配对验证、消息去重与规范化、状态监控与健康探测、配置模型与账户管理、错误处理等模块。
2026-05-21 10:59:12 +08:00

58 lines
2.0 KiB
Python

import time
from yuxi.channel.extensions.irc.types import IrcProbe
def build_irc_status_summary(snapshot: object) -> dict:
if snapshot is None:
return {
"channel": "irc",
"account_id": "default",
"connected": False,
}
has_states = hasattr(snapshot, "_states") or hasattr(snapshot, "states")
if not has_states:
return {
"channel": getattr(snapshot, "channel_type", "irc"),
"account_id": getattr(snapshot, "account_id", "default"),
"connected": getattr(snapshot, "connected", False),
"host": getattr(snapshot, "host", ""),
"nick": getattr(snapshot, "nick", ""),
"probe": None,
"last_probe_at": None,
"last_inbound_at": None,
"last_outbound_at": None,
}
states = getattr(snapshot, "_states", None) or getattr(snapshot, "states", {})
if not states:
return {"channel": "irc", "connected": False}
summaries = {}
for account_id, state in states.items():
probe = getattr(state, "probe", None)
probe_dict = None
if isinstance(probe, IrcProbe):
probe_dict = {
"ok": probe.ok,
"host": probe.host,
"port": probe.port,
"tls": probe.tls,
"nick": probe.nick,
"latency_ms": probe.latency_ms,
"error": probe.error,
}
summaries[account_id] = {
"channel": "irc",
"account_id": account_id,
"host": getattr(state, "host", ""),
"nick": getattr(state, "nick", ""),
"connected": getattr(state, "connected", False),
"probe": probe_dict,
"last_probe_at": getattr(state, "last_probe_at", None),
"last_inbound_at": getattr(state, "last_inbound_at", None),
"last_outbound_at": getattr(state, "last_outbound_at", None),
"error": getattr(state, "error", None),
}
return summaries