From 9f374a6f9f9528a6bc96e7ffff24ba5f9a3cd050 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Tue, 19 Aug 2025 21:18:28 +0200 Subject: [PATCH] Also define PRIVMSG and NOTICE handlings into new scheme. --- ircplom/client.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/ircplom/client.py b/ircplom/client.py index 639ce14..db72800 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -87,14 +87,19 @@ _EXPECTATIONS: tuple[_MsgParseExpectation, ...] = ( params=(_MsgTok.CHANNEL,)), _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'JOIN', params=(_MsgTok.CHANNEL,)), + _MsgParseExpectation(_MsgTok.NICKNAME_ME, 'MODE', + params=(_MsgTok.NICKNAME_ME, _MsgTok.ANY)), _MsgParseExpectation(_MsgTok.USER_ADDRESS_ME, 'MODE', params=(_MsgTok.NICKNAME_ME, _MsgTok.ANY)), _MsgParseExpectation(_MsgTok.USER_ADDRESS_ME, 'NICK', params=(_MsgTok.NICKNAME,)), _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'NICK', params=(_MsgTok.NICKNAME,)), - _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'NOTICE', 2), - _MsgParseExpectation(_MsgTok.SERVER, 'NOTICE', 2), + _MsgParseExpectation(_MsgTok.SERVER, 'NOTICE', params=('*', _MsgTok.ANY)), + _MsgParseExpectation(_MsgTok.SERVER, 'NOTICE', + params=(_MsgTok.NICKNAME, _MsgTok.ANY)), + _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'NOTICE', + params=(_MsgTok.NICKNAME_ME, _MsgTok.ANY)), _MsgParseExpectation(_MsgTok.USER_ADDRESS_ME, 'PART', params=(_MsgTok.CHANNEL,)), _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'PART', @@ -102,8 +107,10 @@ _EXPECTATIONS: tuple[_MsgParseExpectation, ...] = ( _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'PART', params=(_MsgTok.CHANNEL, _MsgTok.ANY)), _MsgParseExpectation(_MsgTok.NONE, 'PING', params=(_MsgTok.ANY,)), - _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'PRIVMSG', 2), - _MsgParseExpectation(_MsgTok.SERVER, 'PRIVMSG', 2), + _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'PRIVMSG', + params=(_MsgTok.NICKNAME_ME, _MsgTok.ANY)), + _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'PRIVMSG', + params=(_MsgTok.CHANNEL, _MsgTok.ANY)), _MsgParseExpectation(_MsgTok.USER_ADDRESS, 'QUIT', params=(_MsgTok.ANY,)), ) @@ -615,7 +622,7 @@ class Client(ABC, ClientQueueMixin): to_return |= {'ch_name': msg_tok, 'channel': self._db.chan(msg_tok)} elif ex_tok in {_MsgTok.NICKNAME, _MsgTok.NICKNAME_ME}: - if msg_tok[0] in '~&@%+# ': + if msg_tok[0] in '~&@%+# *': break to_return[key_nick] = msg_tok elif ex_tok in {_MsgTok.USER_ADDRESS, _MsgTok.USER_ADDRESS_ME}: @@ -719,15 +726,15 @@ class Client(ABC, ClientQueueMixin): self._log(f'{ret["sender"]} becomes {ret["nickname"]}', scope=LogScope.CHAT, target=nom) elif (ret := self._match_msg(msg, 'NOTICE'))\ - and (msg.params[0] != '*' or not self._db.nickname): - kw = {'sender': ret['sender'], 'scope': LogScope.CHAT - } if 'sender' in ret else {} - self._log(msg.params[-1], out=False, target=msg.params[0], - as_notice=True, **kw) - elif (ret := self._match_msg(msg, 'PRIVMSG')) and msg.params[0] != '*': - kw = {'sender': ret['sender'], 'scope': LogScope.CHAT + or (ret := self._match_msg(msg, 'PRIVMSG')): + kw = {'sender': ret['sender'], 'scope': LogScope.CHAT, + 'target': ret.get('ch_name', ret['sender']), } if 'sender' in ret else {} - self._log(msg.params[-1], out=False, target=msg.params[0], **kw) + if msg.verb == 'NOTICE': + if 'nickname' in ret and 'nickname_me' not in ret: + self.set_nick(ret['nickname'], confirmed=True) + kw |= {'as_notice': True} + self._log(ret['any'], out=False, **kw) elif (ret := self._match_msg(msg, 'PART')): log_msg = f'{ret["sender"]} {msg.verb.lower()}s {ret["ch_name"]}' log_msg += f': {ret["any"]}' if 'any' in ret else '' -- 2.30.2