From: Christian Heller Date: Tue, 23 Dec 2025 11:09:54 +0000 (+0100) Subject: For MODE message parsing, collect mode arguments as tuple from the start. X-Git-Url: https://plomlompom.com/repos/booking/%22https:/validator.w3.org/processes?a=commitdiff_plain;h=6804c789c4564190db408166c8b6cdd2656c4f4b;p=ircplom For MODE message parsing, collect mode arguments as tuple from the start. --- diff --git a/src/ircplom/client.py b/src/ircplom/client.py index 2727558..c59f51d 100644 --- a/src/ircplom/client.py +++ b/src/ircplom/client.py @@ -239,12 +239,11 @@ class _Channel(UpdatingAttrsMixin, _DbLinked, Channel): self.prefixes.complete() self._db.users.purge() - def set_modes(self, modeset: str, args_str='') -> None: + def set_modes(self, modeset: str, args: tuple[str, ...]) -> None: 'Apply MODE settings on channels.' prefix_modes = ''.join(self._db.get_membership_modes().keys()) modes = {c: '' for c in 'ABCD'} | self._db.get_chanmodes() todos: list[tuple[bool, str, str]] = [] - args = args_str.split() idx_args = 0 do_add = False try: @@ -267,7 +266,7 @@ class _Channel(UpdatingAttrsMixin, _DbLinked, Channel): assert idx_args == len(args) except AssertionError: raise ImplementationFail( # pylint: disable=raise-missing-from - f'channel mode setting {modeset} on args: {args_str}') + f'channel mode setting {modeset} on args: {args}') modes_attrs = self.prefixes, self.modes_listy, self.modes_valued, self.modes_toggled for attr in modes_attrs: attr.completed = None diff --git a/src/ircplom/msg_parse_expectations.py b/src/ircplom/msg_parse_expectations.py index 4affc1b..c7ff34e 100644 --- a/src/ircplom/msg_parse_expectations.py +++ b/src/ircplom/msg_parse_expectations.py @@ -607,17 +607,12 @@ MSG_EXPECTATIONS: list[_MsgParseExpectation] = [ ((_MsgToken.NICKNAME, 'setattr_db.users[me]:nick'), (_MsgToken.ANY, 'setattr_db.users[me]:modes'))), - _MsgParseExpectation( - 'MODE', - _MsgToken.SERVER, - ((_MsgToken.CHANNEL, ':CHANNEL'), - (_MsgToken.ANY, 'do_db.channels[CHANNEL].set_modes:modeset'))), _MsgParseExpectation( 'MODE', _MsgToken.SERVER, ((_MsgToken.CHANNEL, ':CHANNEL'), (_MsgToken.ANY, ':modeset'), - (_MsgToken.ANY, ':args')), + (_MsgToken.LIST, ':args')), bonus_tasks=('do_db.channels[CHANNEL].set_modes:modeset,args',)), _MsgParseExpectation( diff --git a/src/tests/channel_modes.test b/src/tests/channel_modes.test index a817ff7..9593a88 100644 --- a/src/tests/channel_modes.test +++ b/src/tests/channel_modes.test @@ -77,15 +77,15 @@ insert msg-prefixed-short [(USER_ID)=1 (NICK)=baz (PREFIX)=] # check server setting unknown or invalid modes insert servermsg-mode [(ARGS)=+f] -insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+f%on%args:%] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+f%on%args:%()] insert servermsg-mode [% (ARGS)=-g%grab] -insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%-g%on%args:%grab] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%-g%on%args:%('grab',)] insert servermsg-mode [(ARGS)=+l] -insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+l%on%args:%] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+l%on%args:%()] insert servermsg-mode [% (ARGS)=+aBc%:foo%bar] -insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+aBc%on%args:%foo%bar] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%+aBc%on%args:%('foo',%'bar')] insert servermsg-mode [(ARGS)=a] -insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%a%on%args:%] +insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=channel%mode%setting%a%on%args:%()] # check server setting type-A modes insert servermsg-mode [% (ARGS)=+l%:foo]