@observes('IRC_MSG_PRIVMSG')
    def _handler(self, irc_c, msg):
        #Addressed Keywords like '<botnick>: keyword'
        address = irc_c.botnick % '%s:'

        #Cleanup the message for parsing
        message = msg.message.strip()
        if (message.startswith(self.prefix)
                or message.lower().startswith(address)
                or msg.channel is None):
            #Lets strip directed addressed messages
            if message.lower().startswith(address):
                message = message[len(address):].strip()

            #Get the trigger and everything else
            parts = message.split(None, 1)
            if parts:
                word = parts.pop(0).lstrip(self.prefix)
            else:
                #WTF empty screw it
                return

            #Try to get the args
            if parts:
                allargs = parts.pop(0)
            else:
                allargs = ''  # Empty NO ARGS provided

            #Get the trigger if it exists
            trigger = self.get(word)

            if trigger:
                args, keywords = self.parse(allargs)
                #Call the trigger with parsed args
                msg.unparsed = allargs
                trigger(irc_c, msg, word, args, keywords)
dataset/ETHPy150Open facebook/pyaib/pyaib/triggers.py/Triggers._handler/swapped operands of `%`