Changeset 7
- Timestamp:
- 01/26/04 20:28:52 (5 years ago)
- Files:
-
- trunk/jjigw.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/jjigw.py
r6 r7 121 121 def join_channel(self,channel): 122 122 self.channels[normalize(channel.name)]=channel 123 channel.sync_user(self) 123 124 124 125 def leave_channel(self,channel): 125 126 try: 126 127 del self.channels[normalize(channel.name)] 128 channel.sync_user(self) 127 129 except KeyError: 128 130 pass 131 132 def leave_all(self): 133 for channel in self.channels.values(): 134 self.leave_channel(channel) 135 136 def sync_all(self): 137 for channel in self.channels.values(): 138 channel.sync_user(self) 129 139 130 140 def whoreply(self,params): … … 136 146 fullname=rest.split(None,1)[1] 137 147 self.debug("Channel: %r" % (channel,)) 138 if channel !="*":148 if channel and channel!="*": 139 149 channel=self.session.channels.get(normalize(channel)) 140 150 if not channel: 141 151 self.debug("Ignoring WHO reply: %r - unknown channel" % (params,)) 142 152 return 153 else: 154 channel=None 143 155 self.nick=nick 144 156 self.host=host 145 157 self.user=user 146 if channel !="*":158 if channel: 147 159 self.debug("Channel: %r" % (channel,)) 148 160 self.join_channel(channel) 149 if self not in channel.users:150 self.debug("Adding user %r to channel %r" % (self.nick,channel.name))151 channel.users.append(self)152 161 if "@" in flags: 153 162 channel.set_mode("o",self) … … 161 170 else: 162 171 self.mode["a"]=0 172 if channel: 173 channel.sync_user(self) 163 174 164 175 def debug(self,msg): … … 180 191 self.modes={} 181 192 self.users=[] 193 self.muc=0 194 195 def sync_user(self,user): 196 if user.channels.has_key(normalize(self.name)): 197 if user not in self.users: 198 self.users.append(user) 199 else: 200 if user in self.users: 201 self.users.remove(user) 202 self.send_notice_message(u"%s has quit" 203 % (unicode(user.nick,self.encoding,"replace"),)) 204 if self.state: 205 p=self.get_user_presence(user) 206 self.session.component.send(p) 207 208 def send_notice_message(self,msg): 209 if not self.state or self.muc: 210 return 211 m=Message(fr=self.room_jid.bare(),to=self.session.jid,type="groupchat",body=msg) 212 self.session.component.send(m) 182 213 183 214 def join(self,stanza): … … 207 238 p=Presence(type="unavailable",fr=stanza.get_to(),to=stanza.get_from(),status=status) 208 239 self.session.component.send(p) 240 for u in self.users: 241 u.leave_room(self) 242 self.state=None 209 243 210 244 def prefix_to_jid(self,prefix): … … 218 252 219 253 def get_user_presence(self,user): 220 if user in self.users:254 if self.state and user in self.users: 221 255 p=Presence(fr=self.nick_to_jid(user.nick),to=self.session.jid) 222 256 else: 223 257 p=Presence(type="unavailable",fr=self.nick_to_jid(user.nick),to=self.session.jid) 224 258 return p 259 260 def nick_changed(self,oldnick,user): 261 p_aval=self.get_user_presence(user) 262 p_unaval=p_aval.copy() 263 p_unaval.set_type("unavailable") 264 p_unaval.set_show(None) 265 p_unaval.set_status(None) 266 p_unaval.set_from(self.nick_to_jid(oldnick)) 267 self.session.component.send(p_unaval) 268 self.session.component.send(p_aval) 269 self.send_notice_message(u"%s is now known as %s" 270 % (unicode(oldnick,self.encoding,"replace"), 271 unicode(user.nick,self.encoding,"replace"))) 225 272 226 273 def set_mode(self,mode,arg): … … 258 305 to=self.stanza.get_from()) 259 306 self.session.component.send(p) 260 self.state=" sync"307 self.state="joined" 261 308 self.stanza=None 262 309 self.session.send("WHO %s" % (self.name,)) 263 310 else: 264 311 user=self.session.get_user(prefix) 265 if user not in self.users:266 self.users.append(user)267 312 user.join_channel(self) 313 self.send_notice_message(u"%s has joined" 314 % (unicode(user.nick,self.encoding,"replace"),)) 268 315 self.session.send("WHO %s" % (user.nick,)) 269 self.session.component.send(self.get_user_presence(user))270 316 271 317 def irc_cmd_PART(self,prefix,command,params): … … 276 322 pass 277 323 user.leave_channel(self) 278 self.session.component.send(self.get_user_presence(user)) 324 self.send_notice_message(u"%s has left" 325 % (unicode(user.nick,self.encoding,"replace"),)) 279 326 280 327 def irc_cmd_PRIVMSG(self,prefix,command,params): … … 515 562 self.send("PONG %s" % (params[0],)) 516 563 564 def irc_cmd_NICK(self,prefix,command,params): 565 if len(params)<1: 566 return 567 user=self.get_user(prefix) 568 if params[0]!=user.nick: 569 oldnick=user.nick 570 self.rename_user(user,params[0]) 571 for ch in user.channels.values(): 572 ch.nick_changed(oldnick,user) 573 574 def irc_cmd_QUIT(self,prefix,command,params): 575 user=self.get_user(prefix) 576 user.leave_all() 577 self.unregister_user(user) 578 517 579 def irc_cmd_352(self,prefix,command,params): 518 580 self.debug("WHO reply received")
