_MsgParseExpectation('432', 3, source=_MsgSource.SERVER),
_MsgParseExpectation('433', 3, source=_MsgSource.SERVER),
_MsgParseExpectation('900', 4, source=_MsgSource.SERVER),
- _MsgParseExpectation('903', 2, source=_MsgSource.SERVER),
- _MsgParseExpectation('904', 2, source=_MsgSource.SERVER),
+ _MsgParseExpectation('903', params=(_MsgParam.NICKNAME_ME, _MsgParam.ANY),
+ source=_MsgSource.SERVER),
+ _MsgParseExpectation('904', params=(_MsgParam.NICKNAME_ME, _MsgParam.ANY),
+ source=_MsgSource.SERVER),
_MsgParseExpectation('AUTHENTICATE', params=('+',), source=_MsgSource.NONE),
_MsgParseExpectation('CAP', 3, 15, source=_MsgSource.SERVER),
_MsgParseExpectation('ERROR', params=(_MsgParam.ANY,),
self._db.nickname, remainder = msg.params[1].split('!', maxsplit=1)
self._db.username, self._db.client_host = remainder.split('@')
self._db.sasl_account = msg.params[2]
- elif self._match_msg(msg, '903')\
- or self._match_msg(msg, '904'): # RPL_SASLSUCCESS, …
- self._db.sasl_auth_state = 'WIN' if msg.verb == '903' else 'FAIL'
- self._caps.end_negotiation() # … or ERR_SASLFAIL
+ elif ((ret := self._match_msg(msg, '903')) # RPL_SASLSUCCESS
+ or (ret := self._match_msg(msg, '904'))): # ERR_SASLFAIL
+ self._db.sasl_auth_state = ret['any']
+ self._caps.end_negotiation()
elif self._match_msg(msg, 'AUTHENTICATE'):
auth = b64encode((self._db.nick_wanted + '\0'
+ self._db.nick_wanted + '\0'