Changeset 124

Show
Ignore:
Timestamp:
10/30/07 23:26:58 (3 years ago)
Author:
omega
Message:

* ça marche même avece gajim maintenant (client en carton)
* rajout des modifs du fichier de config et de la table sql (structure très compliqué)

Location:
randomchat
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • randomchat/config-example.py

    r99 r124  
    33SERVER = 'example.com' 
    44PORT = 5347 
     5 
     6NICK_GUEST = 'inconnu(e)' 
     7 
     8DB_MODULE = 'sqlite' 
     9SQLITE_DB = 'randomchat.db' 
  • randomchat/randomchat.py

    r123 r124  
    88 
    99import config 
     10 
     11NS_MUC_USER = xmpp.NS_MUC+'#user' 
    1012 
    1113PRS_OFFLINE = 1 
     
    6668        self.jid = selfjid 
    6769        self.con = con 
    68         self.users = {} 
     70        self.users = {} # contains the users list as keys 
     71        self.rooms = {} # contains the rooms name as keys and the full JID of the participants as values 
     72 
     73    def message_handler(self, con, msg): 
     74        frm = msg.getFrom() 
     75        frm_str = frm.getStripped() 
     76        room = msg.getTo().getNode() 
     77        room_jid = room+'@'+self.jid 
     78        if not frm_str in self.users or self.users[frm_str]['room'] != room or self.users[frm_str]['nick'] is None: 
     79            con.send(xmpp.Error(msg, 'item-not-found')) 
     80            return 
     81        if msg.getType() != 'groupchat': 
     82            con.send(xmpp.Error(msg, 'bad-format')) 
     83 
     84        message = xmpp.Message(body = msg.getBody(), typ='groupchat') 
     85        for jid in self.rooms[room]: 
     86            message.setTo(jid) 
     87            if jid == frm: 
     88                message.setFrom(room_jid+'/'+self.users[frm_str]['nick']) 
     89            else: 
     90                message.setFrom(room_jid+'/'+config.NICK_GUEST) 
     91            con.send(message) 
     92 
     93 
     94    def presence_handler(self, con, prs): 
     95        frm = prs.getFrom() 
     96        frm_str = frm.getStripped() 
     97        room = prs.getTo().getNode() 
     98        room_jid = room+'@'+self.jid 
     99        nick = prs.getTo().getResource() 
     100        if not frm_str in self.users or self.users[frm_str]['room'] != room: 
     101            con.send(xmpp.Error(prs, 'item-not-found')) 
     102            return 
     103        if nick == '': 
     104            con.send(xmpp.Error(prs, 'bad-format')) 
     105            return 
     106 
     107        user = self.users[frm_str] 
     108 
     109        print user['nick'] 
     110        if user['nick'] is not None and prs.getType() == 'available': # discard presence if the user is already in the chat 
     111            return 
     112 
     113        if user['nick'] is None: 
     114            presence = xmpp.Presence(show = 'chat', payload = [xmpp.Node('x',  attrs = {'xmlns': NS_MUC_USER})]) 
     115            x = presence.getTag('x') 
     116            x.addChild('item', attrs = {'affiliation': 'member', 'role': 'participant'}) 
     117            if len(self.rooms[room]) == 1: 
     118                presence.setTo(frm) 
     119                presence.setFrom(room_jid+'/'+config.NICK_GUEST) 
     120                con.send(presence) # sends the presence of the other participant to the current participant 
     121                presence.setTo(self.rooms[room][0]) 
     122                con.send(presence) # does the opposite 
     123            presence.setTo(frm) 
     124            presence.setFrom(room_jid+'/'+nick) 
     125            x.addChild('status', attrs = {'code': '110'}) 
     126            con.send(presence) # send the user self presence 
     127            # add the user in the room 
     128            user['nick'] = nick 
     129            self.rooms[room].append(frm) 
     130        else: # if the user is already in, and we are this far, that means that we got a presence type!= available, we assume that he has left the chat 
     131            #TODO 
     132            pass 
     133         
    69134 
    70135    def invite(self, room, jid): 
    71136        invite = xmpp.Message(to = jid, frm = room+'@'+self.jid, body = 'Vous avez été invité dans le salon '+room+'@'+self.jid, payload = [  
    72137            xmpp.Node('x', attrs={'xmlns': xmpp.NS_MUC+'#user'}, payload = [  
    73                 xmpp.Node('invite', attrs={'to': room+'@'+self.jid}, payload = [  
     138                xmpp.Node('invite', attrs={'from': room+'@'+self.jid}, payload = [  
    74139                    xmpp.Node('reason', payload = ['Random chat !'] )  
    75140                ]) 
     
    77142        ]) 
    78143        self.con.send(invite) 
    79         self.users[jid.getStripped()] = room 
    80144 
    81145    def invite_users(self, jid1, jid2): 
    82146        room = sha.sha(str(jid1)+str(jid2)+str(time.time())).hexdigest() 
    83         self.users[jid1] = room 
    84         self.users[jid2] = room 
     147        self.rooms[room] = [] 
     148        jid1_str = jid1.getStripped() 
     149        jid2_str = jid2.getStripped() 
     150        self.users[jid1_str] = {'room': room, 'other': jid2_str, 'nick': None} 
     151        self.users[jid2_str] = {'room': room, 'other': jid1_str, 'nick': None} 
    85152        self.invite(room,jid1) 
    86153        self.invite(room,jid2) 
     
    132199 
    133200    def presence_handler(self, con, prs): 
     201        if prs.getTo().getNode() != '': 
     202            self.muc.presence_handler(con, prs) 
     203            return 
    134204        pass 
    135205 
    136206    def message_handler(self, con, msg): 
     207        if msg.getTo().getNode() != '': 
     208            self.muc.message_handler(con, msg) 
     209            return 
    137210        if not self.init_chat(msg.getFrom()): 
    138211            con.send(xmpp.Message(to = msg.getFrom(), frm = msg.getTo(), body = 'Pas de participant trouvé', typ = msg.getType()))