コード例 #1
0
ファイル: loadable.py プロジェクト: berten/merlin
 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")
コード例 #2
0
ファイル: adduser.py プロジェクト: davesherratt/merlin
    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"))
コード例 #3
0
ファイル: adduser.py プロジェクト: davesherratt/merlin
 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
コード例 #4
0
    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
コード例 #5
0
 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
コード例 #6
0
    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))
コード例 #7
0
ファイル: prop.py プロジェクト: davesherratt/merlin
    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()