summaryrefslogtreecommitdiff
path: root/dumbot.py
blob: a0173495d40778fce68f962f96371f1e84aeac7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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()