t.w.p.jabber Example

from twisted.words.protocols.jabber import client, jid
from twisted.words.xish import domish
from twisted.internet import reactor

class JabberClient:
    xmlstream = None

    def __init__(self, myJid):
        self.myJid = myJid
        
    
    def authd(self,xmlstream):
        print "authenticated"
        self.xmlstream = xmlstream
        presence = domish.Element(('jabber:client','presence'))
        xmlstream.send(presence)
        
        xmlstream.addObserver('/message',  self.debug)
        xmlstream.addObserver('/presence', self.debug)
        xmlstream.addObserver('/iq',       self.debug)   
        reactor.callLater(5, self.sendMessage, 'test@server.jabber','test','test')
        

    def sendMessage(self, to, subject, body):
        
        message = domish.Element(('jabber:client','message'))
        message['to'] = to
        message['type'] = 'chat'
        
        # message.addElement('subject',None,subject)
        message.addElement('body',None,body)
        
        self.xmlstream.send(message)
        

    def debug(self, elem):
        print elem.toXml().encode('utf-8')
        print "="*20
    
myJid = jid.JID('username@server.jabber/twisted_words')
factory = client.basicClientFactory(myJid, 'password')

jabber = JabberClient(myJid)

factory.addBootstrap('//event/stream/authd',jabber.authd)
factory.addBootstrap("//event/client/basicauth/invaliduser", jabber.debug)
factory.addBootstrap("//event/client/basicauth/authfailed", jabber.debug)
factory.addBootstrap("//event/stream/error", jabber.debug)

reactor.connectTCP('server.jabber',5222,factory)
reactor.run()