From: Christian Heller Date: Thu, 18 Sep 2025 06:39:17 +0000 (+0200) Subject: Handle shortening of usernames by USERLEN. X-Git-Url: https://plomlompom.com/repos/booking/tasks?a=commitdiff_plain;h=ab57d1dc51fbb5bc2bab5caf799f356ba474a2c8;p=ircplom Handle shortening of usernames by USERLEN. --- diff --git a/ircplom/client.py b/ircplom/client.py index 224ccdb..d7d86fa 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -498,6 +498,7 @@ class _UpdatingUser(_UpdatingAttrsMixin, _User): class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]): + userlen: int def __init__(self, **kwargs) -> None: super().__init__(**kwargs) @@ -529,7 +530,8 @@ class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]): # .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: @@ -604,10 +606,12 @@ class _ClientDb(_Clearable, _UpdatingAttrsMixin, SharedClientDbFields): '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 diff --git a/ircplom/irc_conn.py b/ircplom/irc_conn.py index af04814..fb1bd21 100644 --- a/ircplom/irc_conn.py +++ b/ircplom/irc_conn.py @@ -17,7 +17,8 @@ ILLEGAL_NICK_CHARS = ' ,*?!@' ILLEGAL_NICK_FIRSTCHARS = ':$' ISUPPORT_DEFAULTS = { 'CHANTYPES': '#&', - 'PREFIX': '(ov)@+' + 'PREFIX': '(ov)@+', + 'USERLEN': '10' } _IRCSPEC_LINE_SEPARATOR = b'\r\n' _IRCSPEC_TAG_ESCAPES = ((r'\:', ';'), diff --git a/test.txt b/test.txt index 1b842a2..5afb4bf 100644 --- a/test.txt +++ b/test.txt @@ -43,10 +43,11 @@ # 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 @@ -55,7 +56,7 @@ 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] @@ -64,7 +65,7 @@ 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... @@ -94,13 +95,13 @@ 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] @@ -145,8 +146,8 @@ 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 @@ -160,8 +161,8 @@ > /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 @@ -209,8 +210,8 @@ 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 @@ -218,14 +219,15 @@ > /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: [] @@ -239,7 +241,7 @@ # 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... @@ -267,12 +269,12 @@ 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 @@ -308,12 +310,12 @@ 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 ?