新增 IRC 渠道的完整扩展实现,包括客户端连接管理、消息收发与流式处理、安全策略与配对验证、消息去重与规范化、状态监控与健康探测、配置模型与账户管理、错误处理等模块。
58 lines
2.0 KiB
Python
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 |