]> jfr.im git - erebus.git/commitdiff
Added DB usage, fixed error in config.py, added __str__ __repr__ to Bot, BotConnection
authorzonidjan <redacted>
Tue, 26 Nov 2013 20:59:07 +0000 (14:59 -0600)
committerzonidjan <redacted>
Tue, 26 Nov 2013 20:59:07 +0000 (14:59 -0600)
bot.py
config.py
erebus.py

diff --git a/bot.py b/bot.py
index 257e3dbe061aaef33734b1efcedde9a31462dd7a..50456b5d1cebaf9a6250d06b8f00c1bf690f3c04 100644 (file)
--- 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 "<Bot %r>" % (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 "<BotConnection %r (%r)>" % (self.socket.fileno(), self.parent.nick)
index c41e806bc78da21719d8cc833a2d156a124c5179..af470cb4a63f9f85e8fbf9ffb543d48f8120f8f8 100644 (file)
--- 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):
index 31ed1c966b2d5653f08c0bd5f44632f0fe3123bf..b38820b6fe5cfe2d0020d6dd0995c856c2270173 100644 (file)
--- 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()