_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'001',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'002',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'003',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'004',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'250',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'251',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'252',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'253',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'254',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'255',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'265',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'265',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'266',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'266',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY,
_MsgTok.ANY,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'375', # RPL_MOTDSTART already implied by 1st 372
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
]
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'005', # RPL_ISUPPORT
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':isupports'),
_MsgTok.ANY),
idx_into_list=1),
_MsgParseExpectation(_MsgTok.SERVER,
'372', # RPL_MOTD
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':line'))),
_MsgParseExpectation(_MsgTok.SERVER,
'376', # RPL_ENDOFMOTD
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'396', # RPL_VISIBLEHOST
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':host_maybe_w_user'),
_MsgTok.ANY)),
]
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'900', # RPL_LOGGEDIN
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.USER_ADDRESS, ':full_address'),
(_MsgTok.ANY, 'set_db_attr:sasl_account'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'903', # RPL_SASLSUCCESS
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, 'set_db_attr:sasl_auth_state'))),
_MsgParseExpectation(_MsgTok.SERVER,
'904', # ERR_SASLFAIL
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, 'set_db_attr:sasl_auth_state'))),
_MsgParseExpectation(_MsgTok.NONE,
'AUTHENTICATE',
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('NEW', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('DEL', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('ACK', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('NAK', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('LS', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('LS', ':subverb'),
('*', ':tbc'),
(_MsgTok.LIST, ':items'))),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('LIST', ':subverb'),
(_MsgTok.LIST, ':items'))),
_MsgParseExpectation(_MsgTok.SERVER,
'CAP',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
('LIST', ':subverb'),
('*', ':tbc'),
(_MsgTok.LIST, ':items'))),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
'432', # ERR_ERRONEOUSNICKNAME
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
_MsgTok.NICKNAME,
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'353', # RPL_NAMREPLY
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
'=',
(_MsgTok.CHANNEL, ':channel'),
(_MsgTok.LIST, ':names'))),
_MsgParseExpectation(_MsgTok.SERVER,
'366', # RPL_ENDOFNAMES
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.CHANNEL, ':channel'),
_MsgTok.ANY)),
_MsgParseExpectation((_MsgTok.USER_ADDRESS, ':joiner'),
_EXPECTATIONS += [
_MsgParseExpectation(_MsgTok.SERVER,
'401', # ERR_NOSUCKNICK
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.NICKNAME, ':target'),
_MsgTok.ANY)),
_MsgParseExpectation(_MsgTok.SERVER,
(_MsgTok.ANY, ':message'))),
_MsgParseExpectation(_MsgTok.SERVER,
'NOTICE',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':message'))),
_MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'NOTICE',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':message'))),
_MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'NOTICE',
(_MsgTok.ANY, ':message'))),
_MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'PRIVMSG',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, ':message'))),
_MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
'PRIVMSG',
((_MsgTok.ANY, 'set_db_attr:connection_state'),)),
_MsgParseExpectation(_MsgTok.NICKNAME,
'MODE',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, 'set_db_attr:user_modes'))),
_MsgParseExpectation(_MsgTok.USER_ADDRESS,
'MODE',
- ((_MsgTok.NICKNAME, 'set_nick:my_nickname'),
+ ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
(_MsgTok.ANY, 'set_db_attr:user_modes'))),
_MsgParseExpectation(_MsgTok.NONE,
'PING',
_completable_motd: _CompletableStringsList
_channels: dict[str, _ChannelDb]
+ def __setattr__(self, key: str, value) -> None:
+ super().__setattr__(key, value)
+ if key == 'nickname':
+ self.nick_wanted = value
+
def needs_arg(self, key: str) -> bool:
'Reply if attribute of key may reasonably be addressed without an arg.'
return not isinstance(getattr(self, key), (bool, int, str, tuple))
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)
target=ret['target'], alert=True)
elif ret['verb'] == '432': # ERR_ERRONEOUSNICKNAME
alert = 'nickname refused for bad format'
- if 'my_nickname' not in ret:
+ if 'nickname' not in ret:
alert += ', giving up'
self.close()
self._log(alert, alert=True)
elif ret['verb'] == '433': # ERR_NICKNAMEINUSE
self._log('nickname already in use, trying increment', alert=True)
- self.set_nick(self._db.nick_incremented)
+ self.send(IrcMessage('NICK', params=(self._db.nick_incremented,)))
elif ret['verb'] == '900': # RPL_LOGGEDIN
- self.set_nick(ret['full_address'][0], True)
+ self._db.nickname = ret['full_address'][0]
self._db.username, self._db.client_host = ret['full_address'][1:]
elif ret['verb'] in {'903', '904'}: # RPL_SASLSUCCESS, ERR_SASLFAIL
self._caps.end_negotiation()
ret['joiner'][0], True)
elif ret['verb'] == 'NICK':
if ret['named'][0] == self._db.nickname:
- self.set_nick(ret['nickname'], confirmed=True)
+ self._db.nickname = ret['nickname']
else:
for id_, ch in self._db.chans_of_user(ret['named'][0]).items():
ch.remove_completable('users', ret['named'][0], True)
'as_notice': msg.verb == 'NOTICE'}
if 'sender' in ret: # not just server message
kw |= {'sender': ret['sender'][0], 'scope': LogScope.CHAT,
- 'target': (ret['sender'][0] if 'my_nickname' in ret
+ 'target': (ret['sender'][0] if 'nickname' in ret
else ret['channel']['id'])}
self._log(ret['message'], out=False, **kw)
elif ret['verb'] == 'PART':
self._log(f'{ret["quitter"][0]} quits: {ret["message"]}',
LogScope.CHAT, target=id_)
- def set_nick(self, nickname: str, confirmed=False) -> None:
- 'Set ClientDb\'s .nick wanted, send NICK if != .nickname.'
- if confirmed:
- self._db.nickname = nickname
- self._db.nick_wanted = nickname
- if self.conn and self._db.nick_wanted != self._db.nickname:
- self.send(IrcMessage(verb='NICK', params=(self._db.nick_wanted,)))
-
@dataclass
class NewClientEvent(AffectiveEvent):