diff --git a/cloudbot.py b/cloudbot.py index 946d413..e683d7c 100755 --- a/cloudbot.py +++ b/cloudbot.py @@ -42,6 +42,7 @@ while True: else: if cloudbot.do_restart: # create a new bot thread and start it + del cloudbot cloudbot = bot.Bot() cloudbot.start() continue diff --git a/core/bot.py b/core/bot.py index 25accd4..ba233d1 100644 --- a/core/bot.py +++ b/core/bot.py @@ -45,7 +45,6 @@ def get_logger(): logger.addHandler(sh) return logger - class Bot(threading.Thread): def __init__(self): # basic variables @@ -74,7 +73,6 @@ class Bot(threading.Thread): threading.Thread.__init__(self) - def run(self): """recieves input from the IRC engine and processes it""" self.logger.info("Starting main thread.") @@ -94,7 +92,6 @@ class Bot(threading.Thread): while self.running and all(c.parsed_queue.empty() for c in self.connections): time.sleep(.1) - def setup(self): """create the logger and config objects""" # logging @@ -117,7 +114,6 @@ class Bot(threading.Thread): self.db_session = scoped_session(db_factory) self.logger.debug("Database system initalised.") - def connect(self): """connect to all the networks defined in the bot config""" for conf in self.config['connections']: @@ -130,16 +126,15 @@ class Bot(threading.Thread): self.logger.debug("({}) Creating connection to {}.".format(name, server)) if conf['connection'].get('ssl'): - self.connections.append(irc.SSLIRC(name, server, nick, config = conf, - port = port, channels = conf['channels'], - ignore_certificate_errors=conf['connection'].get('ignore_cert', True))) + self.connections.append(irc.SSLIRC(name, server, nick, config=conf, + port=port, channels=conf['channels'], + ignore_certificate_errors=conf['connection'].get('ignore_cert', True))) self.logger.debug("({}) Created SSL connection.".format(name)) else: - self.connections.append(irc.IRC(name, server, nick, config = conf, - port = port, channels = conf['channels'])) + self.connections.append(irc.IRC(name, server, nick, config=conf, + port=port, channels=conf['channels'])) self.logger.debug("({}) Created connection.".format(name)) - def stop(self, reason=None): """quits all networks and shuts the bot down""" self.logger.info("Stopping bot.") @@ -165,7 +160,6 @@ class Bot(threading.Thread): self.running = False - def restart(self, reason=None): """shuts the bot down and restarts it""" self.do_restart = True diff --git a/core/irc.py b/core/irc.py index caf721f..6e15237 100644 --- a/core/irc.py +++ b/core/irc.py @@ -29,10 +29,10 @@ def censor(text): class ReceiveThread(threading.Thread): """receives messages from IRC and puts them in the input_queue""" - def __init__(self, socket, input_queue, timeout): + def __init__(self, sock, input_queue, timeout): self.input_buffer = "" self.input_queue = input_queue - self.socket = socket + self.socket = sock self.timeout = timeout self.shutdown = False @@ -76,8 +76,8 @@ class ReceiveThread(threading.Thread): class SSLReceiveThread(ReceiveThread): - def __init__(self, socket, input_queue, timeout): - ReceiveThread.Thread.__init__(self, socket, input_queue, timeout) + def __init__(self, sock, input_queue, timeout): + ReceiveThread.__init__(self, sock, input_queue, timeout) def recv_from_socket(self, nbytes): return self.socket.read(nbytes) @@ -94,11 +94,11 @@ class SSLReceiveThread(ReceiveThread): class SendThread(threading.Thread): """sends messages from output_queue to IRC""" - def __init__(self, socket, conn_name, output_queue): + def __init__(self, sock, conn_name, output_queue): self.output_buffer = "" self.output_queue = output_queue self.conn_name = conn_name - self.socket = socket + self.socket = sock self.shutdown = False threading.Thread.__init__(self) @@ -148,11 +148,11 @@ class ParseThread(threading.Thread): lastparam = paramlist[-1] # put the parsed message in the response queue self.parsed_queue.put([msg, prefix, command, params, nick, user, host, - mask, paramlist, lastparam]) + mask, paramlist, lastparam]) # if the server pings us, pong them back if command == "PING": - str = "PONG :" + paramlist[0] - self.output_queue.put(str) + string = "PONG :" + paramlist[0] + self.output_queue.put(string) class IRCConnection(object): @@ -198,7 +198,7 @@ class SSLIRCConnection(IRCConnection): def create_socket(self): return wrap_socket(IRCConnection.create_socket(self), server_side=False, - cert_reqs=CERT_NONE if self.ignore_cert_errors else + cert_reqs=CERT_NONE if self.ignore_cert_errors else CERT_REQUIRED) @@ -229,18 +229,17 @@ class IRC(object): self.set_pass(self.config.get('server_password')) self.set_nick(self.nick) self.cmd("USER", - [self.config.get('user', 'cloudbot'), "3", "*", self.config.get('realname', - 'CloudBot - http://git.io/cloudbot')]) + [self.config.get('user', 'cloudbot'), "3", "*", + self.config.get('realname', 'CloudBot - http://git.io/cloudbot')]) self.parse_thread = ParseThread(self.input_queue, self.output_queue, self.parsed_queue) self.parse_thread.daemon = True self.parse_thread.start() - def create_connection(self): return IRCConnection(self.name, self.server, self.port, - self.input_queue, self.output_queue) + self.input_queue, self.output_queue) def stop(self): self.connection.stop() @@ -280,8 +279,8 @@ class IRC(object): else: self.send(command) - def send(self, str): - self.output_queue.put(str) + def send(self, string): + self.output_queue.put(string) class SSLIRC(IRC): @@ -292,4 +291,4 @@ class SSLIRC(IRC): def create_connection(self): return SSLIRCConnection(self.name, self.server, self.port, self.input_queue, - self.output_queue, self.ignore_cert_errors) + self.output_queue, self.ignore_cert_errors) diff --git a/core/loader.py b/core/loader.py index be0a2c9..4cc7e25 100644 --- a/core/loader.py +++ b/core/loader.py @@ -39,12 +39,10 @@ class PluginLoader(object): self.load_all() - def stop(self): """shuts down the plugin reloader""" self.observer.stop() - def load_all(self): """runs load_file() on all python files in the plugins folder""" files = set(glob.glob(os.path.join(self.path, '*.py'))) @@ -52,7 +50,6 @@ class PluginLoader(object): self.load_file(f, rebuild=True) self.rebuild() - def load_file(self, path, rebuild=False): """loads (or reloads) all valid plugins from a specified file""" filename = os.path.basename(path) @@ -118,7 +115,6 @@ class PluginLoader(object): self.rebuild() - def rebuild(self): """rebuilds the cloudbot command and event hook lists""" self.bot.commands = {} diff --git a/requirements.txt b/requirements.txt index 35e7cfd..976b7e5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +sqlalchemy oauth2 pygeoip tweepy