Esempio n. 1
0
    def on_command(self, bot, source, target, trigger, arguments):
        if source == "buffi":
            return

        meth_name = "trig_" + trigger.lower()

        pairs = []

        for command_class in commands.Command.__subclasses__():
            import __builtin__

            meth = None
            try:
                meth = command_class.instance.__getattribute__(meth_name)
                pairs.append([command_class.instance, meth])
            except:
                pass

        for command in commands.get_commands_by_trigger(trigger):
            pairs.append([command, command.on_trigger])

        for pair in pairs:
            command, method = pair

            if command.can_trigger(source, trigger):
                m = re.search("^(.+)!", source)
                if m:
                    if target == source:
                        target = m.group(1)
                    source = m.group(1)

                try:
                    return utility.timeout(method, 10, (bot, source, target, trigger, arguments))
                except utility.TimeoutException:
                    return "Command '%s' took too long to execute." % trigger
                except:
                    boll = list(traceback.extract_tb(sys.exc_info()[2]))
                    bolliStr = ", ".join(map(lambda x: str(x), boll))
                    bot.tell(
                        "#botnik",
                        "%s triggered an error by typing '%s %s': %s. %s"
                        % (source, trigger, arguments, sys.exc_info(), bolliStr),
                    )

                    error_handler.output_message(str(sys.exc_info()))
                    error_handler.output_message(
                        "Error when executing command '" + trigger + "':" + str(traceback.extract_tb(sys.exc_info()[2]))
                    )

                    return "Oops. Error logged."
            else:
                return "Bwaha. You can't trigger that!"

        if not len(pairs):
            if trigger in favorites.FavoriteCommands.instance.favorites.keys():
                return favorites.FavoriteCommands.instance.trig_fav(
                    bot, source, target, "fav", trigger + " " + arguments
                )
Esempio n. 2
0
    def on_command(self, bot, source, target, trigger, arguments):
        if source == "buffi":
            return

        meth_name = 'trig_' + trigger.lower()

        pairs = []

        for command_class in commands.Command.__subclasses__():
            import __builtin__
            meth = None
            try:
                meth = command_class.instance.__getattribute__(meth_name)
                pairs.append([command_class.instance, meth])
            except:
                pass

        for command in commands.get_commands_by_trigger(trigger):
            pairs.append([command, command.on_trigger])

        for pair in pairs:
            command, method = pair

            if command.can_trigger(source, trigger):
                m = re.search('^(.+)!', source)
                if m:
                    if target == source:
                        target = m.group(1)
                    source = m.group(1)

                try:
                    return utility.timeout(
                        method, 10, (bot, source, target, trigger, arguments))
                except utility.TimeoutException:
                    return "Command '%s' took too long to execute." % trigger
                except:
                    boll = list(traceback.extract_tb(sys.exc_info()[2]))
                    bolliStr = ", ".join(map(lambda x: str(x), boll))
                    bot.tell(
                        '#botnik',
                        "%s triggered an error by typing \'%s %s\': %s. %s" %
                        (source, trigger, arguments, sys.exc_info(), bolliStr))

                    print sys.exc_info()
                    print 'Error when executing command \'', trigger, '\':', traceback.extract_tb(
                        sys.exc_info()[2])

                    return "Oops. Error logged."
            else:
                return "Bwaha. You can't trigger that!"

        if not len(pairs):
            if trigger in favorites.FavoriteCommands.instance.favorites.keys():
                return favorites.FavoriteCommands.instance.trig_fav(
                    bot, source, target, 'fav', trigger + ' ' + arguments)
Esempio n. 3
0
	def on_command(self, bot, source, target, trigger, arguments):
		if source == "buffi":
			return

		meth_name = 'trig_' + trigger.lower()

		pairs = []

		for command_class in commands.Command.__subclasses__():
			import __builtin__
			meth = None
			try:
				meth = command_class.instance.__getattribute__(meth_name)
				pairs.append([command_class.instance, meth])
			except:
				pass

		for command in commands.get_commands_by_trigger(trigger):
			pairs.append([command, command.on_trigger])

		for pair in pairs:
			command, method = pair

			if command.can_trigger(source, trigger):
				m = re.search('^(.+)!', source)
				if m:
					if target == source:
						target = m.group(1)
					source = m.group(1)

				try:
					return utility.timeout(method, 10, (bot, source, target, trigger, arguments))
				except utility.TimeoutException:
					return "Command '%s' took too long to execute." % trigger
				except:
					print sys.exc_info()
					print 'Error when executing command \'', trigger, '\':', traceback.extract_tb(sys.exc_info()[2])

					return "Oops. Error logged."
			else:
				return "Bwaha. You can't trigger that!"

		if not len(pairs):
			if trigger in favorites.FavoriteCommands.instance.favorites.keys():
				return favorites.FavoriteCommands.instance.trig_fav(bot, source, target, 'fav', trigger + ' ' + arguments)
Esempio n. 4
0
	def on_command(self, bot, source, target, trigger, arguments, network):
		meth_name = 'trig_' + trigger.lower()
		pairs = []
		
		for command_class in commands.Command.__subclasses__():
			import __builtin__
			meth = None
			try:
				meth = command_class.instance.__getattribute__(meth_name)
				pairs.append([command_class.instance, meth])
			except:
				pass
				
		for command in commands.get_commands_by_trigger(trigger):
			pairs.append([command, command.on_trigger])

		for pair in pairs:
			command, method = pair

			if command.can_trigger(source, trigger):
				m = re.search('^(.+)!', source)
				if m:
					if target == source:
						target = m.group(1)
					source = m.group(1)

				try:
					# FIXME this is rather ugly, for compatiblity with pynik
					if method.im_func.func_code.co_argcount == 7:
						ret = utility.timeout(method, 10, (bot, source, target, trigger, arguments), {'network': network})
					elif method.im_func.func_code.co_argcount == 6:
						ret = utility.timeout(method, 10, (bot, source, target, trigger, arguments))
					else:
						raise NotImplementedError("Trigger '%s' argument count missmatch, was %s." % (
								trigger, method.im_func.func_code.co_argcount))
					return ret
				except utility.TimeoutException:
					return "Command '%s' took too long to execute." % trigger
				except MemoryError:
					return "Command '%s' used to much memory." % trigger
				except:
					error_handler.output_message("Error triggered by '%s' with command '%s', exinfo: '%s', traceback: '%s'" % (
							source, trigger, sys.exc_info(), traceback.extract_tb(sys.exc_info()[2])))

					try:
						bot.tell(bot.settings.admin_network, bot.settings.admin_channel, 
							 "%s triggered an error by typing '%s %s': %s, tb: %s." % (
								source, trigger, arguments, 
								sys.exc_info(), traceback.extract_tb(sys.exc_info()[2])[::-1]))
					except:
						error_handler.output_message("%s %s Unable to send exception to admin channel, exinfo: '%s', traceback: '%s'" % (
							datetime.datetime.now().strftime("[%H:%M:%S]"), network,
							sys.exc_info(), traceback.extract_tb(sys.exc_info()[2])))

					return "Oops. Error logged."
			else:
				return "Bwaha. You can't trigger that!"

		if not len(pairs):
			if trigger in favorites.FavoriteCommands.instance.favorites.keys():
				return favorites.FavoriteCommands.instance.trig_fav(bot, source, target, 'fav', trigger + ' ' + arguments)