summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dumbot.py93
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()