home · contact · privacy
Allow explicit setting of username.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 18 Sep 2025 06:01:45 +0000 (08:01 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 18 Sep 2025 06:01:45 +0000 (08:01 +0200)
ircplom/client.py
ircplom/client_tui.py
test.txt

index 6b9cd1003ad6bf9df67c33dba32f7518880b8b9c..3e2c9469eb63310c4ea7ee6e6e7aa93b1d15dc03 100644 (file)
@@ -259,6 +259,7 @@ class IrcConnSetup:
     hostname: str = ''
     port: int = 0
     nick_wanted: str = ''
+    user_wanted: str = ''
     realname: str = ''
     password: str = ''
 
@@ -761,6 +762,8 @@ class Client(ABC, ClientQueueMixin):
             setattr(self.db, k, getattr(conn_setup, k))
         if self.db.port <= 0:
             self.db.port = PORT_SSL
+        if not self.db.user_wanted:
+            self.db.user_wanted = getuser()
 
     def connect(self) -> None:
         'Attempt to open connection, on success perform session init steps.'
@@ -772,10 +775,9 @@ class Client(ABC, ClientQueueMixin):
         except IrcConnAbortException as e:
             self.db.connection_state = f'failed to connect: {e}'
             return
-        self.db.users['me'].nickuserhost = NickUserHost(user=getuser())
         self.db.connection_state = 'connected'
         self.caps.start_negotation()
-        self.send('USER', self.db.users['me'].user.lstrip('~'),
+        self.send('USER', self.db.user_wanted,
                   '0', '*', self.db.realname)
         self.send('NICK', self.db.nick_wanted,)
 
index 1e5366ad78c9cbfe019555cc28dea2d533da4203..293dde9a65b8c3092421614c43f4402f8d44a060 100644 (file)
@@ -440,7 +440,7 @@ class ClientTui(BaseTui):
     def cmd__connect(self,
                      host_port: str,
                      nickname_pw: str = '',
-                     realname: str = ''
+                     username_realname: str = ''
                      ) -> Optional[str]:
         'Create Client and pass it via NewClientEvent.'
         split = host_port.split(':', maxsplit=1)
@@ -457,10 +457,16 @@ class ClientTui(BaseTui):
         split = nickname_pw.split(':', maxsplit=1)
         nickname = split[0] if nickname_pw else getuser()
         password = split[1] if len(split) > 1 else ''
-        if not realname:
+        if not username_realname:
+            username = ''
             realname = nickname
+        elif ':' in username_realname:
+            username, realname = username_realname.split(':', maxsplit=1)
+        else:
+            username = ''
+            realname = username_realname
         self._put(NewClientEvent(self._new_client(IrcConnSetup(
-            hostname, port, nickname, realname, password))))
+            hostname, port, nickname, username, realname, password))))
         return None
 
 
index 8fbff2234d52d581435a32412c8347b2665094f1..1b842a2c5f4f1f9d3f70eef2fe43a81788510f52 100644 (file)
--- a/test.txt
+++ b/test.txt
@@ -16,7 +16,7 @@
 # some simple expected command successes
 > /help
 0 # commands available in this window:
-0 #   /connect HOST_PORT [NICKNAME_PW] [REALNAME]
+0 #   /connect HOST_PORT [NICKNAME_PW] [USERNAME_REALNAME]
 0 #   /help
 0 #   /list
 0 #   /prompt_enter
@@ -43,7 +43,7 @@
 # ETC.
 
 # on /connect init databases, log in new windows
-> /connect foo.bar.baz foo:bar baz
+> /connect foo.bar.baz foo:bar bar:baz
 1,2 $ isupport cleared
 1,2 $ isupport:CHANTYPES set to: [#&]
 1,2 $ isupport:PREFIX set to: [(ov)@+]
 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 $ realname set to: [baz]
 1,2 $ password set to: [bar]
 1,2 $ port set to: [6697]
 1,2 $ connection_state set to: [connecting]
 
-1,2 $ users:me:nick set to: [?]
-1,2 $ ?!?@? renames ?
-1,2 $ users:me:user set to: [plom]
 1,2 $ connection_state set to: [connected]
 
 2 > CAP LS :302
-2 > USER plom 0 * :baz
+2 > USER bar 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!plom@baz.bar.foo foo :You are now logged in as foo
+2 < :foo.bar.baz 900 foo foo!bar@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 $ ?!plom@? renames foo
+1,2 $ ?!?@? renames foo
+1,2 $ users:me:user set to: [bar]
 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 ~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.
+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.
 
 > /join #test
 0 !# invalid prompt command: /join unknown
 
 > /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.bar.foo JOIN #test
+1,2 $ users:me:user set to: [~bar]
 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!~plom@baz.bar.foo PART :#test
-1,2,3,4 $ foo!~plom@baz.bar.foo parts
+2 < :foo!~bar@baz.bar.foo PART :#test
+1,2,3,4 $ foo!~bar@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!~plom@baz.bar.foo QUIT :Client Quit
-1,2,3,4 $ foo!~plom@baz.bar.foo quits: Client Quit
-2 < ERROR :Closing link: (plom@baz.bar.foo) [Quit: ircplom says bye]
-1,2,3,4 $ connection_state set to: [Closing link: (plom@baz.bar.foo) [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]]
 1,2,3,4 $ connection_state set to: []
 1,2 $ isupport cleared
 1,2 $ isupport:CHANTYPES set to: [#&]
 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 $ users:me:nick set to: [?]
-1,2,3,4 $ ?!?@? renames ?
-1,2 $ users:me:user set to: [plom]
 1,2,3,4 $ connection_state set to: [connected]
 2 > CAP LS :302
-2 > USER plom 0 * :baz
+2 > USER bar 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!plom@baz.bar.foo foo :You are now logged in as foo
+2 < :foo.bar.baz 900 foo foo!bar@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 $ ?!plom@? renames foo
+1,2,3,4 $ ?!?@? renames foo
+1,2 $ users:me:user set to: [bar]
 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 ~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.
+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.
 > /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.bar.foo JOIN #test
+1,2 $ users:me:user set to: [~bar]
 2 < :foo.bar.baz 353 foo @ #test :foo @bar
 1,2 $ users:4:nick set to: [?]
 , $ ?!?@? renames ?