From: Christian Heller Date: Fri, 5 Sep 2025 12:51:47 +0000 (+0200) Subject: Only explicitly use userid_for_nickuserhost for updating users entries. X-Git-Url: https://plomlompom.com/repos/?a=commitdiff_plain;h=297dd3bbde767dc60dd62740a80a81185403e535;p=ircplom Only explicitly use userid_for_nickuserhost for updating users entries. --- diff --git a/ircplom/client.py b/ircplom/client.py index e36f461..07c4f7d 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -380,7 +380,8 @@ class _Channel: def append_nick(self, nickuserhost: '_NickUserHost') -> None: 'To .user_ids append .nickname and declare .user_ids complete.' - user_id = self._id_for_nickuserhost(nickuserhost, create_if_none=True) + user_id = self._id_for_nickuserhost(nickuserhost, create_if_none=True, + updating=True) self.user_ids.append(user_id, complete=True) def remove_nick(self, nickuserhost: '_NickUserHost') -> None: @@ -513,7 +514,8 @@ class _ClientDb(_UpdatingMixin, SharedClientDbFields): def userid_for_nickuserhost(self, nickuserhost: _NickUserHost, create_if_none=False, - allow_none=False + allow_none=False, + updating=False ) -> Optional[str]: 'Return user_id for nickuserhost.nick, create if none, maybe update.' matches = [id_ for id_ in self.users.keys() @@ -528,10 +530,12 @@ class _ClientDb(_UpdatingMixin, SharedClientDbFields): stored = self.users[id_] if '?' in {stored.user, stored.host}: assert stored.host in {stored.user, '?'} + assert updating self.users.set_updating(id_, nickuserhost) else: assert nickuserhost.host == stored.host if nickuserhost.user == f'~{stored.user}': + assert updating self.users.set_updating(id_, nickuserhost) else: assert nickuserhost.user == stored.user @@ -706,9 +710,10 @@ class Client(ABC, ClientQueueMixin): if '_verb' not in ret: self._log(f'PLEASE IMPLEMENT HANDLER FOR: {msg.raw}') return - for nuh in ret['_nickuserhosts']: # update, ensure identities - if (id_ := self.db.userid_for_nickuserhost(nuh, allow_none=True)): - for ret_name in [k for k in ret if ret[k] is nuh]: + for n_u_h in ret['_nickuserhosts']: # update, ensure identities + if (id_ := self.db.userid_for_nickuserhost(n_u_h, allow_none=True, + updating=True)): + for ret_name in [k for k in ret if ret[k] is n_u_h]: ret[ret_name] = self.db.users[id_] for verb in ('setattr', 'do', 'doafter'): for task, tok_names in [t for t in ret['_tasks'].items() @@ -766,7 +771,8 @@ class Client(ABC, ClientQueueMixin): elif ret['_verb'] == 'JOIN' and ret['joiner'] != self.db.users['me']: self.db.channels[ret['channel']].append_nick(ret['joiner']) elif ret['_verb'] == 'NICK': - user_id = self.db.userid_for_nickuserhost(ret['named']) + user_id = self.db.userid_for_nickuserhost(ret['named'], + updating=True) assert user_id is not None self.db.users[user_id].nick = ret['nick'] if user_id == 'me':