home · contact · privacy
On /reconnect auto-join channels we were in on last connection close.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 25 Sep 2025 23:39:24 +0000 (01:39 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 25 Sep 2025 23:39:24 +0000 (01:39 +0200)
src/ircplom/client.py
src/test.txt

index d0bc4b89fb96b310223e72c4b0b9dc774b71dcb2..b2eca3351fe46e3b7570c99c3dd4256512aad1e1 100644 (file)
@@ -821,6 +821,7 @@ class Client(ABC, ClientQueueMixin):
             self.db.port = PORT_SSL
         if not self.db.user_wanted:
             self.db.user_wanted = getuser()
+        self._autojoins: set[str] = set()
 
     def connect(self) -> None:
         'Attempt to open connection, on success perform session init steps.'
@@ -847,6 +848,9 @@ class Client(ABC, ClientQueueMixin):
 
     def close(self) -> None:
         'Close connection and wipe memory of its states.'
+        if not self._autojoins:
+            for name in self.db.channels.keys():
+                self._autojoins.add(name)
         self.db.clear()
         if self.conn:
             self.conn.close()
@@ -907,7 +911,11 @@ class Client(ABC, ClientQueueMixin):
                         setattr(node, tok_name, ret[tok_name])
                     else:
                         getattr(node, tok_name)()
-        if ret['_verb'] == '005':   # RPL_ISUPPORT
+        if ret['_verb'] == '001':   # RPL_WELCOME
+            for name in self._autojoins:
+                self.send('JOIN', name)
+            self._autojoins.clear()
+        elif ret['_verb'] == '005':   # RPL_ISUPPORT
             for item in ret['isupport']:
                 if item[0] == '-':
                     del self.db.isupport[item[1:]]
index ba4f473482f76051f13b9931f32ac03e77545ae8..7c1c154999d4af583c44e20f0beee3eaa0b11928 100644 (file)
 > /reconnect
 repeat 63:65
 2,3,4,5,6,7 $ CONNECTED
-repeat 66:158
+repeat 66:120
+1 > JOIN :#testtest
+repeat 120:158
 repeat 168:382
 
 > /quit