import irc.client from irc.client import NickMask from edmond.log import Logger class Bot(irc.client.SimpleIRCClient, Logger): def __init__(self, config, logger): super().__init__() self.config = config self.logger = logger @property def nick(self): return self.config["nick"] def on_welcome(self, connection, event): self.log_i(f"Connected to server {event.source}.") for channel in self.config["channels"]: connection.join(channel) def on_join(self, connection, event): self.log_i(f"Joined {event.target}.") def on_part(self, connection, event): self.log_i(f"Left {event.target} (args: {event.arguments[0]}).") def on_pubmsg(self, connection, event): channel = event.target nick = NickMask(event.source).nick message = event.arguments[0] self.log_d(f"Message in {channel} from {nick}: {message}") def on_privmsg(self, connection, event): nick = NickMask(event.source).nick target = event.target message = event.arguments[0] self.log_d(f"Private message from {nick} to {target}: {message}") def run(self): self.log_i("Starting Edmond.") self.connect(self.config["host"], self.config["port"], self.nick) try: self.start() except KeyboardInterrupt: self.log_i("Stopping Edmond.")