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',
_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,)),
)
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}:
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 ''