| 93 | messages: deque = field(default_factory=lambda: deque(maxlen=_SESSION_RING)) |
| 94 | |
| 95 | def to_dict(self) -> Dict[str, Any]: |
| 96 | return { |
| 97 | 'client_ip': self.client_ip, |
| 98 | 'server_ip': self.server_ip, |
| 99 | 'server_port': self.server_port, |
| 100 | 'first_seen': datetime.fromtimestamp(self.first_seen).isoformat(), |
| 101 | 'last_seen': datetime.fromtimestamp(self.last_seen).isoformat(), |
| 102 | 'nick': self.nick, |
| 103 | 'user': self.user, |
| 104 | 'channels': sorted(self.channels), |
| 105 | 'server_banner': self.server_banner[:8], |
| 106 | 'cmd_counts': dict(self.cmd_counts), |
| 107 | 'recent_messages': [m.to_dict() for m in list(self.messages)[-25:]], |
| 108 | } |
| 109 | |
| 110 | |
| 111 | def parse_irc_line(line: str) -> Optional[Tuple[str, str, List[str]]]: |