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())
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
#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):
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)
#TODO: tons
-import os, sys, select
-import bot
+import os, sys, select, MySQLdb, MySQLdb.cursors
+import bot, config
class Erebus(object):
bots = {}
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)
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()