topic: Topic
user_ids: Iterable[str]
exits: Dict[str]
+ prefixes: Dict[tuple[str, ...]]
modes_listy: Dict[tuple[str, ...]]
modes_valued: Dict[str]
modes_toggled: Iterable[str]
user_ids: UpdatingCompletableStringsSet
topic: _UpdatingCompletableTopic
exits: UpdatingDict[str]
+ prefixes: UpdatingCompletableDict[tuple[str, ...]]
modes_listy: UpdatingCompletableDict[tuple[str, ...]]
modes_valued: UpdatingCompletableDict[str]
modes_toggled: UpdatingCompletableStringsSet
user_id = self._id_from_nick(item, True)
self.user_ids.completable_add(user_id, on_complete=False)
if mode:
- self.modes_listy[mode]\
- = tuple(sorted(list(self.modes_listy.get(mode, tuple()))
+ self.prefixes[mode]\
+ = tuple(sorted(list(self.prefixes.get(mode, tuple()))
+ [user_id]))
def join_user(self, user: '_User') -> None:
self.exits[user.id_] = msg
self.user_ids.completable_remove(user.id_, on_complete=True)
del self.exits[user.id_]
- self.modes_listy.completed = None
+ self.prefixes.completed = None
for c in [c for c in self._db.get_membership_modes().keys()
- if user.id_ in self.modes_listy.get(c, tuple())]:
- self.modes_listy[c] = tuple(uid for uid in self.modes_listy[c]
- if uid != user.id_)
- self.modes_listy.complete()
+ if user.id_ in self.prefixes.get(c, tuple())]:
+ self.prefixes[c] = tuple(uid for uid in self.prefixes[c]
+ if uid != user.id_)
+ self.prefixes.complete()
self._db.users.purge()
def set_modes(self, modeset: str, args_str='') -> None:
except AssertionError:
raise ImplementationFail( # pylint: disable=raise-missing-from
f'channel mode setting {modeset} on args: {args_str}')
- modes_attrs = self.modes_listy, self.modes_valued, self.modes_toggled
+ modes_attrs = self.prefixes, self.modes_listy, self.modes_valued, self.modes_toggled
for attr in modes_attrs:
attr.completed = None
for do_add, char, arg in todos:
if char in modes['A'] + prefix_modes:
- char_modes = list(self.modes_listy.get(char, tuple()))
- self.modes_listy[char]\
- = tuple(sorted((char_modes + [arg]) if do_add
- else [item for item in char_modes
- if item != arg]))
+ target = (self.modes_listy if char in modes['A']
+ else self.prefixes)
+ char_modes = list(target.get(char, tuple()))
+ target[char] = tuple(sorted((char_modes + [arg]) if do_add
+ else [item for item in char_modes
+ if item != arg]))
elif char in modes['B'] + modes['C']:
if do_add:
self.modes_valued[char] = arg
class _UpdatingChannel(_UpdatingNode, _DbLinked, Channel):
user_ids: set[str]
exits: _UpdatingDict[str]
+ prefixes: _UpdatingDict[tuple[str, ...]]
modes_listy: _UpdatingDict[tuple[str, ...]]
modes_valued: _UpdatingDict[str]
modes_toggled: set[str]
def prefix_for(self, user_id: str) -> str:
'Construct prefixes string for user of user_id.'
d_prefixes = self._db.get_membership_modes()
- return ''.join(d_prefixes[c] for c, ids in self.modes_listy.items()
+ return ''.join(d_prefixes[c] for c, ids in self.prefixes.items()
if c in d_prefixes and user_id in ids)
def recursive_set_and_report_change(self, update: _Update) -> None:
return tuple(id_ for id_ in base if id_ not in excluder)
super().recursive_set_and_report_change(update)
- if update.full_path[2] == 'modes_listy'\
+ if update.full_path[2] == 'prefixes'\
and update.key in self._db.get_membership_modes().keys()\
and self.user_ids:
update.results += [
((_MsgToken.NICKNAME, 'setattr_db.users[me]:nick'),
(_MsgToken.CHANNEL, ':CHAN'),
_MsgToken.ANY), # comment
- bonus_tasks=('doafter_db.channels[CHAN].modes_listy.complete:',
+ bonus_tasks=('doafter_db.channels[CHAN].prefixes.complete:',
'doafter_db.channels[CHAN].user_ids.complete:')),
_MsgParseExpectation(
insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)=rab]
insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=zab]
insert join-channel-1-end-of-names range=:-3 [(WIN_ID)=3]
-log 1 $ channels:#ch_win3:modes_listy:o set to: [1]
-log 1 $ channels:#ch_win3:modes_listy:v set to: [2], [3]
+log 1 $ channels:#ch_win3:prefixes:o set to: [1]
+log 1 $ channels:#ch_win3:prefixes:v set to: [2], [3]
insert join-channel-1-end-of-names range=-2: [% (WIN_ID)=3 (RESIDENT_IDS)=[1],%[2],%[3],%[4],%[me] (RESIDENT_NICKS)=@baz,%+oof,%+rab,%zab,%foo]
# check (presence/absence of) membership prefixes mirrored in message display
# check server giving and taking membership prefixes
insert servermsg-mode [% (ARGS)=-o%baz]
-log 1 $ channels:#ch_win3:modes_listy:o emptied
+log 1 $ channels:#ch_win3:prefixes:o emptied
log 3 $ baz loses o
insert servermsg-mode [% (ARGS)=-v%rab]
-log 1 $ channels:#ch_win3:modes_listy:v set to: [2]
+log 1 $ channels:#ch_win3:prefixes:v set to: [2]
log 3 $ rab loses v
insert servermsg-mode [% (ARGS)=-v+oov%:oof%zab%baz%foo]
-log 1 $ channels:#ch_win3:modes_listy:o set to: [1], [4]
+log 1 $ channels:#ch_win3:prefixes:o set to: [1], [4]
log 3 $ baz gains o
log 3 $ zab gains o
-log 1 $ channels:#ch_win3:modes_listy:v set to: [me]
+log 1 $ channels:#ch_win3:prefixes:v set to: [me]
log 3 $ foo gains v
log 3 $ oof loses v
insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=4 (RESIDENT_NAMES)=foo%baz]
insert join-channel-1-end-of-names [% (WIN_ID)=4 (RESIDENT_IDS)=[1],%[me] (RESIDENT_NICKS)=baz,%foo]
insert part-no-msg-other [% (USER_ID)=1 (NICK)=baz (REMAINING_IDS)=[2],%[3],%[4],%[me]]
-log 1 $ channels:#ch_win3:modes_listy:o set to: [4]
+log 1 $ channels:#ch_win3:prefixes:o set to: [4]
insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%JOIN%:#ch_win3]
log 1 $ channels:#ch_win3:user_ids set to: [1], [2], [3], [4], [me]
log 3 $ baz!~bazbaz@baz.baz joins
insert user-set-to range=:1 [(USER_ID)=2 (USER_NICK)=baz]
insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)==quux]
insert join-channel-1-end-of-names range=:-3 [(WIN_ID)=7]
-log 1 $ channels:#ch_win7:modes_listy:o set to: [1]
-log 1 $ channels:#ch_win7:modes_listy:v set to: [2]
+log 1 $ channels:#ch_win7:prefixes:o set to: [1]
+log 1 $ channels:#ch_win7:prefixes:v set to: [2]
insert join-channel-1-end-of-names range=-2: [% (WIN_ID)=7 (RESIDENT_IDS)=[1],%[2],%[3],%[me] (RESIDENT_NICKS)=@bar,%+baz,%=quux,%foo]
insert isupport-set [(KEY)=PREFIX (VALUE)=(vE)+=]
insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=8 (RESIDENT_NAMES)=foo%@bar%+baz%=quux]
insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=@bar]
insert user-set-to range=:1 [(USER_ID)=5 (USER_NICK)=quux]
insert join-channel-1-end-of-names range=:-3 [(WIN_ID)=8]
-log 1 $ channels:#ch_win8:modes_listy:v set to: [2]
-log 1 $ channels:#ch_win8:modes_listy:E set to: [5]
+log 1 $ channels:#ch_win8:prefixes:v set to: [2]
+log 1 $ channels:#ch_win8:prefixes:E set to: [5]
insert join-channel-1-end-of-names range=-2: [% (WIN_ID)=8 (RESIDENT_IDS)=[2],%[4],%[5],%[me] (RESIDENT_NICKS)=+baz,%@bar,%=quux,%foo]
# test effect of USERLEN
× join-channel-1-end-of-names
insert servermsglogged [% (MSG)=:foo.bar.baz%366%foo%#ch_win(WIN_ID)%:End%of%/NAMES%list.]
-log 1 $ channels:#ch_win(WIN_ID):modes_listy cleared
+log 1 $ channels:#ch_win(WIN_ID):prefixes cleared
log 1 $ channels:#ch_win(WIN_ID):user_ids set to: (RESIDENT_IDS)
log (WIN_ID) $ residents: (RESIDENT_NICKS)
insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=4 (RESIDENT_NAMES)=foo%@baz]
insert user-set-to range=:1 [(USER_ID)=1 (USER_NICK)=baz]
insert join-channel-1-end-of-names range=:-3 [(WIN_ID)=4]
-log 1 $ channels:#ch_win4:modes_listy:o set to: [1]
+log 1 $ channels:#ch_win4:prefixes:o set to: [1]
insert join-channel-1-end-of-names range=-2: [% (WIN_ID)=4 (RESIDENT_IDS)=[1],%[me] (RESIDENT_NICKS)=@baz,%foo]
# process non-self channel JOIN