View difference between Paste ID: 7e9eK4GT and LA7Sf30P
SHOW: | | - or go back to the newest paste.
1
# -*- coding: utf-8 -*-
2
"""
3
Created on Thu Jul 04 11:44:01 2013
4
5
@author: Gabriel (aka dberube4)
6
7
PyOmegle is a multithreaded omegle client written in python.
8
"""
9
from threading import Thread
10
from random import randint
11
import urllib2, ast
12-
import urllib2
12+
13
14
class Session(Thread):
15
    '''Represents an omegle session.'''
16
    
17
    headers = {}
18
    headers['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1)'+\
19
                          'Gecko/20100101 Firefox/7.0'
20
    headers['Accept']='text/html,application/xhtml+xml,application/xml;'+\
21
                      'q=0.9,*/*;q=0.8'
22
    headers['Accept-Language']='en-us;q=0.8,en;q=0.5'
23
    headers['X-Moz']='prefetch'
24
    headers['Accept-Charset']='ISO-8859-1,utf-8;q=0.7,*;q=0.7'
25
    headers['Referer']='http://www.reddit.com'
26
    headers['Cache-Control']='no-cache, no-cache'
27
    headers['Pragma']='no-cache'
28
    
29
    def __init__(self):
30
        
31
        super(Session, self).__init__()        
32
        
33
        self.url = ''
34
        self.sessionID = -1
35
        self.session_started = False
36
        self.logs = '' 
37
        
38
        self.request_event = None
39
        self.request_disconnect = None
40
        self.request_typing = None
41
        
42
        self.stranger_typing = False
43
        self.stranger_connected = False
44
        
45
    def run(self):
46
        while True:
47-
        null = None 
47+
48
            if self.session_started == False:
49
                break
50-
            rep = eval(urllib2.urlopen(self.request_event).read())
50+
51
            try:
52-
            try:        
52+
                rep = ast.literal_eval(urllib2.urlopen(self.request_event).read())
53
            except ValueError:
54-
                if rep[0][0] == "connected":
54+
                #If the input was a malformed string.
55-
                    self.stranger_connected = True
55+
                break
56-
                    self.strangerConnected()
56+
57
            if rep[0][0] == "connected":
58-
                elif rep[0][0] == 'typing':
58+
                self.stranger_connected = True
59-
                    self.stranger_typing = True
59+
                self.strangerConnected()
60-
                    self.strangerTyping()
60+
61-
                    
61+
            elif rep[0][0] == 'typing':
62-
                elif rep[0][0] == 'stoppedTyping':
62+
                self.stranger_typing = True
63-
                    self.stranger_typing = False
63+
                self.strangerTyping()
64-
                    self.strangerStoppedTyping()
64+
65-
                    
65+
            elif rep[0][0] == 'stoppedTyping':
66-
                elif rep[0][0] == 'gotMessage':
66+
                self.stranger_typing = False
67-
                    msg = rep[0][1]
67+
                self.strangerStoppedTyping()
68-
                    self.stranger_typing = False
68+
69-
                    self.logs += msg+'/n'
69+
            elif rep[0][0] == 'gotMessage':
70-
                    self.messageReceived(msg)
70+
                msg = rep[0][1]
71
                self.stranger_typing = False
72-
                elif rep[0][0] == 'strangerDisconnected':
72+
                self.logs += msg+'/n'
73-
                    self.stranger_connected = False
73+
                self.messageReceived(msg)
74-
                    self.stranger_typing = False
74+
75-
                    self.session_started = False
75+
            elif rep[0][0] == 'strangerDisconnected':
76-
                    self.strangerDisconnected()
76+
                self.stranger_connected = False
77-
                    break
77+
                self.stranger_typing = False
78
                self.session_started = False
79-
            except TypeError:
79+
                self.strangerDisconnected()
80-
                pass
80+
                break
81
            
82
    
83
    def startSession(self):
84
        '''Start an omegle session'''
85
        
86
        #Get Session ID & start session
87
        self.url = 'http://front{0}.omegle.com'.format(randint(1, 9))
88
        data = '?rcs=1&firstevents=1&spid=&randid=NSPDU4AW&lang=en'
89
        start_req = urllib2.Request(self.url+'/start'+data, headers = self.headers)
90-
        self.sessionID = eval(urllib2.urlopen(start_req, timeout = 60).read())["clientID"]
90+
91
        self.sessionID = eval(urllib2.urlopen(start_req).read())["clientID"]
92
            
93
        self.session_started = True
94
        
95
        #Craft requests
96
        idData = "id={0}".format(self.sessionID)
97
        self.request_event = urllib2.Request(self.url+'/events', idData,
98
                                             headers = self.headers)
99
        
100
        self.request_disconnect = urllib2.Request(self.url+'/disconnect', idData,
101
                                             headers = self.headers)
102
        
103
        self.request_typing = urllib2.Request(self.url+'/typing', idData,
104
                                             headers = self.headers)
105
        
106
        self.start()
107
    
108
    def sendMessage(self, message):
109
        msgReq = urllib2.Request(self.url+'/send',
110
                                 '&msg='+message+'&id='+self.sessionID,
111
                                 headers = self.headers)
112
        
113-
        urllib2.urlopen(msgReq, timeout = 60)
113+
        urllib2.urlopen(msgReq)
114
        
115
        self.logs += message+'/n'
116
117
    def logOut(self):
118
        
119
        if self.stranger_connected and self.session_started:
120
            urllib2.urlopen(self.request_disconnect)
121
            
122
            self.stranger_typing = False
123
            self.stranger_connected = False
124
       
125
    def sendTyping(self):
126
        urllib2.urlopen(self.request_typing)
127
    
128-
        print('Stranger Typing')
128+
129
    @staticmethod
130
    def strangerTyping():
131
        pass
132-
        print('Stranger Stopped Typing')
132+
133
    @staticmethod    
134
    def strangerStoppedTyping():
135
        pass
136-
        print('Stranger Disconnected')
136+
137
    @staticmethod
138
    def strangerDisconnected():
139
        pass
140-
        print('Stranger Connected')
140+
141
    @staticmethod
142
    def strangerConnected():
143
        pass
144-
        print('Stranger: {0}'.format(msg))
144+
145
    @staticmethod
146
    def messageReceived(msg):
147-
#Crappy self executing
147+
        pass
148
        
149
150
if __name__ == '__main__':
151
    
152
    session = Session()
153
    session.daemon = True #Program exit when thread ends
154
155
    #You can replace the session methods with your own!:
156
    def replacement(msg): 
157
        print("Handsome Stranger: {0}".format(msg))
158
    session.messageReceived = replacement
159
    
160
    session.startSession()
161
    
162
    #Fully multithreaded!
163
    while session.session_started:
164
        msg = raw_input()
165
        
166
        if msg == 'getLogs':
167
            print(session.logs)
168
        
169
        elif len(msg)>0 and msg != 'quit':
170
            session.sendMessage(msg)
171
            
172
        elif msg == 'quit':
173
            session.logOut()