Tweaked and tidied
This commit is contained in:
parent
e6318fe725
commit
eb4620e1d6
3 changed files with 67 additions and 70 deletions
|
@ -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 <http://git.io/cloudbotirc>'
|
||||
print 'CloudBot2 <http://git.io/cloudbotirc>'
|
||||
|
||||
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.")
|
||||
|
|
131
core/bot.py
131
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
|
||||
|
|
|
@ -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)
|
||||
|
|
Reference in a new issue