# Erebus IRC bot - Author: John Runyon
# main startup code
-#TODO: tons
-
-import os, sys, select, MySQLdb, MySQLdb.cursors, time
+import os, sys, select, MySQLdb, MySQLdb.cursors, time, random
import bot, config, ctlmod
class Erebus(object):
+ APIVERSION = 1
+ RELEASE = 0
+
bots = {}
fds = {}
numhandlers = {}
self.chans = []
+ def msg(self, *args, **kwargs):
+ main.randbot.msg(self, *args, **kwargs)
+
def isauthed(self):
return self.auth is not None
def quit(self):
for chan in self.chans:
self.chans.remove(chan)
+ def nickchange(self, newnick):
+ self.nick = newnick
def __str__(self): return self.nick
def __repr__(self): return "<User %r (%d)>" % (self.nick,self.glevel)
row = c.fetchone()
+ def msg(self, *args, **kwargs):
+ self.bot.msg(self.name, *args, **kwargs)
+
def levelof(self, auth):
+ if auth is None:
+ return 0
auth = auth.lower()
if auth in self.levels:
return self.levels[auth]
def __str__(self): return self.name
def __repr__(self): return "<Channel %r>" % (self.name)
- def __init__(self, trigger):
- self.trigger = trigger
+ def __init__(self, cfg):
+ self.cfg = cfg
+ self.trigger = cfg.trigger
if os.name == "posix":
self.potype = "poll"
self.po = select.poll()
self.potype = "select"
self.fdlist = []
- def newbot(self, nick, user, bind, server, port, realname):
+ def newbot(self, nick, user, bind, authname, authpass, server, port, realname):
if bind is None: bind = ''
- obj = bot.Bot(self, nick, user, bind, server, port, realname)
+ obj = bot.Bot(self, nick, user, bind, authname, authpass, server, port, realname)
self.bots[nick.lower()] = obj
def newfd(self, obj, fileno):
def fd(self, fileno): #get Bot() by fd/fileno
return self.fds[fileno]
def randbot(self): #get Bot() randomly
- for b in self.bots.itervalues(): return b #TODO
+ return self.bots[random.choice(self.bots.keys())]
def user(self, _nick, justjoined=False):
nick = _nick.lower()
class MyCursor(MySQLdb.cursors.DictCursor):
def execute(self, *args, **kwargs):
- print "[SQL] [#] MyCursor.execute(self, %s, %s)" % (', '.join([repr(i) for i in args]), ', '.join([str(key)+"="+repr(kwargs[key]) for key in kwargs]))
+ print "%05.3f [SQL] [#] MyCursor.execute(self, %s, %s)" % (time.time() % 100000, ', '.join([repr(i) for i in args]), ', '.join([str(key)+"="+repr(kwargs[key]) for key in kwargs]))
try:
super(self.__class__, self).execute(*args, **kwargs)
except MySQLdb.MySQLError as e:
- print "[SQL] [!] MySQL error! %r" % (e)
+ print "%05.3f [SQL] [!] MySQL error! %r" % (time.time() % 100000, e)
dbsetup()
return False
return True
global cfg, main
cfg = config.Config('bot.config')
- main = Erebus(cfg.trigger)
+ main = Erebus(cfg)
autoloads = [mod for mod, yes in cfg.items('autoloads') if int(yes) == 1]
for mod in autoloads:
- print "Loading %s" % (mod)
ctlmod.load(main, mod)
dbsetup()
c = main.db.cursor()
- if c.execute("SELECT nick, user, bind FROM bots WHERE active = 1"):
+ if c.execute("SELECT nick, user, bind, authname, authpass FROM bots WHERE active = 1"):
rows = c.fetchall()
c.close()
for row in rows:
- main.newbot(row['nick'], row['user'], row['bind'], cfg.host, cfg.port, cfg.realname)
+ main.newbot(row['nick'], row['user'], row['bind'], row['authname'], row['authpass'], cfg.host, cfg.port, cfg.realname)
main.connectall()
def loop():