from getpass import getuser
 from typing import (Any, Callable, Collection, Generic, Iterable, Iterator,
                     Optional, Self, Set, TypeVar)
-from uuid import uuid4
 # ourselves
 from ircplom.events import AffectiveEvent, QueueMixin
 from ircplom.irc_conn import (
 
 class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]):
 
+    def __init__(self, **kwargs) -> None:
+        super().__init__(**kwargs)
+        self._top_id = 0
+
     def __getitem__(self, key: str) -> _UpdatingUser:
         user = super().__getitem__(key)
         user.id_ = key
             else:
                 assert stored.host == nickuserhost.host
         elif create_if_none:
-            id_ = str(uuid4())
+            self._top_id += 1
+            id_ = str(self._top_id)
             self[id_].nickuserhost = nickuserhost
         else:
             return None
 
 2 < :SaslServ!SaslServ@services.bar.baz NOTICE foo :Last login from ~plom@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
 3 <<< [SaslServ] Last login from ~plom@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
 
-> /disconnect
-0 !# invalid prompt command: /disconnect unknown
-
+> /join #test
+0 !# invalid prompt command: /join unknown
 > /list
 0 # windows available via /window:
 0 #   0) :start
 0 #   3) foo.bar.baz SaslServ
 > /window 1
 
+> /join #test
+2 > JOIN :#test
+2 < :foo!~plom@baz.bar.foo JOIN #test
+1,2 $ users:me:user set to: [~plom]
+2 < :foo.bar.baz 353 foo @ #test :foo @bar
+, $ ?!?@? renames ?
+, $ ?!?@? renames bar
+2 < :foo.bar.baz 366 foo #test :End of /NAMES list.
+4 $ residents: bar, foo
+2 < :bar!~bar@bar.bar PRIVMSG #test :hi there
+1,2 $ users:1:user set to: [~bar]
+1,2 $ users:1:host set to: [bar.bar]
+4 < [bar] hi there
+
 > /disconnect
 1,2 $ requesting disconnect …
 2 > QUIT :ircplom says bye
 2 < ERROR :Closing link: (plom@baz.bar.foo) [Quit: ircplom says bye]
-1,2,3 $ connection_state set to: [Closing link: (plom@baz.bar.foo) [Quit: ircplom says bye]]
-1,2,3 $ connection_state set to: []
+1,2,3,4 $ connection_state set to: [Closing link: (plom@baz.bar.foo) [Quit: ircplom says bye]]
+1,2,3,4 $ connection_state set to: []
 1,2 $ isupport cleared
 1,2 $ sasl_account set to: []
 1,2 $ sasl_auth_state set to: []
 1,2 $ users cleared
 
 > /reconnect
-1,2,3 $ connection_state set to: [connecting]
+1,2,3,4 $ connection_state set to: [connecting]
 
 # except for two positions marked with NB comment, exactly same as on 1st time
-1,2,3 $ ?!?@? renames ?
+1,2,3,4 $ ?!?@? renames ?
 1,2 $ users:me:user set to: [plom]
-1,2,3 $ connection_state set to: [connected]
+1,2,3,4 $ connection_state set to: [connected]
 1,2 $ caps cleared
 2 > CAP LS :302
 2 > USER plom 0 * :baz
 2 < AUTHENTICATE +
 2 > AUTHENTICATE :Zm9vAGZvbwBiYXI=
 2 < :foo.bar.baz 900 foo foo!plom@baz.bar.foo foo :You are now logged in as foo
-1,2,3 $ ?!plom@? renames foo
+1,2,3,4 $ ?!plom@? renames foo
 1,2 $ users:me:host set to: [baz.bar.foo]
 1,2 $ sasl_account set to: [foo]
 2 < :foo.bar.baz 903 foo :SASL authentication successful