From 560c6715e1e129e151f2ec33c43714de93659007 Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Wed, 26 Nov 2025 12:19:29 +0100 Subject: [PATCH] MOTD Formatting --- src/main.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main.py b/src/main.py index d76b9a2..44b5b4d 100644 --- a/src/main.py +++ b/src/main.py @@ -88,6 +88,8 @@ class IRCFrame(wx.Frame): wx.Colour(139, 0, 0), # Dark red ] self.color_index = 0 + self.motd_lines = [] + self.collecting_motd = False self.setup_irc_handlers() self.create_menubar() @@ -453,6 +455,9 @@ class IRCFrame(wx.Frame): self.reactor.add_global_handler("whoisuser", self.on_whoisuser) self.reactor.add_global_handler("whoischannels", self.on_whoischannels) self.reactor.add_global_handler("whoisserver", self.on_whoisserver) + self.reactor.add_global_handler("375", self.on_motd_start) + self.reactor.add_global_handler("372", self.on_motd_line) + self.reactor.add_global_handler("376", self.on_motd_end) except Exception as e: logger.error(f"Error setting up IRC handlers: {e}") @@ -460,7 +465,9 @@ class IRCFrame(wx.Frame): """Catch-all handler to log ALL server events in the Server tab""" try: # Don't log certain very frequent events to avoid spam - if event.type in ("pubmsg", "privmsg", "action"): + noisy_events = {"pubmsg", "privmsg", "action", "motd", "motdstart", "motdend", "375", "372", "376"} + event_type = event.type.lower() if isinstance(event.type, str) else event.type + if event_type in noisy_events: return # Format the raw event for display @@ -1199,6 +1206,44 @@ COMMANDS (type /help in chat for full list): self.log_server(f"-{nick}- {message}", wx.Colour(128, 0, 128), italic=True) # Dark purple for notices except Exception as e: logger.error(f"Error in notice handler: {e}") + + def on_motd_start(self, connection, event): + """Handle numeric 375 — start of MOTD.""" + try: + self.collecting_motd = True + self.motd_lines = [] + headline = event.arguments[-1] if event.arguments else "Message of the Day" + self.log_server(f"MOTD begins: {headline}", wx.Colour(0, 0, 128), bold=True) + except Exception as e: + logger.error(f"Error in MOTD start handler: {e}") + + def on_motd_line(self, connection, event): + """Handle numeric 372 — each MOTD line.""" + try: + if not self.collecting_motd: + self.collecting_motd = True + self.motd_lines = [] + if event.arguments: + raw_line = event.arguments[-1] + cleaned = raw_line.lstrip("- ").rstrip() + if cleaned: + self.motd_lines.append(cleaned) + except Exception as e: + logger.error(f"Error in MOTD line handler: {e}") + + def on_motd_end(self, connection, event): + """Handle numeric 376 — end of MOTD.""" + try: + if self.motd_lines: + panel = self.channels.get("SERVER") + if panel: + for line in self.motd_lines: + panel.add_system_message(f" {line}", wx.Colour(70, 70, 70)) + self.log_server("End of MOTD", wx.Colour(0, 0, 128)) + self.collecting_motd = False + self.motd_lines = [] + except Exception as e: + logger.error(f"Error in MOTD end handler: {e}") def on_disconnect(self, connection, event): try: