| 269 | | ui=p.make_muc_userinfo() |
|---|
| 270 | | it=MucItem("none","participant",user.jid(),unicode(user.nick,self.encoding,"replace")) |
|---|
| | 277 | if user in self.modes.get("o",[]): |
|---|
| | 278 | aff="admin" |
|---|
| | 279 | role="moderator" |
|---|
| | 280 | elif user in self.modes.get("v",[]): |
|---|
| | 281 | aff="member" |
|---|
| | 282 | role="participant" |
|---|
| | 283 | elif self.modes.get("m"): |
|---|
| | 284 | aff="none" |
|---|
| | 285 | role="visitor" |
|---|
| | 286 | else: |
|---|
| | 287 | aff="none" |
|---|
| | 288 | role="participant" |
|---|
| | 289 | ui=p.make_muc_userinfo(status=status) |
|---|
| | 290 | if nick: |
|---|
| | 291 | nick=unicode(user.nick,self.encoding,"replace") |
|---|
| | 292 | it=MucItem(aff,role,user.jid(),nick=nick,actor=actor,reason=reason) |
|---|
| | 334 | def irc_cmd_324(self,prefix,command,params): |
|---|
| | 335 | for m in self.toggle_modes: |
|---|
| | 336 | try: |
|---|
| | 337 | del self.modes[m] |
|---|
| | 338 | except KeyError: |
|---|
| | 339 | pass |
|---|
| | 340 | self.irc_cmd_MODE(prefix,command,params) |
|---|
| | 341 | |
|---|
| | 342 | def irc_cmd_MODE(self,prefix,command,params): |
|---|
| | 343 | self.debug("irc_cmd_mode(%r,%r,%r)" % (prefix,command,params)) |
|---|
| | 344 | actor=self.session.get_user(prefix) |
|---|
| | 345 | self.debug("irc_cmd_mode: actor=%r" % (actor,)) |
|---|
| | 346 | if len(params)<2: |
|---|
| | 347 | self.debug("No parameters in received MODE") |
|---|
| | 348 | return |
|---|
| | 349 | modes=params[1] |
|---|
| | 350 | params=params[2:] |
|---|
| | 351 | pm=None |
|---|
| | 352 | for m in modes: |
|---|
| | 353 | if m in "+-": |
|---|
| | 354 | pm=m |
|---|
| | 355 | continue |
|---|
| | 356 | elif not pm: |
|---|
| | 357 | self.debug("Not '+' or '-' before '%s' in received MODE" % (m,)) |
|---|
| | 358 | continue |
|---|
| | 359 | elif m in self.arg_modes or m in self.multiarg_modes: |
|---|
| | 360 | if not len(params): |
|---|
| | 361 | self.debug("No argument for mode '%s' in received MODE" % (m,)) |
|---|
| | 362 | continue |
|---|
| | 363 | arg=params.pop(0) |
|---|
| | 364 | elif m in self.toggle_modes: |
|---|
| | 365 | arg=None |
|---|
| | 366 | else: |
|---|
| | 367 | self.debug("Unknown mode '%s' in received MODE" % (m,)) |
|---|
| | 368 | continue |
|---|
| | 369 | if m in "oOv": |
|---|
| | 370 | arg=self.session.get_user(arg) |
|---|
| | 371 | if not arg: |
|---|
| | 372 | continue |
|---|
| | 373 | if pm=="+": |
|---|
| | 374 | self.set_mode(m,arg) |
|---|
| | 375 | else: |
|---|
| | 376 | self.reset_mode(m,arg) |
|---|
| | 377 | if m in "oOv": |
|---|
| | 378 | self.user_mode_changed(arg,actor,m) |
|---|
| | 379 | elif m=="m": |
|---|
| | 380 | for u in self.users: |
|---|
| | 381 | self.sync_user(u) |
|---|
| | 382 | |
|---|
| | 383 | def user_mode_changed(self,user,actor,mode): |
|---|
| | 384 | self.debug("user_mode_changed(%r,%r,%r)" % (user,actor,mode)) |
|---|
| | 385 | if actor: |
|---|
| | 386 | actor_jid=self.nick_to_jid(actor.nick) |
|---|
| | 387 | else: |
|---|
| | 388 | actor_jid=None |
|---|
| | 389 | p=self.get_user_presence(user,actor_jid) |
|---|
| | 390 | if actor: |
|---|
| | 391 | by=u" by %s" % (unicode(actor.nick,self.encoding,"replace"),) |
|---|
| | 392 | else: |
|---|
| | 393 | by=u"" |
|---|
| | 394 | self.session.component.send(p) |
|---|
| | 395 | if mode=="v": |
|---|
| | 396 | self.send_notice_message(u"%s was granted voice%s" |
|---|
| | 397 | % (unicode(user.nick,self.encoding,"replace"),by)) |
|---|
| | 398 | elif mode=="o": |
|---|
| | 399 | self.send_notice_message(u"%s was granted operator status%s" |
|---|
| | 400 | % (unicode(user.nick,self.encoding,"replace"),by)) |
|---|
| | 401 | elif mode=="O": |
|---|
| | 402 | self.send_notice_message(u"%s was granted got owner status%s" |
|---|
| | 403 | % (unicode(user.nick,self.encoding,"replace"),by)) |
|---|
| | 404 | |
|---|