summaryrefslogtreecommitdiff
path: root/omegle/icqBuddy.py
blob: 554a4344904ef6fe6f3eb39305ef3251d9ff3e7d (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/python
# -*- vim: encoding: utf-8 -*-
# Yves Fischer, xapek.org 2009
import sys

from twisted.words.protocols import oscar
from twisted.internet import reactor
from twisted.python import log

from omegle import OmegleChat
from icq import ExtendedBOSConnection, ReconnectOscarFactory, Authenticator

ICQ_UIN = '446323989'
ICQ_PASSWORD = 'gagaga'

class OmegleICQChat(OmegleChat):
    def __init__(self,icqconn,user):
        self.user = user
        self.icqconn = icqconn
        OmegleChat.__init__(self,name="omegle")

    def on_message(self,message):
        self.send_icqconn( message )

    def send_icqconn(self,message):
        #send stopped typing snac
        reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user))+self.user+"\x00\x00")
        #von omegle kommt immer unicode, icq sendet latin1/iso-8859-1
        message = unicode(message)
        message = message.encode("iso-8859-1","replace")
        print "Omegle->%s: %s" % (self.user,message.__repr__())
        reactor.callFromThread(self.icqconn.sendMessage, self.user, message )

    def on_typing(self):
        """
        0x02 begin
        0x01 idle
        0x00 finish
        """
        reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user))+self.user+"\x00\x02")
        print "Omegle->%s: (begin typing)" % self.user

    def on_stopped_typing(self):
        reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user))+self.user+"\x00\x01")

    def on_connect(self):
        print "Omegle->%s: (connected)" % self.user
        self.send_icqconn(  "== Sup dawg, we heard u need some stranger in ur chatroom, so we put a Stranger in ur chatroom so u can chat with him while u chat with others (until you type %disconnect% anywhere) ==" )

    def on_disconnect(self):
        print "Omegle->%s: (disconnected)" % self.user
        self.send_icqconn( "==Stranger Disconnected ==" )

class ICQBuddy( ExtendedBOSConnection ):
    def initDone( self ):
        ExtendedBOSConnection.initDone( self )
        self.omegleConns = {}

    def shutdown( self ):
        for conn in self.omegleConns:
            if conn.is_connected:
                conn.disconnect()

    def receiveTyping(self, user, state):
        try:
            if state == "finish":
                self.omegleConns[user].stopped_typing()
            elif state == "idle":
                pass
            elif state == "begin":
                self.omegleConns[user].typing()
        except:
            pass

    def receiveCleanMessage( self, user, message, flags ):
        print "receiveCleanMessage"
        if not self.omegleConns.has_key(user.name):
            self.omegleConns[user.name] = OmegleICQChat(self,user.name)
        
        if not self.omegleConns[user.name].is_connected:
            if u"%connect%" in message:
                self.omegleConns[user.name].start()
                self.sendMessage(user.name, "Please stand by.....")
                if client_sucks:
                    self.sendMessage(user.name, "Hey, dein ICQ-Client sendet scheiss")
            else:
                print "Not connected"
#                   self.sendMessage(user.name, "Not connected, type >connect<")
        elif self.omegleConns[user.name].is_connected and u"%disconnect%" in message:
            try:
                self.omegleConns[user.name].disconnect()
            except Exception,e:
                self.sendMessage(user.name, str(e))
            self.sendMessage(user.name, "Disconnecting")
        elif self.omegleConns[user.name].is_connected and not self.omegleConns[user.name].is_confirmed:
            self.sendMessage(user.name, "Wait for connection confirm from omegle")
        else:
            try:
                print "%s->Omegle: %s" % (user.name, message.__repr__())
                self.omegleConns[user.name].send(message)
            except Exception,e:
                print "icq(%s): Error %s" % (user.name,e)

class MyAuthenticator( Authenticator ):
    BOSClass = ICQBuddy

class Factory( ReconnectOscarFactory ):
    OAClass = MyAuthenticator

if __name__ == '__main__':
    import logging
    logging.basicConfig(level=logging.INFO)

    log.startLogging(sys.stdout)
    print Factory.OAClass
    print MyAuthenticator.BOSClass
    reactor.connectTCP('login.icq.com', 5238,
                       Factory(ICQ_UIN,ICQ_PASSWORD,icq=1))
    reactor.run()