exits: _UpdatingDict[str]
prefixes: _UpdatingDict[tuple[str, ...]]
+ def prefixtok_for(self, user_id: str) -> str:
+ 'Make ":{prefixes}" log token for user of user_id.'
+ return ':' + ''.join(prefix for prefix, ids in self.prefixes.items()
+ if user_id in ids)
+
def recursive_set_and_report_change(self, update: _Update) -> None:
def diff_in(base: tuple[str, ...], excluder: tuple[str, ...]
) -> tuple[str, ...]:
if not update.old_value:
toks = []
for id_ in sorted(update.value):
- toks += [':' + ''.join(pfx for pfx in self.prefixes.keys()
- if id_ in self.prefixes[pfx]),
- f'NICK:{id_}',
- ':, ']
+ toks += [self.prefixtok_for(id_), f'NICK:{id_}', ':, ']
update.results += [
(_LogScope.CHAT, [':residents: '] + toks[:-1])]
else:
update.results += [(_LogScope.ALL, [':NOT CONNECTED'])]
elif update.key == 'message' and update.value:
assert isinstance(update.value, ChatMessage)
- is_server_msg = not (update.value.sender or update.value.target)
+ is_server = not (update.value.sender or update.value.target)
+ is_me = update.value.target and not update.value.sender
brackets = '()' if update.value.is_notice else '[]'
toks = [f':{brackets[0]}']
+ if update.value.target in self.channels.keys() and (
+ id_ := 'me' if is_me
+ else ''.join([id_ for id_, user in self.users.items()
+ if user.nick == update.value.sender][:1])):
+ toks += [self.channels[update.value.target].prefixtok_for(id_)]
toks += ['RAW:{bold|']
- toks += [f':{update.value.sender}' if update.value.sender
- else (':server' if is_server_msg else 'NICK:me')]
+ toks += ['NICK:me' if is_me else (':server' if is_server
+ else f':{update.value.sender}')]
toks += ['RAW:}']
toks += [f':{brackets[1]} {update.value.content}']
- update.results += [
- (_LogScope.SERVER if is_server_msg else _LogScope.CHAT, toks)]
+ update.results += [(_LogScope.SERVER if is_server
+ else _LogScope.CHAT, toks)]
elif update.key == 'motd' and update.value:
update.results += [(_LogScope.SERVER, [f':{line}'])
for line in update.value]
insert set-prefix : + MODESET=+v PREFIX=+ VERB=gains NICK=oof NEW_IDS :set to: [3]
insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=zab NEW_IDS :set to: [5]
insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=baz NEW_IDS :set to: [2], [5]
+insert set-prefix : + MODESET=+o PREFIX=@ VERB=gains NICK=foo NEW_IDS :set to: [2], [5], [me]
# check server setting unknown modes towards users
insert servermsglogged : + MSG ::foo.bar.baz MODE #ch_test0 +a zab
# check effects of other users' messages (PRIVMSG and NOTICE)
insert servermsglogged : + MSG ::baz!~baz@baz.baz PRIVMSG #ch_test0 :msg_test3 msg_test4
-log 3 < [baz] msg_test3 msg_test4
+log 3 < [@baz] msg_test3 msg_test4
insert servermsglogged : + MSG ::oof!~oof@oof.oof NOTICE #ch_test0 :msg_test5 msg_test6
insert user-set-to 1: + USER_ID=3 USERNAME=~oof USERHOST :oof.oof
-log 3 < (oof) msg_test5 msg_test6
+log 3 < (+oof) msg_test5 msg_test6
+
+# check effect own PRIVMSG into channel, now that we got @
+insert privmsg : + TARGET_WIN_ID=3 TARGET=#ch_test0 foo=@foo TXT :msg_test7
# check effect of server NOTICE to channel
-insert servermsglogged : + MSG ::*.?.net NOTICE #ch_test0 :msg_test6 msg_test7
-log 3 < (*.?.net) msg_test6 msg_test7
+insert servermsglogged : + MSG ::*.?.net NOTICE #ch_test0 :msg_test8 msg_test9
+log 3 < (*.?.net) msg_test8 msg_test9
# check part of user visible, and of user NOT visible in other channel
insert part-other-no-msg : + USER_ID=2 NICK=baz REMAINING_IDS :[3], [4], [5], [me]
-log 1 $ channels:#ch_test0:prefixes:@ set to: [5]
+log 1 $ channels:#ch_test0:prefixes:@ set to: [5], [me]
insert part-other-no-msg : + USER_ID=3 NICK=oof REMAINING_IDS :[4], [5], [me]
log 1 $ channels:#ch_test0:prefixes:+ emptied
log 1 $ users:3 deleted
insert part-other-0 : + NICK=zab ARGS :#ch_test0 :goodbye
insert user-set-to 1: + USER_ID=5 USERNAME=~zab USERHOST :zab.zab
insert part-other-1 : + USER_ID=5 NICK=zab exitPREFIX=:§ exitMSG=goodbye REMAINING_IDS=[4],§[me] § :
-log 1 $ channels:#ch_test0:prefixes:@ emptied
+log 1 $ channels:#ch_test0:prefixes:@ set to: [me]
log 1 $ users:5 deleted
# check re-join of user kept visible in other channel
insert part : + CHAN_WIN_ID=4 USERIDS_CLEAR=emptied CHANNEL :#ch_test1
insert cmd-disconnect-0
insert quit : + CHAN_WIN_ID=3 CHANNEL=#ch_test0 USER_ID=me NICK=foo foo@foo.foo=baz@baz.bar.foo REMAINING_IDS :[4], [6]
+log 1 $ channels:#ch_test0:prefixes:@ emptied
insert cmd-disconnect-1 :-1
insert disconnect1 : + WIN_IDS :2,3,4