import re, configparser, os @plugin class Karma(object): def __init__(self, server): self.server = server self.prnt = server.prnt self.commands = [ "karma", "points" ] self.server.handle("message", self.handle_message) self.server.handle("command", self.handle_command, self.commands) self.userpoints = { } self.karmadbfile = self.server.config["confdir"] + "karma.cfg" self.karma_re = re.compile("^.+(\+\+|\-\-).*$") self.configParser = configparser.RawConfigParser() if os.path.isfile(self.karmadbfile): self.configParser.read(self.karmadbfile) if self.configParser.has_section(self.server.config["network"]): for user,pts in self.configParser.items(self.server.config["network"]): self.userpoints[user] = int(pts) def destroy(self): self.configParser = configparser.RawConfigParser() if os.path.isfile(self.karmadbfile): self.configParser.read(self.karmadbfile) network = self.server.config["network"] if not self.configParser.has_section(network): self.configParser.add_section(network) for user,pts in list(self.userpoints.items()): self.configParser.set(network,user,str(pts)) fh = open(self.karmadbfile, "w") self.configParser.write(fh) fh.close() def handle_command(self, channel, user, cmd, args): if len(args) < 1: self.server.doMessage(channel, user+": Displays the amount of karma a user has. Usage: karma <nickname>") return if cmd == "karma" or cmd == "points": nick = args[0].lower() if self.userpoints.get(nick, None) is None: self.userpoints[nick] = 0 self.server.doMessage(channel, user+": "+args[0]+" has "+str(self.userpoints[nick])+" points.") def handle_message(self, channel, user, message): if self.karma_re.match(message): ulist = [u for u in message.split(";") if u != ''] addlist = [u[:-2].strip(" ") for u in ulist if u.endswith("++")] sublist = [u[:-2].strip(" ") for u in ulist if u.endswith("--")] for nick in addlist: lnick = nick.lower() if self.userpoints.get(lnick, None) is None: self.userpoints[lnick] = 1 else: total = self.userpoints[lnick] + 1 self.userpoints[lnick] = total for nick in sublist: lnick = nick.lower() if self.userpoints.get(lnick, None) is None: self.userpoints[lnick] = -1 else: total = self.userpoints[lnick] - 1 self.userpoints[lnick] = total