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