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()
|