#!/usr/bin/python # sucked from: # * http://twistedmatrix.com/pipermail/twisted-python/2004-May/007903.html # * http://redfoot.net/hypercode/modules/xmpp/client # Twisted Imports from twisted.words.protocols.jabber import client, jid from twisted.xish import domish, xmlstream from twisted.internet import reactor # System Imports import sys, getpass name = None server = None resource = None password = None me = None thexmlstream = None tryandregister = 1 def initOnline(xmlstream): global factory print 'Initializing...' xmlstream.addObserver('/message', gotMessage) xmlstream.addObserver('/*', gotSomething) def authd(xmlstream): global thexmlstream thexmlstream = xmlstream print "we've authd!" print repr(xmlstream) #need to send presence so clients know we're #actually online presence = domish.Element(('jabber:client', 'presence')) presence.addElement('status').addContent('Online') xmlstream.send(presence) initOnline(xmlstream) def send(author, to, msg): global thexmlstream message = domish.Element(('jabber:client','message')) message["to"] = jid.JID(to).full() message["from"] = jid.JID(author).full() message["type"] = "chat" message.addElement("body", "jabber:client", msg) thexmlstream.send(message) def gotMessage(el): global me #print 'Got message: %s' % str(el.attributes) from_id = el["from"] body = "empty" for e in el.elements(): if e.name == "body": body = unicode(e.__str__()) break body = body.split(" ") body.reverse() body = " ".join(body) send(me, from_id, body) def gotSomething(el): print 'Got something: %s -> %s' % (el.name, str(el.attributes)) def authfailedEvent(xmlstream): global reactor print 'Auth failed!' reactor.stop() if __name__ == '__main__': USER_HANDLE = raw_input("JID: ") PASSWORD = getpass.getpass() me = USER_HANDLE + "/TwistedWords" myJid = jid.JID(me) server = USER_HANDLE[USER_HANDLE.find('@')+1:] factory = client.basicClientFactory(myJid, PASSWORD) # Register authentication callbacks factory.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, authd) # Go! reactor.connectTCP(server, 5222, factory) reactor.run()