diff options
| author | 2018-08-30 11:12:48 +0100 | |
|---|---|---|
| committer | 2018-08-30 11:12:48 +0100 | |
| commit | 9b7c7035f9c6a5ee34bf3ca13167176b669a5a18 (patch) | |
| tree | b85793e017b9bbf7d938b077fe8463727d188042 /IRCLineHandler.py | |
| parent | Only show 2 biggest units in !seen (diff) | |
Refactor handling MODE in IRCLineHandler
Diffstat (limited to 'IRCLineHandler.py')
| -rw-r--r-- | IRCLineHandler.py | 47 |
1 files changed, 16 insertions, 31 deletions
diff --git a/IRCLineHandler.py b/IRCLineHandler.py index 6175f71a..b49717ae 100644 --- a/IRCLineHandler.py +++ b/IRCLineHandler.py @@ -5,6 +5,7 @@ RE_PREFIXES = re.compile(r"\bPREFIX=\((\w+)\)(\W+)(?:\b|$)") RE_CHANMODES = re.compile( r"\bCHANMODES=(\w*),(\w*),(\w*),(\w*)(?:\b|$)") RE_CHANTYPES = re.compile(r"\bCHANTYPES=(\W+)(?:\b|$)") +RE_MODES = re.compile(r"[-+]\w+") class LineHandler(object): def __init__(self, bot): @@ -290,42 +291,26 @@ class LineHandler(object): channel = event["server"].get_channel(target) remove = False args = event["args"][2:] - modes = event["args"][1] - for i, char in enumerate(modes): - if char == "+": - remove = False - elif char == "-": - remove = True - else: - if char in event["server"].channel_modes: - if remove: - channel.remove_mode(char) - else: - channel.add_mode(char) - elif char in event["server"].mode_prefixes.values( + 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"].mode_prefixes.values( ) and len(args): - nickname = args.pop(0) - if remove: - channel.remove_mode(char, nickname) - else: - channel.add_mode(char, nickname) - elif len(args): + channel.change_mode(remove, mode, args.pop(0)) + else: args.pop(0) self.bot.events.on("received").on("mode").call(modes=modes, mode_args=args, channel=channel, server=event["server"]) elif event["server"].is_own_nickname(target): - modes = event["arbitrary"] - remove = False - for i, char in enumerate(modes): - if char == "+": - remove = False - elif char == "-": - remove = True - else: - if remove: - event["server"].remove_own_mode(char) - else: - event["server"].add_own_mode(char) + modes = RE_MODES.findall(event["arbitrary"] or args[1]) + for chunk in modes: + remove = chunk[0] == "-" + for mode in chunk[1:] + event["server"].change_own_mode(remove, mode) self.bot.events.on("self").on("mode").call(modes=modes, server=event["server"]) |
