home · contact · privacy
Fix 433 name incrementation working on our rather than their name.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 21 Aug 2025 02:52:37 +0000 (04:52 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 21 Aug 2025 02:52:37 +0000 (04:52 +0200)
ircplom/client.py

index a018e6ee24d4813a3099afee53652e0dbe75d109..81c273345d9c171ff0f7bc0555956660efc55d5f 100644 (file)
@@ -252,7 +252,7 @@ _EXPECTATIONS += [
     _MsgParseExpectation(_MsgTok.SERVER,
                          '433',  # ERR_NICKNAMEINUSE
                          (_MsgTok.NICKNAME,
-                          _MsgTok.NICKNAME,
+                          (_MsgTok.NICKNAME, ':used'),
                           _MsgTok.ANY)),
     _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':named'),
                          'NICK',
@@ -339,6 +339,16 @@ _EXPECTATIONS += [
 ]
 
 
+def _nick_incremented(nickname: str) -> str:
+    'Return nickname with number suffix incremented, or "0" if none.'
+    name, digits = ([(nickname, '')]
+                    + [(nickname[:i], nickname[i:])
+                       for i in range(len(nickname), 0, -1)
+                       if nickname[i:].isdigit()]
+                    )[-1]
+    return name + str(0 if not digits else (int(digits) + 1))
+
+
 class LogScope(Enum):
     'Where log messages should go.'
     ALL = auto()
@@ -692,16 +702,6 @@ class _ClientDb(_Db, SharedClientDbFields):
         'Return part of channels dictionary for channels user is currently in.'
         return {k: v for k, v in self._channels.items() if user in v.users}
 
-    @property
-    def nick_incremented(self) -> str:
-        'Return .nick_wanted with number suffix incremented, or "0" if none.'
-        name, digits = ([(self.nick_wanted, '')]
-                        + [(self.nick_wanted[:i], self.nick_wanted[i:])
-                           for i in range(len(self.nick_wanted), 0, -1)
-                           if self.nick_wanted[i:].isdigit()]
-                        )[-1]
-        return name + str(0 if not digits else (int(digits) + 1))
-
 
 class Client(ABC, ClientQueueMixin):
     'Abstracts socket connection, loop over it, and handling messages from it.'
@@ -902,7 +902,7 @@ class Client(ABC, ClientQueueMixin):
             self._log(alert, alert=True)
         elif ret['verb'] == '433':  # ERR_NICKNAMEINUSE
             self._log('nickname already in use, trying increment', alert=True)
-            self.send(IrcMessage('NICK', params=(self._db.nick_incremented,)))
+            self.send(IrcMessage('NICK', (_nick_incremented(ret['used']),)))
         elif ret['verb'] == '900':  # RPL_LOGGEDIN
             self._db.nickname = ret['full_address'][0]
             self._db.username, self._db.client_host = ret['full_address'][1:]