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:
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()
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
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()
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':