diff options
Diffstat (limited to 'modules/line_handler')
| -rw-r--r-- | modules/line_handler/channel.py | 5 | ||||
| -rw-r--r-- | modules/line_handler/core.py | 20 |
2 files changed, 7 insertions, 18 deletions
diff --git a/modules/line_handler/channel.py b/modules/line_handler/channel.py index 759fdf45..716877b6 100644 --- a/modules/line_handler/channel.py +++ b/modules/line_handler/channel.py @@ -121,9 +121,8 @@ def handle_324(event): if event["args"][1] in event["server"].channels: channel = event["server"].channels.get(event["args"][1]) modes = event["args"][2] - for mode in modes[1:]: - if mode in event["server"].channel_modes: - channel.add_mode(mode) + args = event["args"][3:] + channel.parse_modes(modes, args[:]) def handle_329(event): channel = event["server"].channels.get(event["args"][1]) diff --git a/modules/line_handler/core.py b/modules/line_handler/core.py index b85a9677..979eaa31 100644 --- a/modules/line_handler/core.py +++ b/modules/line_handler/core.py @@ -80,22 +80,12 @@ def mode(events, event): is_channel = target[0] in event["server"].channel_types if is_channel: channel = event["server"].channels.get(target) + modes = event["args"][1] args = event["args"][2:] - _args = args[:] - modes = RE_MODES.findall(event["args"][1]) - for chunk in modes: - remove = chunk[0] == "-" - for mode in chunk[1:]: - if mode in event["server"].channel_modes: - channel.change_mode(remove, mode) - elif mode in event["server"].prefix_modes and len(args): - channel.change_mode(remove, mode, args.pop(0)) - elif (mode in event["server"].channel_list_modes or - mode in event["server"].channel_paramatered_modes): - args.pop(0) - elif not remove: - args.pop(0) - events.on("received.mode.channel").call(modes=modes, mode_args=_args, + + channel.parse_modes(modes, args[:]) + + events.on("received.mode.channel").call(modes=modes, mode_args=args, channel=channel, server=event["server"], user=user) elif event["server"].is_own_nickname(target): modes = event["args"][1] |
