home · contact · privacy
Minor refactoring.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 19 Aug 2025 13:25:09 +0000 (15:25 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 19 Aug 2025 13:25:09 +0000 (15:25 +0200)
ircplom/client.py

index 05c84e3da3970b01cb23ba9c60138dcb9a4e5110..e3a9fe2490fc88defcb1c48f2abee0d976e99b6b 100644 (file)
@@ -464,6 +464,10 @@ class _ClientDb(_Db, SharedClientDbFields):
                 on_update=lambda k: self._on_update(name, k))
         return self._channels[name]
 
+    def chans_of_user(self, user: str) -> dict[str, _ChannelDb]:
+        'Return part of channels dictionary for channels user is currently in.'
+        return {k: v for k, v in self._channels.items() if user in v.users}
+
     def process_isupport(self, params: tuple[str, ...]) -> None:
         'Process 005 RPL_ISUPPORT params into dictionary updates.'
         for param in params[1:-1]:
@@ -615,9 +619,9 @@ class Client(ABC, ClientQueueMixin):
                     if len(toks) != 3:
                         break
                     to_return[key_nick] = toks[0]
-:               elif ex_tok is _MsgTok.ANY:
+                elif ex_tok is _MsgTok.ANY:
                     to_return['any'] = msg_tok
-                if ex_tok in {_MsgTok.NICKNAME_ME, _MsTok.USER_ADDRESS_ME}:
+                if ex_tok in {_MsgTok.NICKNAME_ME, _MsgTok.USER_ADDRESS_ME}:
                     if to_return[key_nick] != self._db.nickname:
                         break
                     to_return[f'{key_nick}_me'] = to_return[key_nick]
@@ -702,13 +706,11 @@ class Client(ABC, ClientQueueMixin):
             if 'sender_me' in ret:
                 self.set_nick(ret['nickname'], confirmed=True)
             else:
-                for chan_name in self._db.chan_names:
-                    chan = self._db.chan(chan_name)
-                    if ret['sender'] in chan.users:
-                        chan.remove_completable('users', ret['sender'], True)
-                        chan.append_completable('users', ret['nickname'], True)
-                        self._log(f'{ret["sender"]} becomes {ret["nickname"]}',
-                                  scope=LogScope.CHAT, target=chan_name)
+                for nom, chan in self._db.chans_of_user(ret['sender']).items():
+                    chan.remove_completable('users', ret['sender'], True)
+                    chan.append_completable('users', ret['nickname'], True)
+                    self._log(f'{ret["sender"]} becomes {ret["nickname"]}',
+                              scope=LogScope.CHAT, target=nom)
         elif (ret := self._match_msg(msg, 'NOTICE'))\
                 and (msg.params[0] != '*' or not self._db.nickname):
             kw = {'sender': ret['sender'], 'scope': LogScope.CHAT
@@ -730,12 +732,10 @@ class Client(ABC, ClientQueueMixin):
         elif (ret := self._match_msg(msg, 'PING')):
             self.send(IrcMessage(verb='PONG', params=(ret['any'],)))
         elif (ret := self._match_msg(msg, 'QUIT')):
-            for chan_name in self._db.chan_names:
-                chan = self._db.chan(chan_name)
-                if ret['sender'] in chan.users:
-                    chan.remove_completable('users', ret['sender'], True)
-                    self._log(f'{ret["sender"]} quits: {ret["any"]}',
-                              scope=LogScope.CHAT, target=chan_name)
+            for nom, chan in self._db.chans_of_user(ret['sender']).items():
+                chan.remove_completable('users', ret['sender'], True)
+                self._log(f'{ret["sender"]} quits: {ret["any"]}',
+                          scope=LogScope.CHAT, target=nom)
         else:
             self._log(f'PLEASE IMPLEMENT HANDLER FOR: {msg.raw}')