From: Christian Heller Date: Tue, 19 Aug 2025 13:25:09 +0000 (+0200) Subject: Minor refactoring. X-Git-Url: https://plomlompom.com/repos/blog?a=commitdiff_plain;h=415780cc948ff939a51bcea46eb3d161061b85ba;p=ircplom Minor refactoring. --- diff --git a/ircplom/client.py b/ircplom/client.py index 05c84e3..e3a9fe2 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -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}')