X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/676b2a8513b7f595d987e3124a831ea2e17b29d5..d1ea29460cb89ae52cad1c26f5f95b82d9b21320:/erebus.py diff --git a/erebus.py b/erebus.py index 6e1289e..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,34 +13,40 @@ class Erebus(object): fds = {} mods = {} msghandlers = {} + users = {} + chans = {} class User(object): chans = [] def __init__(self, nick, auth=None): self.nick = nick - self.auth = nick #TEMP + self.auth = auth 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): if self.auth is None: - self.level = -1 + 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.level = row['level'] + self.glevel = row['level'] else: - self.level = 0 - return self.level + self.glevel = 0 + return self.glevel def __str__(self): return self.nick - def __repr__(self): return "" % (self.nick,self.level) + def __repr__(self): return "" % (self.nick,self.glevel) class Channel(object): users = [] @@ -68,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() @@ -93,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()) @@ -109,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] @@ -131,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: @@ -153,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()