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