Exemplo n.º 1
0
	def handler(self, **args):
		""" gives a nick/host mask a privileve """
		from irclib import Event, IrcStringIO
		import database
	
		if checkPriv(args["source"], "list_priv") == 0:
			return Event("privmsg", "", self.return_to_sender(args), [ "You don't have permission to do that." ])
	
		privs = database.doSQL("SELECT priv_type,hostmask FROM grants ORDER BY priv_type,hostmask")
		buffer = IrcStringIO("Privileges List:")
		last = None
		for i in privs:
			if last == i[0]:
				buffer.write(' ' + i[1] + ' ;;')
			else:
				last = i[0]
				buffer.write(' [' + i[0] + '] ' + i[1] + ' ;;')
		return Event("privmsg", "", self.return_to_sender(args), [ buffer.getvalue() ])
Exemplo n.º 2
0
Arquivo: priv.py Projeto: oink/BadGirl
    def handler(self, **args):
        """ gives a nick/host mask a privileve """
        from irclib import Event, IrcStringIO
        import database

        if checkPriv(args["source"], "list_priv") == 0:
            return Event("privmsg", "", self.return_to_sender(args),
                         ["You don't have permission to do that."])

        privs = database.doSQL(
            "SELECT priv_type,hostmask FROM grants ORDER BY priv_type,hostmask"
        )
        buffer = IrcStringIO("Privileges List:")
        last = None
        for i in privs:
            if last == i[0]:
                buffer.write(' ' + i[1] + ' ;;')
            else:
                last = i[0]
                buffer.write(' [' + i[0] + '] ' + i[1] + ' ;;')
        return Event("privmsg", "", self.return_to_sender(args),
                     [buffer.getvalue()])
Exemplo n.º 3
0
    def handler(self, **args):
        from irclib import Event
        import priv

        argv = self.spaces.split((args["text"]).strip())
        # case: ~ab
        if len(argv) < 3:
            cmd = None
            argv = []
            argc = 0
        # case ~ab ...
        else:
            cmd = argv[2].lower()
            argv = argv[3:]
            argc = len(argv)

        reply = None

        channel = self.return_to_sender(args)
        from irclib import nm_to_n
        yournick = nm_to_n(args['source'])
        try:
            from irclib import is_channel
            from ValueModifier import IntValueModifier
            if not is_channel(channel):
                reply = "this is a channel only command"
            elif cmd == "grant":
                if argc != 3:
                    raise StopReply()

                import priv
                nick, ability, score = argv
                try:
                    score = IntValueModifier(score)
                except ValueError:
                    reply = "%s: score must be number" % yournick
                    raise StopReply()

                curscore = self.getUserAbilityScore(nick, channel,
                                                    ability) or 0
                score = score.apply(curscore)
                # normal users?
                if priv.checkPriv(args["source"], "ab_admin_priv") == 0 \
                 and priv.checkPriv(args["source"], "all_priv") == 0:
                    if nick == yournick:
                        reply = "You're so proud, %s" % yournick
                        raise StopReply()
                    yourscore = self.getUserAbilityScore(
                        yournick, channel, ability)
                    # apply rules
                    if not yourscore or yourscore < score:
                        yourscore = self.getUserAbilityScore(
                            yournick, channel, '*')
                        if not yourscore or yourscore < score:
                            reply = "You don't have enough ability score, %s" % yournick
                            raise StopReply()

                    if curscore >= score:
                        reply = "%s's %s ability is %d already" % (
                            nick, ability, curscore)
                        raise StopReply()

                abilityid = self.getAbilityId(ability, True)
                self.setUserAbilityScore(nick, channel, abilityid, score,
                                         yournick)
                reply = "%s's %s ability is set to %d" % (nick, ability, score)
            elif cmd == "despise":
                if argc != 2:
                    raise StopReply()
                ability, score = argv
                try:
                    score = IntValueModifier(score)
                except ValueError:
                    reply = "%s: score must be number" % yournick
                    raise StopReply()

                curscore = self.getUserAbilityScore(yournick, channel, ability)
                if not curscore:
                    reply = "%s: You have no %s ability despise for" % (
                        ability, yournick)
                    raise StopReply()

                score = score.apply(curscore)
                if curscore == score:
                    reply = "%s: You're yourself" % yournick
                elif curscore <= score:
                    reply = "%s: Are you conceited?" % yournick
                else:
                    abilityid = self.getAbilityId(ability, True)
                    self.setUserAbilityScore(yournick, channel, abilityid,
                                             score, yournick)
                    reply = "%s has despise him/herself to %d on %s ability" % (
                        yournick, score, ability)
            elif cmd == "top" or cmd == "help":
                if cmd == "help":
                    if argc != 1:
                        # module help
                        raise StopReply()
                    reply = "This function is in TODO"
                    raise StopReply()

                from irclib import IrcStringIO
                if argc == 1:
                    ability = argv[0]
                    user_scores = self.getTopAbilityUsers(channel, ability)
                    if not user_scores:
                        reply = "no one is capable of %s" % ability
                        raise StopReply()
                    buffer = IrcStringIO("top user(s) that capable of %s:" %
                                         ability)
                    for user_score in user_scores:
                        buffer.write(" %s*%s" % user_score)
                elif argc == 0:
                    abilityScoreUsers = self.getTopAbilities(channel)
                    if not abilityScoreUsers:
                        reply = "no one is superman"
                        raise StopReply()
                    from irclib import IrcStringIO
                    buffer = IrcStringIO("top abilities:")
                    for abilityScoreUser in abilityScoreUsers:
                        buffer.write(" %s*%s/%s" % abilityScoreUser)
                reply = buffer.getvalue()
            else:
                nick = None
                ability = None
                name = None  # name to guess
                if argc == 0:
                    # quick query
                    if cmd:
                        name = cmd
                    else:
                        nick = yournick
                elif cmd != "query":
                    raise StopReply()
                elif argc == 1:
                    # "query $nick"
                    name = argv[0]
                elif argc == 2:
                    # "query $nick $ability"
                    [nick, ability] = argv
                else:
                    raise StopReply()

                # guess if it's nick or ability
                if name:
                    abilityid = self.getAbilityId(name)
                    if abilityid:
                        ability = name
                        nick = yournick
                    else:
                        nick = name
                        ability = None
                if nick:
                    if ability:
                        score = self.getUserAbilityScore(
                            nick, channel, ability) or 0
                        if yournick == nick:
                            reply = "Your %s ability is %d" % (ability, score)
                            if score < 0:
                                reply = reply + ". rats!"
                        else:
                            reply = "%s's %s ability is %d" % (nick, ability,
                                                               score)
                    else:
                        ability_scores = self.getUserAbilities(nick, channel)
                        if not ability_scores:
                            reply = nick + " doesn't have any ability, is he/she disabled?"
                        else:
                            from irclib import IrcStringIO
                            buffer = IrcStringIO(nick + " is capable of")
                            for ability_score in ability_scores:
                                buffer.write(" %s*%s" % ability_score)
                            reply = buffer.getvalue()
                else:
                    reply = nick + " not found"
        except StopReply:
            pass

        if not reply:
            if cmd == "help" and argc == 0 or not self.helps.has_key(cmd):
                reply = "AbilityProfile: " + " ;; ".join(self.helps.values())
            else:
                reply = "AbilityProfile: " + self.helps[cmd]

        result = Event("privmsg", "", channel, [reply])
        return result
Exemplo n.º 4
0
	def handler(self, **args):
		from irclib import Event
		import priv

		argv = self.spaces.split((args["text"]).strip())
		# case: ~ab
		if len(argv) < 3:
			cmd = None
			argv = []
			argc = 0
		# case ~ab ...
		else:
			cmd = argv[2].lower()
			argv = argv[3:]
			argc = len(argv)

		reply = None

		channel  = self.return_to_sender(args)
		from irclib import nm_to_n
		yournick = nm_to_n(args['source'])
		try:
			from irclib import is_channel
			from ValueModifier import IntValueModifier
			if not is_channel(channel):
				reply = "this is a channel only command"
			elif cmd == "grant":
				if argc != 3:
					raise StopReply()

				import priv
				nick, ability, score = argv
				try:
					score = IntValueModifier(score)
				except ValueError:
					reply = "%s: score must be number" % yournick
					raise StopReply()

				curscore = self.getUserAbilityScore(nick, channel, ability) or 0
				score = score.apply(curscore)
				# normal users?
				if priv.checkPriv(args["source"], "ab_admin_priv") == 0 \
					and priv.checkPriv(args["source"], "all_priv") == 0:
					if nick == yournick:
						reply = "You're so proud, %s" % yournick
						raise StopReply()
					yourscore = self.getUserAbilityScore(yournick, channel, ability)
					# apply rules
					if not yourscore or yourscore < score:
						yourscore = self.getUserAbilityScore(yournick, channel, '*')
						if not yourscore or yourscore < score:
							reply = "You don't have enough ability score, %s" % yournick
							raise StopReply()

					if curscore >= score:
						reply = "%s's %s ability is %d already" % (nick, ability, curscore)
						raise StopReply()

				abilityid = self.getAbilityId(ability, True)
				self.setUserAbilityScore(nick, channel, abilityid, score, yournick)
				reply = "%s's %s ability is set to %d" % (nick, ability, score)
			elif cmd == "despise":
				if argc != 2:
					raise StopReply()
				ability, score = argv
				try:
					score = IntValueModifier(score)
				except ValueError:
					reply = "%s: score must be number" % yournick
					raise StopReply()

				curscore = self.getUserAbilityScore(yournick, channel, ability)
				if not curscore:
					reply = "%s: You have no %s ability despise for" % (ability, yournick)
					raise StopReply()

				score = score.apply(curscore)
				if curscore == score:
					reply = "%s: You're yourself" % yournick
				elif curscore <= score:
					reply = "%s: Are you conceited?" % yournick
				else:
					abilityid = self.getAbilityId(ability, True)
					self.setUserAbilityScore(yournick, channel, abilityid, score, yournick)
					reply = "%s has despise him/herself to %d on %s ability" % (yournick, score, ability)
			elif cmd == "top" or cmd == "help":
				if cmd == "help":
					if argc != 1:
						# module help
						raise StopReply()
					reply = "This function is in TODO"
					raise StopReply()

				from irclib import IrcStringIO
				if argc == 1:
					ability = argv[0]
					user_scores = self.getTopAbilityUsers(channel, ability)
					if not user_scores:
						reply = "no one is capable of %s" % ability
						raise StopReply()
					buffer = IrcStringIO("top user(s) that capable of %s:" % ability)
					for user_score in user_scores:
						buffer.write(" %s*%s" % user_score)
				elif argc == 0:
					abilityScoreUsers = self.getTopAbilities(channel)
					if not abilityScoreUsers:
						reply = "no one is superman"
						raise StopReply()
					from irclib import IrcStringIO
					buffer = IrcStringIO("top abilities:")
					for abilityScoreUser in abilityScoreUsers:
						buffer.write(" %s*%s/%s" % abilityScoreUser)
				reply = buffer.getvalue()
			else:
				nick    = None
				ability = None
				name    = None # name to guess
				if argc == 0:
					# quick query
					if cmd:
						name = cmd
					else:
						nick = yournick
				elif cmd != "query":
					raise StopReply()
				elif argc == 1:
					# "query $nick"
					name = argv[0]
				elif argc == 2:
					# "query $nick $ability"
					[nick, ability] = argv
				else:
					raise StopReply()

				# guess if it's nick or ability
				if name:
					abilityid = self.getAbilityId(name)
					if abilityid:
						ability = name
						nick = yournick
					else:
						nick = name
						ability = None
				if nick:
					if ability:
						score = self.getUserAbilityScore(nick, channel, ability) or 0
						if yournick == nick:
							reply = "Your %s ability is %d" % (ability, score)
							if score < 0:
								reply = reply + ". rats!"
						else:
							reply = "%s's %s ability is %d" % (nick, ability, score)
					else:
						ability_scores = self.getUserAbilities(nick, channel)
						if not ability_scores:
							reply = nick + " doesn't have any ability, is he/she disabled?"
						else:
							from irclib import IrcStringIO
							buffer = IrcStringIO(nick + " is capable of")
							for ability_score in ability_scores:
								buffer.write(" %s*%s" % ability_score)
							reply = buffer.getvalue()
				else:
					reply = nick + " not found"
		except StopReply:
			pass

		if not reply:
			if cmd == "help" and argc == 0 or not self.helps.has_key(cmd):
				reply = "AbilityProfile: " + " ;; ".join(self.helps.values())
			else:
				reply = "AbilityProfile: " + self.helps[cmd]

		result = Event("privmsg", "", channel, [reply])
		return result