def check_access(self, user): user = user or User(access=0) if not Config.getboolean("Arthur", "public") and not self.is_user(user): raise UserError("Hi! Please login below:") if getattr(self, "_USER", False) is True: if self.is_user(user) is False: raise UserError("You need to be logged in to use this feature") if user.access >= self.access: return user else: raise UserError("You don't have access to this page")
def execute(self, message, user, params): pnicks = params.group(1) access = params.group(2) if not access.isdigit(): try: access = Config.getint("Access", access) except Exception: message.reply("Invalid access level '%s'" % (access, )) return else: access = int(access) if access > user.access: message.reply( "You may not add a user with higher access to your own") return added = [] exists = [] for pnick in pnicks.split(): if pnick.lower() == Config.get("Connection", "nick").lower(): message.reply("I am already here, shitface.") continue member = User.load(name=pnick, active=False) if member is None: member = User(name=pnick, access=access, sponsor=user.name) session.add(member) added.append(pnick) elif not member.active: member.active = True member.access = access member.sponsor = user.name added.append(pnick) elif not member.is_member(): member.access = access member.sponsor = user.name added.append(pnick) else: exists.append(pnick) session.commit() if len(exists): message.reply("Users (%s) already exist" % (",".join(exists), )) if len(added): message.reply("Added users (%s) at level %s" % (",".join(added), access)) if len(added) and access >= Config.getint("Access", "member"): message.privmsg( "adduser %s %s 24" % ( Config.get("Channels", "home"), ",".join(added), ), Config.get("Services", "nick"))
def check_access(self, message, access=None, user=None, channel=None): try: user = loadable.check_access(self, message, access, user, channel) if not self.is_user(user): raise UserError else: return user except UserError: if message.get_pnick() in Config.options("Admins"): return User(name=Config.get("Connection", "nick"), access=Config.getint("Access", "admin")) else: raise
def get_user(self, name, channel, pnick=None, pnickf=None): # Regular user check if (pnick is None) and (pnickf is None): # This shouldn't happen return None nick = self.Nicks.get(name) if (nick and nick.puser) is not None: # They already have a user associated pnick = nick.puser elif pnickf is not None: # Call the pnick function, might raise PNickParseError try: pnick = pnickf() except PNickParseError: return None user = User.load(name=pnick) if user is None and Config.getboolean("Misc", "autoreg"): if nick and not nick.puser: if "galmate" in Config.options("Access"): access = Config.getint("Access", "galmate") else: access = 0 user = User.load(name=pnick, active=False) if user is None: user = User(name=pnick, access=access) session.add(user) else: user.active = True user.access = access session.commit() if user is None: return None if (nick is not None) and self.mode_is("rapid", "join"): if self.Pusers.get(user.name) is None: # Add the user to the tracker self.Pusers[user.name] = Puser(user.name) if nick.puser is None: # Associate the user and nick nick.puser = user.name self.Pusers[user.name].nicks.add(nick.name) # Return the SQLA User return user
def check_access(self, message, access=None, user=None, channel=None): access = access or self.access if message.in_chan(): channel = channel or Channel.load(message.get_chan()) or Channel( maxlevel=0, userlevel=0) if channel.maxlevel < access and message.reply_type( ) == PUBLIC_REPLY: raise UserError else: channel = Channel(userlevel=0) chan = message.get_chan() if message.in_chan() else None user = user or CUT.get_user( message.get_nick(), chan, pnickf=message.get_pnick) if self.is_user(user): if max(user.access, channel.userlevel) >= access: return user else: raise UserError else: if channel.userlevel >= access: return User() elif message.get_pnick(): raise UserError
def execute(self, message, user, params): pnick = params.group(1) if "galmate" in Config.options("Access"): access = Config.getint("Access", "galmate") else: access = 0 member = User.load(name=pnick, active=False) if member is None: member = User(name=pnick, access=access) session.add(member) elif not member.active: member.active = True member.access = access elif member.access < access: member.access = access else: message.reply("User %s already exists" % (pnick, )) return session.commit() message.reply("Added user %s at level %s" % (pnick, access))
def expire(self, message, user, params): id = params.group(1) prop = self.load_prop(id) if prop is None: message.reply("No proposition number %s exists (idiot)." % (id, )) return if not prop.active: message.reply("You can't expire prop %d, it's already expired." % (prop.id, )) return if prop.proposer is not user and not user.is_admin(): message.reply("Only %s may expire proposition %d." % (prop.proposer.name, prop.id)) return if prop.type == "invite" and not self.member_count_below_limit(): message.reply( "You have tried to invite somebody, but we have too many losers and I can't be bothered dealing with more than %s of you." % (Config.getint("Alliance", "members"), )) return self.recalculate_carebears(prop) yes, no, veto = self.sum_votes(prop) passed = yes > no and veto <= 0 vote_result = ['no', 'yes'][passed] reply = self.text_result(vote_result, yes, no, veto) reply += self.text_summary(prop) message.reply(reply) if prop.type == "invite" and passed: pnick = prop.person access = Config.getint("Access", "member") member = User.load(name=pnick, active=False) if member is None: member = User(name=pnick, access=access, sponsor=prop.proposer.name) session.add(member) elif not member.active: member.active = True member.access = access member.sponsor = prop.proposer.name elif not member.is_member(): member.access = access member.sponsor = prop.proposer.name message.privmsg( "adduser %s %s 24" % ( Config.get("Channels", "home"), pnick, ), Config.get("Services", "nick")) message.reply( "%s has been added to %s and given member level access to me." % (pnick, Config.get("Channels", "home"))) if prop.type == "kick" and passed: idiot = prop.kicked if "galmate" in Config.options("Access"): idiot.access = Config.getint("Access", "galmate") else: idiot.access = 0 if idiot.planet is not None and idiot.planet.intel is not None: intel = idiot.planet.intel alliance = Alliance.load(Config.get("Alliance", "name")) if intel.alliance == alliance: intel.alliance = None message.privmsg( "remuser %s %s" % ( Config.get("Channels", "home"), idiot.name, ), Config.get("Services", "nick")) # message.privmsg("ban %s *!*@%s.%s Your sponsor doesn't like you anymore"%(Config.get("Channels","home"), idiot.name, Config.get("Services", "usermask"),),Config.get("Services", "nick")) message.privmsg( "note send %s A proposition to kick you from %s has been raised by %s with reason '%s' and passed by a vote of %s to %s." % (idiot.name, Config.get("Alliance", "name"), prop.proposer.name, prop.comment_text, yes, no), Config.get("Services", "nick")) message.reply( "%s has been reduced to \"galmate\" level and removed from the channel." % (idiot.name, )) if prop.type == "suggestion" and passed: message.reply("Suggestion \"%s\" has passed" % (prop.comment_text)) prop.active = False prop.closed = current_timestamp() prop.vote_result = vote_result session.commit()