self._dict: dict[str, DictItem] = {}
super().__init__(**kwargs)
- def items(self) -> tuple[tuple[str, DictItem], ...]:
- 'Key-value pairs of item registrations.'
- return tuple((k, v) for k, v in self._dict.items())
-
def __getitem__(self, key: str) -> DictItem:
return self._dict[key]
def remove_user(self, user: '_User') -> None:
'From .user_ids remove .nickname and declare .user_ids complete.'
- user_id = self._userid_for_nickuserhost(user)
- self.user_ids.remove(user_id, complete=True)
+ self.user_ids.remove(user.id_, complete=True)
self.purge_users()
'Create with nuh fields set.'
return cls(nuh.nick, nuh.user, nuh.host)
+ @property
+ def id_(self) -> str:
+ 'To be set to key inside dictionary if placed into one.'
+ return self._id_
+
+ @id_.setter
+ def id_(self, value: str) -> None:
+ self._id_ = value
+
class _UpdatingServerCapability(_UpdatingMixin, ServerCapability):
pass
class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]):
+ def __getitem__(self, key: str) -> _UpdatingUser:
+ user = super().__getitem__(key)
+ user.id_ = key
+ return user
+
def id_for_nickuserhost(self,
nickuserhost: NickUserHost,
create_if_none=False,
def purge_users(self) -> None:
'Remove from .users all not linked to by existing channels, except us.'
- for id_, user in self.users.items():
- if id_ != 'me' and not self.chans_of_user(user):
+ for id_ in self.users.keys():
+ if id_ != 'me' and not self.chans_of_user(id_):
del self.users[id_]
def is_nick(self, nick: str) -> bool:
assert toks[0][0] == '('
return toks[1]
- def chans_of_user(self, user: _User) -> dict[str, _UpdatingChannel]:
+ def chans_of_user(self, user_id: str) -> dict[str, _UpdatingChannel]:
'Return dictionary of channels user is in.'
- id_ = self.users.id_for_nickuserhost(user)
return {k: self.channels[k] for k in self.channels.keys()
- if id_ in self.channels[k].user_ids.completed}
+ if user_id in self.channels[k].user_ids.completed}
class _CapsManager:
elif ret['_verb'] == 'PING':
self.send(IrcMessage(verb='PONG', params=(ret['reply'],)))
elif ret['_verb'] == 'QUIT':
- for ch_name, ch in self.db.chans_of_user(ret['quitter']).items():
+ for ch_name, ch in self.db.chans_of_user(ret['quitter'].id_
+ ).items():
ch.remove_user(ret['quitter'])
self._log(f'{ret["quitter"]} quits: {ret["message"]}',
LogScope.CHAT, target=ch_name)