diff options
| author | 2019-07-03 08:13:28 +0100 | |
|---|---|---|
| committer | 2019-07-03 08:13:28 +0100 | |
| commit | 76ab7935a04489017b6bb242593989621f1cfc30 (patch) | |
| tree | dbdae4b55d22cd6fbe7a31083f17328439a34e31 /src/IRCChannel.py | |
| parent | Show an error (instead of throwing) when !define gets a 404 (diff) | |
| signature | ||
return parsed modes from IRCChannel.parse_modes, pass through mode events
Diffstat (limited to 'src/IRCChannel.py')
| -rw-r--r-- | src/IRCChannel.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/IRCChannel.py b/src/IRCChannel.py index dd564065..f03bc837 100644 --- a/src/IRCChannel.py +++ b/src/IRCChannel.py @@ -109,23 +109,32 @@ class Channel(IRCObject.Object): else: self.add_mode(mode, arg) - def parse_modes(self, modes: str, args: typing.List[str]): + def parse_modes(self, modes: str, args: typing.List[str] + ) -> typing.List[typing.Tuple[str, typing.Optional[str]]]: + new_modes: typing.List[typing.Tuple[str, typing.Optional[str]]] = [] for chunk in RE_MODES.findall(modes): remove = chunk[0] == "-" for mode in chunk[1:]: + new_arg = None if mode in self.server.channel_list_modes: - args.pop(0) + new_arg = args.pop(0) elif (mode in self.server.channel_paramatered_modes or mode in self.server.prefix_modes): - self.change_mode(remove, mode, args.pop(0)) + new_arg = args.pop(0) + self.change_mode(remove, mode, new_arg) elif mode in self.server.channel_setting_modes: if remove: self.change_mode(remove, mode) else: - self.change_mode(remove, mode, args.pop(0)) + new_arg = args.pop(0) + self.change_mode(remove, mode, new_arg) elif mode in self.server.channel_modes: self.change_mode(remove, mode) + mode_str = "%s%s" % ("-" if remove else "+", mode) + new_modes.append((mode_str, new_arg)) + return new_modes + def set_setting(self, setting: str, value: typing.Any): self.bot.database.channel_settings.set(self.id, setting, value) def get_setting(self, setting: str, default: typing.Any=None |
