Changeset 50

Show
Ignore:
Timestamp:
02/14/04 12:00:06 (5 years ago)
Author:
jajcus
Message:

- ERR_CANNOTSENDTOCHAN and ERR_NOSUCHNICK handling

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jjigw.py

    r47 r50  
    7070    s=n.encode(encoding,"strict") 
    7171    s=escape_node_string(s) 
    72     if not network.valid_nickk(s): 
     72    if not network.valid_nick(s): 
    7373        raise ValueError,"Bad nick name: %r" % (s,) 
    7474    return s 
     
    7878    n=unicode(s,encoding,"strict") 
    7979    return n 
     80 
    8081 
    8182irc_translate_table=string.maketrans( 
     
    648649            self.lock.release() 
    649650 
    650     def get_user(self,prefix): 
     651    def get_user(self,prefix,create=1): 
    651652        if "!" in prefix: 
    652653            nick=prefix.split("!",1)[0] 
     
    658659        if self.users.has_key(nnick): 
    659660            return self.users[nnick] 
     661        if not create: 
     662            return None 
    660663        user=IRCUser(self,prefix) 
    661664        self.register_user(user) 
     
    675678            nick=prefix 
    676679        return normalize(nick)==normalize(self.nick) 
     680 
     681    def prefix_to_jid(self,prefix): 
     682        if channel_re.match(prefix): 
     683            node=channel_to_node(prefix,self.default_encoding) 
     684            return JID(node,self.network.jid.domain,None) 
     685        else: 
     686            if "!" in prefix: 
     687                nick,user=prefix.split("!",1) 
     688            else: 
     689                nick=prefix  
     690                user="" 
     691            node=nick_to_node(nick,self.default_encoding) 
     692            resource=unicode(user,self.default_encoding,"replace") 
     693            return JID(node,self.network.jid.domain,resource) 
    677694 
    678695    def thread_run(self): 
     
    938955            return 
    939956        pass 
     957 
     958    def irc_cmd_401(self,prefix,command,params): # ERR_NOSUCHNICK 
     959        if len(params)>1: 
     960            nick,msg=params[:2] 
     961            error_text="%s: %s" % (nick,msg) 
     962        else: 
     963            error_text=None 
     964        self.send_error_message(params[0],"recipient-unavailable",error_text) 
    940965  
     966    def irc_cmd_404(self,prefix,command,params): # ERR_CANNOTSENDTOCHAN 
     967        if len(params)>1: 
     968            error_text=params[1] 
     969        else: 
     970            error_text=None 
     971        self.send_error_message(params[0],"forbidden",error_text) 
     972 
    941973    def irc_cmd_QUIT(self,prefix,command,params): 
    942974        user=self.get_user(prefix) 
     
    957989            channel=user.channels[c] 
    958990            self.component.send(channel.get_user_presence(user)) 
    959      
     991    
     992    def send_error_message(self,source,cond,text): 
     993        self.debug("send_error_message(self,%r,%r,%r)" % (source,cond,text)) 
     994        user=self.get_user(source) 
     995        if user: 
     996            self.unregister_user(user) 
     997        if user and user.current_thread: 
     998            self.debug("user.current_thread: %r" % (user.current_thread,)) 
     999            typ,thread,fr=user.current_thread 
     1000            if not fr: 
     1001                fr=self.prefix_to_jid(source) 
     1002            m=Message(type="error",error_cond=cond,error_text=text, 
     1003                    to=self.jid,fr=fr,thread=thread) 
     1004        else: 
     1005            fr=self.prefix_to_jid(source) 
     1006            self.debug("from: %r" % (fr,)) 
     1007            m=Message(type="error",error_cond=cond,error_text=text, 
     1008                    to=self.jid,fr=fr) 
     1009        self.component.send(m) 
     1010 
    9601011    def pass_input_to_user(self,prefix,command,params): 
    9611012        if command in self.commands_dont_show: 
     
    10511102            nick=to.node 
    10521103            thread_fr=None 
    1053         nick=node_to_nick(nick,self.default_encoding
     1104        nick=node_to_nick(nick,self.default_encoding,self.network
    10541105        if not self.network.valid_nick(nick): 
    10551106            debug("Bad nick: %r" % (nick,))