Changeset 123

Show
Ignore:
Timestamp:
10/30/07 21:06:00 (2 years ago)
Author:
omega
Message:

* possibilité de lancer un random chat en parler au composant, ça envoie une invite mais on ne peut pas encore rejoindre le salon

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • randomchat/randomchat.py

    r122 r123  
    33 
    44import xmpp 
     5import random 
     6import sha 
     7import time 
     8 
    59import config 
    610 
     
    4044        self.db.execute("INSERT INTO randomchat (jid) VALUES (?)", (jid,)) 
    4145        self.db.commit() 
     46        self.users_list[jid] = PRS_OFFLINE 
    4247 
    4348    def remove_user(self, jid): 
    4449        self.db.execute("DELETE FROM randomchat WHERE jid=?", (jid,)) 
    4550        self.db.commit() 
     51        del self.users_list[jid] 
    4652 
    47     def get_chat_partner(jid): 
    48         pass 
     53    def get_chat_partner(self, jid): 
     54        user = jid.getStripped() 
     55        if len(self.users_list) < 2: 
     56            return None 
     57        else: 
     58            users = self.users_list.keys() 
     59            other = random.choice(users) 
     60            while other == user: 
     61                other = random.choice(users) 
     62            return other 
     63 
     64class MUC: 
     65    def __init__(self, selfjid, con): 
     66        self.jid = selfjid 
     67        self.con = con 
     68        self.users = {} 
     69 
     70    def invite(self, room, jid): 
     71        invite = xmpp.Message(to = jid, frm = room+'@'+self.jid, body = 'Vous avez été invité dans le salon '+room+'@'+self.jid, payload = [  
     72            xmpp.Node('x', attrs={'xmlns': xmpp.NS_MUC+'#user'}, payload = [  
     73                xmpp.Node('invite', attrs={'to': room+'@'+self.jid}, payload = [  
     74                    xmpp.Node('reason', payload = ['Random chat !'] )  
     75                ]) 
     76            ]) 
     77        ]) 
     78        self.con.send(invite) 
     79        self.users[jid.getStripped()] = room 
     80 
     81    def invite_users(self, jid1, jid2): 
     82        room = sha.sha(str(jid1)+str(jid2)+str(time.time())).hexdigest() 
     83        self.users[jid1] = room 
     84        self.users[jid2] = room 
     85        self.invite(room,jid1) 
     86        self.invite(room,jid2) 
     87 
    4988 
    5089 
     
    5493        self.con = xmpp.Component(server, port) 
    5594        self.jid = jid 
     95        self.muc = MUC(jid, self.con) 
    5696        if not self.con.connect(): 
    5797            raise Exception('Unable to connect to %s:%s' % (server, port)) 
     
    95135 
    96136    def message_handler(self, con, msg): 
    97         self.init_chat(msg.getFrom()) 
     137        if not self.init_chat(msg.getFrom()): 
     138            con.send(xmpp.Message(to = msg.getFrom(), frm = msg.getTo(), body = 'Pas de participant trouvé', typ = msg.getType())) 
    98139 
    99140    def init_chat(self, jid): 
    100141        other_jid = self.users.get_chat_partner(jid) 
     142        if other_jid is None: 
     143            return False 
     144        self.muc.invite_users(jid, xmpp.JID(other_jid)) 
     145        return True 
    101146 
    102147