MOTD Formatting
This commit is contained in:
47
src/main.py
47
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
|
||||
@@ -1200,6 +1207,44 @@ COMMANDS (type /help in chat for full list):
|
||||
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:
|
||||
self.log_server("Disconnected from server", wx.Colour(255, 0, 0), bold=True) # Red for disconnect
|
||||
|
||||
Reference in New Issue
Block a user