X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/db50981b8ba6000a52d4dd5e867d6e54e62c061e..d1ea29460cb89ae52cad1c26f5f95b82d9b21320:/erebus.py diff --git a/erebus.py b/erebus.py index 421d301..f8c7143 100644 --- a/erebus.py +++ b/erebus.py @@ -1,5 +1,8 @@ #!/usr/bin/python +# Erebus IRC bot - Author: John Runyon +# main startup code + #TODO: tons import os, sys, select, MySQLdb, MySQLdb.cursors @@ -10,6 +13,8 @@ class Erebus(object): fds = {} mods = {} msghandlers = {} + users = {} + chans = {} class User(object): chans = [] @@ -17,18 +22,31 @@ class Erebus(object): def __init__(self, nick, auth=None): self.nick = nick self.auth = auth + self.checklevel() - if auth is not None: - self.checklevel() + def isauthed(self): + return self.auth is not None def authed(self, auth): + if auth == '0': auth = None self.auth = auth self.checklevel() - def checklevel(self): self.level = 9999 #TODO get level from db + def checklevel(self): + if self.auth is None: + self.glevel = -1 + else: + c = main.db.cursor() + c.execute("SELECT level FROM users WHERE auth = %s", (self.auth,)) + row = c.fetchone() + if row is not None: + self.glevel = row['level'] + else: + self.glevel = 0 + return self.glevel def __str__(self): return self.nick - def __repr__(self): return "" % (self.nick) + def __repr__(self): return "" % (self.nick,self.glevel) class Channel(object): users = [] @@ -59,7 +77,8 @@ class Erebus(object): def __str__(self): return self.name def __repr__(self): return "" % (self.name) - def __init__(self): + def __init__(self, trigger): + self.trigger = trigger if os.name == "posix": self.potype = "poll" self.po = select.poll() @@ -84,8 +103,14 @@ class Erebus(object): def fd(self, fileno): #get Bot() by fd/fileno return self.fds[fileno] - def user(self, nick): #TODO #get User() by nick - return self.User(nick.lower()) + def user(self, nick): + nick = nick.lower() + if nick in self.users: + return self.users[nick] + else: + user = self.User(nick) + self.users[nick] = user + return user def channel(self, name): #TODO #get Channel() by name return self.Channel(name.lower()) @@ -100,16 +125,8 @@ class Erebus(object): if bot.conn.state == 0: bot.connect() - #module functions - def modlist(self): pass - def hasmod(self, name): pass - def loadmod(self, name): pass - def unloadmod(self, name): pass - def reloadmod(self, name): pass - #bind functions def hook(self, word, handler): - print "hooked %r to %r" % (word, handler) self.msghandlers[word] = handler def unhook(self, word): del self.msghandlers[word] @@ -122,7 +139,7 @@ def setup(): global cfg, main cfg = config.Config('bot.config') - main = Erebus() + main = Erebus(cfg.trigger) autoloads = [mod for mod, yes in cfg.items('autoloads') if int(yes) == 1] for mod in autoloads: @@ -144,7 +161,8 @@ def setup(): def loop(): poready = main.poll() for fileno in poready: - main.fd(fileno).getdata() + for line in main.fd(fileno).getdata(): + main.fd(fileno).parse(line) if __name__ == '__main__': setup()