diff --git a/cloudbot.py b/cloudbot.py index 1bf8987..3a0d3e5 100644 --- a/cloudbot.py +++ b/cloudbot.py @@ -8,7 +8,7 @@ import signal # set up enviroment os.chdir(sys.path[0] or '.') # do stuff relative to the install directory -print 'CloudBot REFRESH ' +print 'CloudBot2 ' def exit_gracefully(signum, frame): cloudbot.stop() @@ -23,5 +23,3 @@ cloudbot.logger.debug("Bot initalized, starting main loop.") while cloudbot.running: cloudbot.loop() - -cloudbot.logger.debug("Stopped main loop.") diff --git a/core/bot.py b/core/bot.py index 25e3ad7..238d4f8 100644 --- a/core/bot.py +++ b/core/bot.py @@ -13,6 +13,32 @@ def clean_name(n): """strip all spaces and capitalization""" return re.sub('[^A-Za-z0-9_]+', '', n.replace(" ", "_")) +def get_logger(self): + """create and return a new logger object""" + # create logger + logger = logging.getLogger("cloudbot") + logger.setLevel(logging.DEBUG) + + # add a file handler + log_name = "bot.log" + fh = logging.FileHandler(log_name) + fh.setLevel(logging.DEBUG) + + # stdout handler + sh = logging.StreamHandler() + sh.setLevel(logging.INFO) + + # create a formatter and set the formatter for the handler. + frmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') + fh.setFormatter(frmt) + simple_frmt = logging.Formatter('[%(levelname)s] %(message)s') + sh.setFormatter(simple_frmt) + + # add the Handlers to the logger + logger.addHandler(fh) + logger.addHandler(sh) + return logger + class Bot(object): def __init__(self): @@ -34,35 +60,6 @@ class Bot(object): self.loader = loader.PluginLoader(self) - def stop(self, reason=None): - """quits all networks and shuts the bot down""" - self.logger.info("Stopping bot.") - self.running = False - - # wait for the bot loop to stop - time.sleep(1) - self.config.observer.stop() - self.logger.debug("Stopping config reloader.") - - self.loader.stop() - self.logger.debug("Stopping plugin loader.") - - for name, connection in self.connections.iteritems(): - # TODO: end connections properly - self.logger.debug("({}) Closing connection.".format(name)) - - if reason: - connection.cmd("QUIT", [reason]) - else: - connection.cmd("QUIT") - - connection.stop() - - self.logger.debug("Logging engine stopped") - logging.shutdown() - sys.exit() - - def loop(self): """recieves input from the IRC engine and processes it""" @@ -78,6 +75,24 @@ class Bot(object): time.sleep(.1) + def setup(self): + """create the logger and config objects""" + # logging + self.logger = get_logger() + self.logger.debug("Logging engine started.") + + # data folder + self.data_dir = os.path.abspath('data') + if not os.path.exists(self.data_dir): + self.logger.debug("Data folder not found, creating.") + os.mkdir(self.data_dir) + self.logger.debug("Created data folder.") + + # config + self.config = config.Config(self.logger) + self.logger.debug("Config object created.") + + def connect(self): """connect to all the networks defined in the bot config""" for conf in self.config['connections']: @@ -97,49 +112,33 @@ class Bot(object): else: self.connections[name] = irc.IRC(name, server, nick, conf = conf, port = port, channels = conf['channels']) - self.logger.debug("({}) Created connection.".format(name)) + self.logger.debug("({}) Created connection.".format(name)) - def setup(self): - """create the logger and config objects""" - # logging - self.logger = self.new_logger() - self.logger.debug("Logging engine started.") + def stop(self, reason=None): + """quits all networks and shuts the bot down""" + self.logger.info("Stopping bot.") + self.running = False - # data folder - self.data_dir = os.path.abspath('data') - if not os.path.exists(self.data_dir): - self.logger.debug("Data folder not found, creating.") - os.mkdir(self.data_dir) - self.logger.debug("Created data folder.") + # wait for the bot loop to stop + time.sleep(1) + self.config.observer.stop() + self.logger.debug("Stopping config reloader.") - # config - self.config = config.Config(self.logger) - self.logger.debug("Config object created.") + self.loader.stop() + self.logger.debug("Stopping plugin loader.") + for name, connection in self.connections.iteritems(): + self.logger.debug("({}) Closing connection.".format(name)) - def new_logger(self): - """create and return a new logger object""" - # create logger - logger = logging.getLogger("cloudbot") - logger.setLevel(logging.DEBUG) + if reason: + connection.cmd("QUIT", [reason]) + else: + connection.cmd("QUIT") - # add a file handler - log_name = "bot.log" - fh = logging.FileHandler(log_name) - fh.setLevel(logging.DEBUG) + connection.stop() - # stdout handler - sh = logging.StreamHandler() - sh.setLevel(logging.INFO) + self.logger.debug("Logging engine stopped") + logging.shutdown() + sys.exit() - # create a formatter and set the formatter for the handler. - frmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') - fh.setFormatter(frmt) - simple_frmt = logging.Formatter('[%(levelname)s] %(message)s') - sh.setFormatter(simple_frmt) - - # add the Handlers to the logger - logger.addHandler(fh) - logger.addHandler(sh) - return logger diff --git a/core/irc.py b/core/irc.py index 1e9d8b5..fe4a996 100755 --- a/core/irc.py +++ b/core/irc.py @@ -105,7 +105,7 @@ class SendThread(threading.Thread): def run(self): while not self.shutdown: line = self.output_queue.get().splitlines()[0][:500] - print u"[{}]> {}".format(self.conn_name.upper(), line) + print u"[{}]: {}".format(self.conn_name, line) self.output_buffer += line.encode('utf-8', 'replace') + '\r\n' while self.output_buffer: sent = self.socket.send(self.output_buffer)