From 507c59ad1599712b060dc403ed8ea58796cbb391 Mon Sep 17 00:00:00 2001 From: Luke Rogers Date: Tue, 1 Oct 2013 19:44:32 +1300 Subject: [PATCH] fixed new config engine, moved IRC loading --- cloudbot.py | 36 +++++++----------------------------- core/bot.py | 27 +++++++++++++++++++++++++-- core/config.py | 7 +++---- core/irc.py | 16 ++++++++-------- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/cloudbot.py b/cloudbot.py index 66ba61d..533d56c 100644 --- a/cloudbot.py +++ b/cloudbot.py @@ -6,6 +6,7 @@ import os import Queue import sys import re +import time sys.path += ['plugins', 'lib', 'core'] # add stuff to the sys.path for easy imports os.chdir(sys.path[0] or '.') # do stuff relative to the install directory @@ -14,36 +15,13 @@ print 'CloudBot DEV ' # create new bot object bot = _bot.Bot("cloudbot") - -print 'Begin Plugin Loading.' -print bot.config +bot.logger.debug("Bot initalized.") # bootstrap the reloader eval(compile(open(os.path.join('core', 'reload.py'), 'U').read(), os.path.join('core', 'reload.py'), 'exec')) reload(init=True) -print 'Connecting to IRC...' - -bot.conns = {} -print bot.config - -try: - for name, conf in bot.config['connections'].iteritems(): - # strip all spaces and capitalization from the connection name - name = name.replace(" ", "_") - name = re.sub('[^A-Za-z0-9_]+', '', name) - print 'Connecting to server: %s' % conf['server'] - if conf.get('ssl'): - bot.conns[name] = SSLIRC(name, conf['server'], conf['nick'], conf=conf, - port=conf.get('port', 6667), channels=conf['channels'], - ignore_certificate_errors=conf.get('ignore_cert', True)) - else: - bot.conns[name] = IRC(name, conf['server'], conf['nick'], conf=conf, - port=conf.get('port', 6667), channels=conf['channels']) -except Exception as e: - print 'ERROR: malformed config file', e - sys.exit() bot.persist_dir = os.path.abspath('persist') if not os.path.exists(bot.persist_dir): @@ -53,13 +31,13 @@ print 'Connection(s) made, starting main loop.' while True: reload() # these functions only do things - config() # if changes have occured + # if changes have occured - for conn in bot.conns.itervalues(): + for connection in bot.connections.itervalues(): try: - out = conn.out.get_nowait() - main(conn, out) + out = connection.out.get_nowait() + main(connection, out) except Queue.Empty: pass - while all(conn.out.empty() for conn in bot.conns.itervalues()): + while all(connection.out.empty() for connection in bot.connections.itervalues()): time.sleep(.1) diff --git a/core/bot.py b/core/bot.py index ae987d1..e936d1c 100644 --- a/core/bot.py +++ b/core/bot.py @@ -1,7 +1,13 @@ import time import logging +import re import config +import irc + + +def clean_name(n): return re.sub('[^A-Za-z0-9_]+', '', n.replace(" ", "_")) + class Bot(object): def __init__(self, name): @@ -11,8 +17,25 @@ class Bot(object): # set up config and logging self.setup() - print self.config + # start IRC connections + self.connections = {} + self.connect() + + def connect(self): + + for name, conf in self.config['connections'].iteritems(): + # strip all spaces and capitalization from the connection name + name = clean_name(name) + self.logger.debug("({}) Creating connection.".format(name)) + self.logger.debug("({}) Server: {}".format(name, conf['server'])) + if conf.get('ssl'): + self.connections[name] = irc.SSLIRC(name, conf['server'], conf['nick'], conf=conf, + port=conf.get('port', 6667), channels=conf['channels'], + ignore_certificate_errors=conf.get('ignore_cert', True)) + else: + self.connections[name] = irc.IRC(name, conf['server'], conf['nick'], conf=conf, + port=conf.get('port', 6667), channels=conf['channels']) def setup(self): # logging @@ -21,7 +44,7 @@ class Bot(object): # logging self.config = self.get_config() - self.config.reload() + self.config.load_config() self.logger.debug("Config loaded.") def get_config(self): diff --git a/core/config.py b/core/config.py index 3f6084d..da32ddf 100755 --- a/core/config.py +++ b/core/config.py @@ -7,11 +7,10 @@ class Config(dict): self.path = os.path.abspath("{}.json".format(name)) self.update(*args, **kwargs) - def reload(self): + def load_config(self): with open(self.path) as f: - self = json.load(f) - print self + self.update(json.load(f)) - def save(self): + def save_config(self): pass \ No newline at end of file diff --git a/core/irc.py b/core/irc.py index 4f79045..6cf86ae 100755 --- a/core/irc.py +++ b/core/irc.py @@ -17,13 +17,13 @@ def decode(txt): def censor(text): - text = text.replace('\n', '').replace('\r', '') - replacement = '[censored]' - if 'censored_strings' in bot.config: - if bot.config['censored_strings']: - words = map(re.escape, bot.config['censored_strings']) - regex = re.compile('({})'.format("|".join(words))) - text = regex.sub(replacement, text) + #text = text.replace('\n', '').replace('\r', '') + #replacement = '[censored]' + #if 'censored_strings' in bot.config: + # if bot.config['censored_strings']: + # words = map(re.escape, bot.config['censored_strings']) + # regex = re.compile('({})'.format("|".join(words))) + # text = regex.sub(replacement, text) return text @@ -153,7 +153,7 @@ class IRC(object): self.set_pass(self.conf.get('server_password')) self.set_nick(self.nick) self.cmd("USER", - [conf.get('user', 'cloudbot'), "3", "*", conf.get('realname', + [self.conf.get('user', 'cloudbot'), "3", "*", self.conf.get('realname', 'CloudBot - http://git.io/cloudbot')]) def parse_loop(self):