From: zonidjan Date: Tue, 26 Nov 2013 20:59:07 +0000 (-0600) Subject: Added DB usage, fixed error in config.py, added __str__ __repr__ to Bot, BotConnection X-Git-Url: https://jfr.im/git/erebus.git/commitdiff_plain/a12f751981461907aad0ca4491b07a3866a8a938?ds=sidebyside Added DB usage, fixed error in config.py, added __str__ __repr__ to Bot, BotConnection --- diff --git a/bot.py b/bot.py index 257e3db..50456b5 100644 --- a/bot.py +++ b/bot.py @@ -9,9 +9,11 @@ class Bot(object): def __init__(self, parent, nick, user, bind, server, port, realname, chans): self.parent = parent self.nick = nick + self.user = user + self.realname = realname self.chans = chans - self.conn = BotConnection(self, nick, user, bind, server, port, realname) + self.conn = BotConnection(self, bind, server, port) def connect(self): if self.conn.connect(): self.parent.newfd(self, self.conn.socket.fileno()) @@ -90,27 +92,27 @@ class Bot(object): def quit(self, reason="Shutdown"): self.conn.send("QUIT :%s" % (reason)) + def __str__(self): return self.nick + def __repr__(self): return "" % (self.nick) + class BotConnection(object): state = 0 # 0=disconnected, 1=registering, 2=connected - def __init__(self, parent, nick, user, bind, server, port, realname): + def __init__(self, parent, bind, server, port): self.parent = parent self.buffer = '' self.socket = None - self.nick = nick - self.user = user self.bind = bind self.server = server self.port = int(port) - self.realname = realname def connect(self): self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.bind((self.bind, 0)) self.socket.connect((self.server, self.port)) - self.send("NICK %s" % (self.nick)) - self.send("USER %s 0 * :%s" % (self.user, self.realname)) + self.send("NICK %s" % (self.parent.nick)) + self.send("USER %s 0 * :%s" % (self.parent.user, self.parent.realname)) self.state = 1 return True @@ -120,7 +122,7 @@ class BotConnection(object): #TODO: rewrite send() to queue def send(self, line): - print self.nick, '[O]', line + print self.parent.nick, '[O]', line self.write(line) def write(self, line): @@ -136,3 +138,6 @@ class BotConnection(object): self.buffer = pieces[1] return lines + + def __str__(self): return self.nick + def __repr__(self): return "" % (self.socket.fileno(), self.parent.nick) diff --git a/config.py b/config.py index c41e806..af470cb 100644 --- a/config.py +++ b/config.py @@ -18,7 +18,7 @@ class Config(object): return self.config.items('erebus') def write(self): - with open(self._filename, 'wb') as configfile: + with open(self.filename, 'wb') as configfile: self.config.write(configfile) def __del__(self): diff --git a/erebus.py b/erebus.py index 31ed1c9..b38820b 100644 --- a/erebus.py +++ b/erebus.py @@ -2,8 +2,8 @@ #TODO: tons -import os, sys, select -import bot +import os, sys, select, MySQLdb, MySQLdb.cursors +import bot, config class Erebus(object): bots = {} @@ -73,7 +73,6 @@ class Erebus(object): self.bots[nick.lower()] = obj def newfd(self, obj, fileno): - print "newfd(Erebus(), %r, %r)" % (obj, fileno) self.fds[fileno] = obj if self.potype == "poll": self.po.register(fileno, select.POLLIN) @@ -114,12 +113,22 @@ class Erebus(object): def rmbind(self, word, handler): pass def getbind(self, word, handler): pass - +cfg = config.Config('bot.config') main = Erebus() def setup(): - main.newbot('Erebus', 'erebus', None, 'irc.quakenet.org', 6667, 'Erebus', ['#dimetest']) - main.bot('erebus').connect() + main.db = MySQLdb.connect(host=cfg.dbhost, user=cfg.dbuser, passwd=cfg.dbpass, db=cfg.dbname, cursorclass=MySQLdb.cursors.DictCursor) + c = main.db.cursor() + c.execute("SELECT nick, user, bind FROM bots WHERE active = 1") + rows = c.fetchall() + c.close() + for row in rows: + c2 = main.db.cursor() + c2.execute("SELECT chname FROM chans WHERE bot = %s AND active = 1", (row['nick'],)) + chans = [chdic['chname'] for chdic in c2.fetchall()] + c2.close() + main.newbot(row['nick'], row['user'], row['bind'], cfg.host, cfg.port, cfg.realname, chans) + main.connectall() def loop(): poready = main.poll()