From 2eb915326eee292867f52a82b88c23ce5066c2ac Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 21 Aug 2025 04:52:37 +0200 Subject: [PATCH] Fix 433 name incrementation working on our rather than their name. --- ircplom/client.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ircplom/client.py b/ircplom/client.py index a018e6e..81c2733 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -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:] -- 2.30.2