_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'001',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'002',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'003',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'004',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'250',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'251',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'252',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'253',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'254',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'255',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'265',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'265',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'266',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'266',
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'375', # RPL_MOTDSTART already implied by 1st 372
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
]
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'005', # RPL_ISUPPORT
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'isupports'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':isupports'),
_MsgTok.ANY),
idx_into_list=1),
_MsgParseExpectation(_MsgTok.SERVER,
'372', # RPL_MOTD
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'line'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':line'))),
_MsgParseExpectation(_MsgTok.SERVER,
'376', # RPL_ENDOFMOTD
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'396', # RPL_VISIBLEHOST
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'host_maybe_w_user'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':host_maybe_w_user'),
_MsgTok.ANY)),
]
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'900', # RPL_LOGGEDIN
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.USER_ADDRESS, 'full_address'),
- (_MsgTok.ANY, 'account'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.USER_ADDRESS, ':full_address'),
+ (_MsgTok.ANY, 'set_db_attr:sasl_account'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'903', # RPL_SASLSUCCESS
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'result'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, 'set_db_attr:sasl_auth_state'))),
_MsgParseExpectation(_MsgTok.SERVER,
'904', # ERR_SASLFAIL
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'result'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, 'set_db_attr:sasl_auth_state'))),
_MsgParseExpectation(_MsgTok.NONE,
'AUTHENTICATE',
('+',)),
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('NEW', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('NEW', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('DEL', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('DEL', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('ACK', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ('ACK', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('ACK', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('ACK', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('NAK', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ('NAK', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('NAK', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('NAK', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('LS', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ('LS', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('LS', 'subverb'),
- ('*', 'tbc'),
- (_MsgTok.LIST, 'items'))),
+ ('LS', ':subverb'),
+ ('*', ':tbc'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('LS', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('LS', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('LS', 'subverb'),
- ('*', 'tbc'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('LS', ':subverb'),
+ ('*', ':tbc'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('LIST', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ('LIST', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
('*',
- ('LIST', 'subverb'),
- ('*', 'tbc'),
- (_MsgTok.LIST, 'items'))),
+ ('LIST', ':subverb'),
+ ('*', ':tbc'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('LIST', 'subverb'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('LIST', ':subverb'),
+ (_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- ('LIST', 'subverb'),
- ('*', 'tbc'),
- (_MsgTok.LIST, 'items'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ('LIST', ':subverb'),
+ ('*', ':tbc'),
+ (_MsgTok.LIST, ':items'))),
]
# nickname management
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'432', # ERR_ERRONEOUSNICKNAME
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
_MsgTok.NICKNAME,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
(_MsgTok.NICKNAME,
_MsgTok.NICKNAME,
_MsgTok.ANY)),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'named'),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':named'),
'NICK',
- ((_MsgTok.NICKNAME, 'nickname'),)),
+ ((_MsgTok.NICKNAME, ':nickname'),)),
]
# joining/leaving
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'353', # RPL_NAMREPLY
- ((_MsgTok.NICKNAME, 'my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
'=',
- (_MsgTok.CHANNEL, 'channel'),
- (_MsgTok.LIST, 'names'))),
+ (_MsgTok.CHANNEL, ':channel'),
+ (_MsgTok.LIST, ':names'))),
_MsgParseExpectation(_MsgTok.SERVER,
'366', # RPL_ENDOFNAMES
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.CHANNEL, 'channel'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.CHANNEL, ':channel'),
_MsgTok.ANY)),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'joiner'),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':joiner'),
'JOIN',
- ((_MsgTok.CHANNEL, 'channel'),)),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'parter'),
+ ((_MsgTok.CHANNEL, ':channel'),)),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
'PART',
- ((_MsgTok.CHANNEL, 'channel'),)),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'parter'),
+ ((_MsgTok.CHANNEL, ':channel'),)),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
'PART',
- ((_MsgTok.CHANNEL, 'channel'),
- (_MsgTok.ANY, 'reason'))),
+ ((_MsgTok.CHANNEL, ':channel'),
+ (_MsgTok.ANY, ':reason'))),
]
# messaging
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'401', # ERR_NOSUCKNICK
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.NICKNAME, 'target'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.NICKNAME, ':target'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'NOTICE',
('*',
- (_MsgTok.ANY, 'message'))),
+ (_MsgTok.ANY, ':message'))),
_MsgParseExpectation(_MsgTok.SERVER,
'NOTICE',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'message'))),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'sender'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':message'))),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'NOTICE',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'message'))),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'sender'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':message'))),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'NOTICE',
- ((_MsgTok.CHANNEL, 'channel'),
- (_MsgTok.ANY, 'message'))),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'sender'),
+ ((_MsgTok.CHANNEL, ':channel'),
+ (_MsgTok.ANY, ':message'))),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'PRIVMSG',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'message'))),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'sender'),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, ':message'))),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'PRIVMSG',
- ((_MsgTok.CHANNEL, 'channel'),
- (_MsgTok.ANY, 'message'))),
+ ((_MsgTok.CHANNEL, ':channel'),
+ (_MsgTok.ANY, ':message'))),
]
# misc.
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.NONE,
'ERROR',
- ((_MsgTok.ANY, 'reason'),)),
+ ((_MsgTok.ANY, 'set_db_attr:connection_state'),)),
_MsgParseExpectation(_MsgTok.NICKNAME,
'MODE',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'mode'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, 'set_db_attr:user_modes'))),
_MsgParseExpectation(_MsgTok.USER_ADDRESS,
'MODE',
- ((_MsgTok.NICKNAME, 'my_nickname'),
- (_MsgTok.ANY, 'mode'))),
+ ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ (_MsgTok.ANY, 'set_db_attr:user_modes'))),
_MsgParseExpectation(_MsgTok.NONE,
'PING',
- ((_MsgTok.ANY, 'reply'),)),
- _MsgParseExpectation((_MsgTok.USER_ADDRESS, 'quitter'),
+ ((_MsgTok.ANY, ':reply'),)),
+ _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':quitter'),
'QUIT',
- ((_MsgTok.ANY, 'message'),)),
+ ((_MsgTok.ANY, ':message'),)),
]
return msg_tok
for ex in [ex for ex in _EXPECTATIONS if ex.verb == msg.verb]:
- to_return: dict[str, Any] = {'verb': ex.verb}
+ tasks: dict[str, list[str]] = {}
+ to_return: dict[str, Any] = {'verb': ex.verb, '_tasks': tasks}
ex_tok_fields = tuple([ex.source] + list(ex.params))
msg_params: list[str | list[str]]
if ex.idx_into_list < 0:
for idx, ex_tok in enumerate(ex_tok_fields):
ex_tok, key = ((ex_tok[0], ex_tok[1])
if isinstance(ex_tok, tuple) else (ex_tok, ''))
+ task, key = key.split(':', maxsplit=1) if key else ('', '')
+ if task:
+ tasks[task] = tasks.get(task, []) + [key]
to_return[key] = param_match(ex_tok, msg_tok_fields[idx])
if to_return[key] is None:
passing = False
'Log msg.raw, then process incoming msg into appropriate client steps.'
self._log(msg.raw, scope=LogScope.RAW, out=False)
ret = self._match_msg(msg)
- if 'my_nickname' in ret:
- self.set_nick(ret['my_nickname'], confirmed=True)
if 'verb' not in ret:
self._log(f'PLEASE IMPLEMENT HANDLER FOR: {msg.raw}')
- elif ret['verb'] == '005': # RPL_ISUPPORT
+ return
+ for task, args in ret['_tasks'].items():
+ for arg in args:
+ if task == 'set_db_attr':
+ setattr(self._db, arg, ret[arg])
+ elif task == 'set_nick':
+ self.set_nick(ret[arg], confirmed=True)
+ if ret['verb'] == '005': # RPL_ISUPPORT
for item in ret['isupports']:
toks = item.split('=', maxsplit=1)
if toks[0][0] == '-':
elif ret['verb'] == '900': # RPL_LOGGEDIN
self.set_nick(ret['full_address'][0], True)
self._db.username, self._db.client_host = ret['full_address'][1:]
- self._db.sasl_account = ret['account']
elif ret['verb'] in {'903', '904'}: # RPL_SASLSUCCESS, ERR_SASLFAIL
- self._db.sasl_auth_state = ret['result']
self._caps.end_negotiation()
elif ret['verb'] == 'AUTHENTICATE':
auth = b64encode((self._db.nick_wanted + '\0'
else:
self._caps.end_negotiation()
elif ret['verb'] == 'ERROR':
- self._db.connection_state = ret['reason']
self.close()
elif ret['verb'] == 'JOIN':
self._log(f'{ret["joiner"][0]} {msg.verb.lower()}s '
if ret['joiner'][0] != self._db.nickname:
ret['channel']['db'].append_completable('users',
ret['joiner'][0], True)
- elif ret['verb'] == 'MODE':
- self._db.user_modes = ret['mode']
elif ret['verb'] == 'NICK':
if ret['named'][0] == self._db.nickname:
self.set_nick(ret['nickname'], confirmed=True)