Example #1
0
    def messageHandler(self, conn, msg):
        print "---message--------------------------------------------------"
        #print unicode(dir(msg))
        #print unicode(msg.getFrom()).split("/")[0]
        #print " "+self.jid

        # extractint content from message

        if msg.getBody():

            sender = unicode(msg.getFrom())
            content = unicode(msg.getBody())
            type = unicode(msg.getType())
            self.chat = ""

            #try:
            #    content = msg.getBody().encode("iso-8859-1")
            #except (UnicodeDecodeError, UnicodeEncodeError):
            #    print "[ENCODING ERROR] ..."
            #    content=u""


            # GROUPCHAT
            try:
                if type.__eq__("groupchat"):
                    print "GROUPCHAT!!!!!!"
                    self.chat = sender.split("/")[0]
                    print u"chat: "+self.chat
            except Exception, e:
                print u"[ERROR] sender: "+sender
                print e

            #content = unicode(content, "iso-8859-1")

            print u"("+type+u") Sender: " + sender + u"\n Content: " + content


            # try to parse ass Address
            addr = Address(content)
            print "parsed address: " + addr.__str__()

            if content.__eq__("show"):
                print " parsing as show command"
                self.send(self.root.returnTree(0), sender)

            elif content.__eq__("xml"):
                print " parsing as xml command"
                self.send(self.root.toXml(), sender)

            elif content.__eq__("list"):
                print " parsing as list command"
                result = ""
                for elem in self.root.getChild(Config.get("jabber", "jid")).getAddressList():
                    result += elem+"\n"
                self.send(result, sender)

            elif content.__eq__("help"):
                print " parsing as help command"
                help = '''
    enter:
    help to print this message
    xml to print xml representation
    show to print message overview
    list to print all available addresses

    search:
    enter search command with * before
    eg "*play"

    Use following XML to sent a Packet:
    <?xml version="1.0" ?>
    <packet from="*****@*****.**" to="/Finder/Say">
      <string name="text">
        Hello master, my name is hal2000
      </string>
    </packet>'''
                self.send(help, sender)




            elif content[0:1].__eq__("*"):
                print " parsing as search command"
                result = []
                answer = ""

                # seperate search string form data string
                searchstring = content.split(" ")[0][1:]
                datastring = ""
                for elem in content.split(" ")[1:]:
                    datastring += " "+elem
                datastring = datastring[1:]

                print "'"+searchstring+"' - '"+datastring+"'"

                # search in address index for searchstring and build a list with resulting addresses
                for elem in self.root.getAddressList():
                    if not elem.lower().find(searchstring.lower()) == -1:
                        result.append(elem)

                print result, result.__len__()

                # if there is only one address resulting, execute it
                if result.__len__() == 1:
                    answer = " executing: "+result[0][5:]
                    #try:
                    if True:
                        if datastring.__len__() == 0:
                            tmp = str(self.root.getByAddress(result[0][5:]).use())
                        else:
                            tmp = str(self.root.getByAddress(result[0][5:]).use(datastring))

                        if not tmp == None:
                            answer+="\n"+str(tmp)

                        self.send(answer, sender)
                    #except Exception, e:
                    #    print "[SEARCH PARSE ERROR] "+str(e)

                # otherwise return result to sender
                else:
                    for elem in result:
                        answer += elem[5:]+"\n"
                    self.send(answer, sender)



            elif addr.isAddress():
                print " parsing as address command: "+addr.__str__()
                print " with data: >"+addr.data+"<"
                try:
                    if addr.data.__len__() == 0:
                        #print "call address WITHOUT parameter"
                        result = self.root.getByAddress(addr.__str__()).use()
                    else:
                        #print "call address WITH parameter"
                        result = self.root.getByAddress(addr.__str__()).use(addr.data)
                    if not result == None:
                        self.send(result, sender)
                        
                    print " "+str(result)
                except Exception, e:
                    self.send("[ADDRESS XMPP ERROR] "+content+" is not a valid address.", sender)
                    print "[ADDRESS XMPP ERROR] "+str(e)