summaryrefslogtreecommitdiff
path: root/omegle_jabber.py
blob: 9103e2db6af45bd8ba8ab2b11c8c4c5b10234874 (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
94
95
96
97
98
99
100
101
102
103
104
105
import xmpp
from omegle import OmegleChat

def reply(message,text):
	msg = xmpp.Message(to=message.getFrom(),body=text)
	msg.setThread( message.getThread() )
	msg.setType( message.getType() )
	return msg

class OmegleXMPP(OmegleChat):
	def __init__(self,xmpp,last_message):
		self.xmpp = xmpp
		self.last_message = last_message
		OmegleChat.__init__(self,name="(%s)"%last_message.getFrom())

	def on_message(self,message):
		print "%s: omegle got message %s" % (self.last_message.getFrom(),message)
		msg = reply(self.last_message, message)
		msg.addChild(name="active",namespace="http://jabber.org/protocol/chatstates")
		self.xmpp.send(msg)


	def on_typing(self):
		msg = xmpp.Message(to=self.last_message.getFrom(),typ=self.last_message.getType())
		msg.setThread(self.last_message.getThread())
		msg.addChild(name="composing",namespace="http://jabber.org/protocol/chatstates")
		self.xmpp.send(msg)
		print "begin typing"

	def on_stopped_typing(self):
		msg = xmpp.Message(to=self.last_message.getFrom(),typ=self.last_message.getType())
		msg.setThread(self.last_message.getThread())
		msg.addChild(name="paused",namespace="http://jabber.org/protocol/chatstates")
		self.xmpp.send(msg)

		print "stopped typing"

	def on_connect(self):
		print "%s: omegle connected" % self.last_message.getFrom()
		self.xmpp.send( reply(self.last_message, "Sup dawg, we heard u like to meet strangers so we put a Stranger in ur chat so u can chat while u chat (until you type \"disconnect\" without quotes) ==") )

	def on_disconnect(self):
		print "%s: omegle disconnecteed" % self.last_message.getFrom()
		self.xmpp.send( reply(self.last_message, "== Stranger disconnected ==") )

	def on_message_xmpp(self,message):
		self.last_message = message
		if message.getBody():
			print "%s: To Omegle: %s" % (self.last_message.getFrom(), self.last_message.getBody())
			self.send(message.getBody())
		elif message.getTag("composing"):
			print "composing"
			self.typing()


class XMPPClient(object):
	def __init__(self,jid,password):
		self.omegle_connections = dict()
		self.jid = xmpp.JID(jid)
		self.client = xmpp.Client(self.jid.getDomain()) #,debug=[])

		self.client.connect()
		self.client.auth(self.jid.getNode(),password)
		self.client.sendInitPresence()

		self.client.RegisterHandler("message", self.messageHandler)
		self.client.RegisterHandler("presence", self.presence)

		while self.client.Process(1): pass

	def messageHandler(self,dispatcher,message):
		if not self.omegle_connections.has_key(message.getFrom()):
			self.omegle_connections[message.getFrom()] = OmegleXMPP(self.client, message)

		omegle = self.omegle_connections[message.getFrom()]
		try:
			if not omegle.is_connected:
				if message.getBody() == "connect":
					omegle.start()
					self.client.send( reply(message,"Connecting") )
				else:
					self.client.send( reply(message,"Not connected, type >connect<") )
			elif omegle.is_connected and message.getBody() == "disconnect":
				self.client.send( reply(message, "Disconnecting") )
				try:
					omegle.disconnect()
				except Exception,e:
					self.client.send( reply(message, str(e)) )
			elif omegle.is_connected and not omegle.is_confirmed:
				self.client.send( reply(message, "Establish Connection...") )
			else:
				omegle.on_message_xmpp(message)
		except Exception,e:
			print e

	def presence(self,dispatcher,presence):
		if presence.getType() == "subscribe":
			self.client.Roster.Authorize(presence.getFrom())
			self.client.Roster.Subscribe(presence.getFrom())

cl=XMPPClient('omegle@jabber.org','omegle')