home · contact · privacy
Optimize handling of 396, discard not-yet-encountered special case.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 21 Aug 2025 03:23:22 +0000 (05:23 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 21 Aug 2025 03:23:22 +0000 (05:23 +0200)
ircplom/client.py

index 81c273345d9c171ff0f7bc0555956660efc55d5f..f63ed5c9491370c7b8b0a2029b582836b190b597 100644 (file)
@@ -24,7 +24,7 @@ class _MsgTok(Enum):
     NICKNAME = auto()
     NONE = auto()
     SERVER = auto()
-    USER_ADDRESS = auto()
+    NICK_USER_HOST = auto()
 
 
 _MsgTokGuide = str | _MsgTok | tuple[str | _MsgTok, str]
@@ -133,7 +133,7 @@ _EXPECTATIONS += [
     _MsgParseExpectation(_MsgTok.SERVER,
                          '396',  # RPL_VISIBLEHOST
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
-                          (_MsgTok.ANY, ':host_maybe_w_user'),
+                          (_MsgTok.SERVER, 'set_db_attr:client_host'),
                           _MsgTok.ANY)),
 ]
 
@@ -142,7 +142,7 @@ _EXPECTATIONS += [
     _MsgParseExpectation(_MsgTok.SERVER,
                          '900',  # RPL_LOGGEDIN
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
-                          (_MsgTok.USER_ADDRESS, ':full_address'),
+                          (_MsgTok.NICK_USER_HOST, ':full_address'),
                           (_MsgTok.ANY, 'set_db_attr:sasl_account'),
                           _MsgTok.ANY)),
     _MsgParseExpectation(_MsgTok.SERVER,
@@ -254,7 +254,7 @@ _EXPECTATIONS += [
                          (_MsgTok.NICKNAME,
                           (_MsgTok.NICKNAME, ':used'),
                           _MsgTok.ANY)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':named'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':named'),
                          'NICK',
                          ((_MsgTok.NICKNAME, ':nickname'),)),
 ]
@@ -272,13 +272,13 @@ _EXPECTATIONS += [
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.CHANNEL, ':channel'),
                           _MsgTok.ANY)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':joiner'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':joiner'),
                          'JOIN',
                          ((_MsgTok.CHANNEL, ':channel'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':parter'),
                          'PART',
                          ((_MsgTok.CHANNEL, ':channel'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':parter'),
                          'PART',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':reason'))),
@@ -299,19 +299,19 @@ _EXPECTATIONS += [
                          'NOTICE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'NOTICE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'NOTICE',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'PRIVMSG',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'PRIVMSG',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':message'))),
@@ -326,14 +326,14 @@ _EXPECTATIONS += [
                          'MODE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, 'set_db_attr:user_modes'))),
-    _MsgParseExpectation(_MsgTok.USER_ADDRESS,
+    _MsgParseExpectation(_MsgTok.NICK_USER_HOST,
                          'MODE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, 'set_db_attr:user_modes'))),
     _MsgParseExpectation(_MsgTok.NONE,
                          'PING',
                          ((_MsgTok.ANY, ':reply'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':quitter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':quitter'),
                          'QUIT',
                          ((_MsgTok.ANY, ':message'),)),
 ]
@@ -817,7 +817,7 @@ class Client(ABC, ClientQueueMixin):
                         } if msg_tok[0] == '#' else None
             if ex_tok is _MsgTok.NICKNAME:
                 return msg_tok if msg_tok[0] not in '~&@%+# ' else None
-            if ex_tok is _MsgTok.USER_ADDRESS:
+            if ex_tok is _MsgTok.NICK_USER_HOST:
                 toks = msg_tok.split('!')
                 if len(toks) != 2:
                     return None
@@ -887,10 +887,6 @@ class Client(ABC, ClientQueueMixin):
             self._db.append_completable('motd', ret['line'])
         elif ret['verb'] == '376':  # RPL_ENDOFMOTD
             self._db.declare_complete('motd')
-        elif ret['verb'] == '396':  # RPL_VISIBLEHOST
-            # '@'-split because <https://defs.ircdocs.horse/defs/numerics>
-            # claims: "<hostname> can also be in the form <user@hostname>"
-            self._db.client_host = ret['host_maybe_w_user'].split('@')[-1]
         elif ret['verb'] == '401':  # ERR_NOSUCHNICK
             self._log(f'{ret["target"]} not online', scope=LogScope.CHAT,
                       target=ret['target'], alert=True)