diff options
-rw-r--r-- | dumbot.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/dumbot.py b/dumbot.py new file mode 100644 index 0000000..a017349 --- /dev/null +++ b/dumbot.py @@ -0,0 +1,93 @@ +#!/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() |