class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]):
+ userlen: int
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
# .nick by definition same, check other fields for updatability;
# allow where '?', or for set .user only to add "~" prefix, assert
# nothing else could have changed
- if stored.user == '?' or nickuserhost.user == f'~{stored.user}':
+ if stored.user == '?'\
+ or nickuserhost.user == f'~{stored.user}'[:self.userlen]:
assert updating
stored.user = nickuserhost.user
else:
'userid_for_nickuserhost': self.users.id_for_nickuserhost,
'get_membership_prefixes': self._get_membership_prefixes,
'purge_users': self.users.purge}
- elif key == 'users' and attr._create_if_none is None:
- attr._create_if_none = {
- 'names_channels_of_user': self.channels.of_user,
- 'remove_from_channels': self.channels.remove_user}
+ elif key == 'users':
+ attr.userlen = int(self.isupport['USERLEN'])
+ if attr._create_if_none is None:
+ attr._create_if_none = {
+ 'names_channels_of_user': self.channels.of_user,
+ 'remove_from_channels': self.channels.remove_user}
elif key == 'caps' and attr._create_if_none is None:
attr._create_if_none = {}
return attr
# ETC.
# on /connect init databases, log in new windows
-> /connect foo.bar.baz foo:bar bar:baz
+> /connect foo.bar.baz foo:bar foobarbazquux:baz
1,2 $ isupport cleared
1,2 $ isupport:CHANTYPES set to: [#&]
1,2 $ isupport:PREFIX set to: [(ov)@+]
+1,2 $ isupport:USERLEN set to: [10]
1,2 $ caps cleared
1,2 $ users cleared
1,2 $ channels cleared
1,2 $ hostname set to: [foo.bar.baz]
1,2 $ port set to: [-1]
1,2 $ nick_wanted set to: [foo]
-1,2 $ user_wanted set to: [bar]
+1,2 $ user_wanted set to: [foobarbazquux]
1,2 $ realname set to: [baz]
1,2 $ password set to: [bar]
1,2 $ port set to: [6697]
1,2 $ connection_state set to: [connected]
2 > CAP LS :302
-2 > USER bar 0 * :baz
+2 > USER foobarbazquux 0 * :baz
2 > NICK :foo
2 < :*.?.net NOTICE * :*** Looking up your ident...
2 > AUTHENTICATE :PLAIN
2 < AUTHENTICATE +
2 > AUTHENTICATE :Zm9vAGZvbwBiYXI=
-2 < :foo.bar.baz 900 foo foo!bar@baz.bar.foo foo :You are now logged in as foo
+2 < :foo.bar.baz 900 foo foo!foobarbazq@baz.bar.foo foo :You are now logged in as foo
1,2 $ users:me:nick set to: [?]
1,2 $ ?!?@? renames ?
1,2 $ users:me:nick set to: [foo]
1,2 $ ?!?@? renames foo
-1,2 $ users:me:user set to: [bar]
+1,2 $ users:me:user set to: [foobarbazq]
1,2 $ users:me:host set to: [baz.bar.foo]
1,2 $ sasl_account set to: [foo]
2 < :foo MODE foo :+Ziw
1,2 $ users:me:modes set to: [+Ziw]
-2 < :SaslServ!SaslServ@services.bar.baz NOTICE foo :Last login from ~bar@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
-3 <<< [SaslServ] Last login from ~bar@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+2 < :SaslServ!SaslServ@services.bar.baz NOTICE foo :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+3 <<< [SaslServ] Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
> /join #test
0 !# invalid prompt command: /join unknown
> /join #test
2 > JOIN :#test
-2 < :foo!~bar@baz.bar.foo JOIN #test
-1,2 $ users:me:user set to: [~bar]
+2 < :foo!~foobarbaz@baz.bar.foo JOIN #test
+1,2 $ users:me:user set to: [~foobarbaz]
2 < :foo.bar.baz 332 foo #test :foo bar baz
2 < :foo.bar.baz 333 foo #test bar!~bar@bar.bar 1234567890
4 $ bar!~bar@bar.bar set topic: foo bar baz
1,2 $ users:3 cleared
1,2 $ users:3:nick set to: [?]
, $ ?!?@? renames ?
-2 < :foo!~bar@baz.bar.foo PART :#test
-1,2,3,4 $ foo!~bar@baz.bar.foo parts
+2 < :foo!~foobarbaz@baz.bar.foo PART :#test
+1,2,3,4 $ foo!~foobarbaz@baz.bar.foo parts
1,2 $ users:3 cleared
1,2 $ channels:#test cleared
1,2 $ users:1 cleared
> /disconnect
1,2 $ requesting disconnect …
2 > QUIT :ircplom says bye
-2 < :foo!~bar@baz.bar.foo QUIT :Client Quit
-1,2,3,4 $ foo!~bar@baz.bar.foo quits: Client Quit
-2 < ERROR :Closing link: (bar@baz.bar.foo) [Quit: ircplom says bye]
-1,2,3,4 $ connection_state set to: [Closing link: (bar@baz.bar.foo) [Quit: ircplom says bye]]
+2 < :foo!~foobarbaz@baz.bar.foo QUIT :Client Quit
+1,2,3,4 $ foo!~foobarbaz@baz.bar.foo quits: Client Quit
+2 < ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
+1,2,3,4 $ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]]
1,2,3,4 $ connection_state set to: []
1,2 $ isupport cleared
1,2 $ isupport:CHANTYPES set to: [#&]
1,2 $ isupport:PREFIX set to: [(ov)@+]
+1,2 $ isupport:USERLEN set to: [10]
1,2 $ motd set to:
1,2 $ sasl_account set to: []
1,2 $ sasl_auth_state set to: []
# except for two positions marked with NB comment, exactly same as on 1st time
1,2,3,4 $ connection_state set to: [connected]
2 > CAP LS :302
-2 > USER bar 0 * :baz
+2 > USER foobarbazquux 0 * :baz
2 > NICK :foo
2 < :*.?.net NOTICE * :*** Looking up your ident...
1,2 $$$ *** Looking up your ident...
2 > AUTHENTICATE :PLAIN
2 < AUTHENTICATE +
2 > AUTHENTICATE :Zm9vAGZvbwBiYXI=
-2 < :foo.bar.baz 900 foo foo!bar@baz.bar.foo foo :You are now logged in as foo
+2 < :foo.bar.baz 900 foo foo!foobarbazq@baz.bar.foo foo :You are now logged in as foo
1,2 $ users:me:nick set to: [?]
1,2,3,4 $ ?!?@? renames ?
1,2 $ users:me:nick set to: [foo]
1,2,3,4 $ ?!?@? renames foo
-1,2 $ users:me:user set to: [bar]
+1,2 $ users:me:user set to: [foobarbazq]
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
1,2 $ - (to this server) -
2 < :foo MODE foo :+Ziw
1,2 $ users:me:modes set to: [+Ziw]
-2 < :SaslServ!SaslServ@services.bar.baz NOTICE foo :Last login from ~bar@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
-3 <<< [SaslServ] Last login from ~bar@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+2 < :SaslServ!SaslServ@services.bar.baz NOTICE foo :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+3 <<< [SaslServ] Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
> /join #test
2 > JOIN :#test
-2 < :foo!~bar@baz.bar.foo JOIN #test
-1,2 $ users:me:user set to: [~bar]
+2 < :foo!~foobarbaz@baz.bar.foo JOIN #test
+1,2 $ users:me:user set to: [~foobarbaz]
2 < :foo.bar.baz 353 foo @ #test :foo @bar
1,2 $ users:4:nick set to: [?]
, $ ?!?@? renames ?