diff options
| author | 2019-06-16 15:33:20 +0100 | |
|---|---|---|
| committer | 2019-06-16 15:33:20 +0100 | |
| commit | 5fa3d66a39dc22bff9a1d0345ebb70448b060e82 (patch) | |
| tree | 73748ded1f2aa662130f6fcf3c6a00f0d9877e27 /modules | |
| parent | Parse inbound bitbot.dev/multi-line batches (diff) | |
| signature | ||
Return all caps through received.cap.ls|new and check if valid in line_handler,
remove server.cap_started
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/ircv3_chathistory.py | 3 | ||||
| -rw-r--r-- | modules/ircv3_labeled_responses.py | 3 | ||||
| -rw-r--r-- | modules/ircv3_metadata.py | 5 | ||||
| -rw-r--r-- | modules/ircv3_multi_line.py | 3 | ||||
| -rw-r--r-- | modules/ircv3_resume.py | 9 | ||||
| -rw-r--r-- | modules/ircv3_server_time.py | 3 | ||||
| -rw-r--r-- | modules/line_handler/ircv3.py | 71 |
7 files changed, 36 insertions, 61 deletions
diff --git a/modules/ircv3_chathistory.py b/modules/ircv3_chathistory.py index 36609368..5f72850d 100644 --- a/modules/ircv3_chathistory.py +++ b/modules/ircv3_chathistory.py @@ -12,8 +12,7 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") @utils.hook("received.cap.new") def on_cap(self, event): - if EVENTPLAYBACK_CAP.available(event["capabilities"]): - return EVENTPLAYBACK_CAP.copy() + return EVENTPLAYBACK_CAP.copy() @utils.hook("received.batch.end") def batch_end(self, event): diff --git a/modules/ircv3_labeled_responses.py b/modules/ircv3_labeled_responses.py index 36fe8b35..952cddfa 100644 --- a/modules/ircv3_labeled_responses.py +++ b/modules/ircv3_labeled_responses.py @@ -23,8 +23,7 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") @utils.hook("received.cap.new") def on_cap(self, event): - if CAP.available(event["capabilities"]): - return CAP.copy() + return CAP.copy() @utils.hook("preprocess.send") def raw_send(self, event): diff --git a/modules/ircv3_metadata.py b/modules/ircv3_metadata.py index 55193dce..dd210d54 100644 --- a/modules/ircv3_metadata.py +++ b/modules/ircv3_metadata.py @@ -7,9 +7,8 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") def on_cap(self, event): cap = CAP.copy() - if cap.available(event["capabilities"]): - cap.on_ack(lambda: self._ack(event["server"])) - return cap + cap.on_ack(lambda: self._ack(event["server"])) + return cap def _ack(self, server): url = self.bot.get_setting("bot-url", IRCBot.SOURCE) diff --git a/modules/ircv3_multi_line.py b/modules/ircv3_multi_line.py index a014566c..e8b65c3b 100644 --- a/modules/ircv3_multi_line.py +++ b/modules/ircv3_multi_line.py @@ -7,8 +7,7 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") @utils.hook("received.cap.new") def on_cap(self, event): - if CAP.available(event["capabilities"]): - return CAP.copy() + return CAP.copy() @utils.hook("preprocess.send.privmsg") def preprocess_send_privmsg(self, event): diff --git a/modules/ircv3_resume.py b/modules/ircv3_resume.py index 19afb3b4..1750e954 100644 --- a/modules/ircv3_resume.py +++ b/modules/ircv3_resume.py @@ -24,10 +24,9 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") def on_cap_ls(self, event): - if CAP.available(event["capabilities"]): - cap = CAP.copy() - cap.on_ack(lambda: self._cap_ack(event["server"])) - return cap + cap = CAP.copy() + cap.on_ack(lambda: self._cap_ack(event["server"])) + return cap def _cap_ack(self, server): server.wait_for_capability("resume") @@ -39,7 +38,7 @@ class Module(ModuleManager.BaseModule): if event["args"][0] == "SUCCESS": resume_channels = event["server"].get_setting("resume-channels", []) self.log.info("Successfully resumed session") - event["server"].cap_started = False + event["server"].clear_waiting_capabilities() elif event["args"][0] == "TOKEN": token = self._get_token(event["server"]) diff --git a/modules/ircv3_server_time.py b/modules/ircv3_server_time.py index e363b341..31126b45 100644 --- a/modules/ircv3_server_time.py +++ b/modules/ircv3_server_time.py @@ -7,8 +7,7 @@ class Module(ModuleManager.BaseModule): @utils.hook("received.cap.ls") @utils.hook("received.cap.new") def on_cap(self, event): - if CAP.available(event["capabilities"]): - return CAP.copy() + return CAP.copy() @utils.hook("raw.received") def raw_recv(self, event): diff --git a/modules/line_handler/ircv3.py b/modules/line_handler/ircv3.py index 9111a537..3c389c85 100644 --- a/modules/line_handler/ircv3.py +++ b/modules/line_handler/ircv3.py @@ -17,70 +17,53 @@ CAPABILITIES = [ utils.irc.Capability(None, "draft/setname") ] -def _match_caps(our_capabilities, offered_capabilities): - matched = {} - for capability in our_capabilities: - available = capability.available(offered_capabilities) - if available: - matched[available] = capability - return matched - -def _caps_offered(server, caps): +def _cap_match(server, caps): + matched_caps = {} blacklist = server.get_setting("blacklisted-caps", []) - for cap_name, cap in caps.items(): - if not cap_name in blacklist: - server.capability_queue[cap_name] = cap + for cap in caps: + available = cap.available(server.server_capabilities) + if (available and not server.has_capability(cap) and + not available in blacklist): + matched_caps[available] = cap + return matched_caps def cap(events, event): capabilities = utils.parse.keyvalue(event["args"][-1]) subcommand = event["args"][1].upper() is_multiline = len(event["args"]) > 3 and event["args"][2] == "*" - if subcommand == "LS": - event["server"].cap_started = True + if subcommand == "DEL": + for capability in capabilities.keys(): + event["server"].agreed_capabilities.discard(capability) + del event["server"].server_capabilities[capability] + + events.on("received.cap.del").call(server=event["server"], + capabilities=capabilities) + elif subcommand == "ACK": + event["server"].agreed_capabilities.update(capabilities) + events.on("received.cap.ack").call(capabilities=capabilities, + server=event["server"]) + + if subcommand == "LS" or subcommand == "NEW": event["server"].server_capabilities.update(capabilities) if not is_multiline: server_caps = list(event["server"].server_capabilities.keys()) - matched_caps = _match_caps(CAPABILITIES, server_caps) + all_caps = CAPABILITIES[:] module_caps = events.on("received.cap.ls").call( capabilities=event["server"].server_capabilities, server=event["server"]) module_caps = list(filter(None, module_caps)) - matched_caps.update(_match_caps(module_caps, server_caps)) + all_caps.extend(module_caps) - _caps_offered(event["server"], matched_caps) + matched_caps = _cap_match(event["server"], all_caps) + event["server"].capability_queue.update(matched_caps) if event["server"].capability_queue: event["server"].send_capability_queue() else: event["server"].send_capability_end() - elif subcommand == "NEW": - capabilities_keys = capabilities.keys() - event["server"].server_capabilities.update(capabilities) - matched_caps = _match_caps(CAPABILITIES, list(capabilities_keys)) - - module_caps = events.on("received.cap.new").call( - server=event["server"], capabilities=capabilities) - module_caps = list(filter(None, module_caps)) - matched_caps.update(_match_caps(module_caps, capabilities_keys)) - - _caps_offered(event["server"], matched_caps) - - if event["server"].capability_queue: - event["server"].send_capability_queue() - elif subcommand == "DEL": - for capability in capabilities.keys(): - event["server"].agreed_capabilities.discard(capability) - del event["server"].server_capabilities[capability] - - events.on("received.cap.del").call(server=event["server"], - capabilities=capabilities) - elif subcommand == "ACK": - event["server"].agreed_capabilities.update(capabilities) - events.on("received.cap.ack").call(capabilities=capabilities, - server=event["server"]) if subcommand == "ACK" or subcommand == "NAK": ack = subcommand == "ACK" @@ -92,10 +75,8 @@ def cap(events, event): else: cap_obj.nak() - if (event["server"].cap_started and - not event["server"].capabilities_requested and + if (not event["server"].capabilities_requested and not event["server"].waiting_for_capabilities()): - event["server"].cap_started = False event["server"].send_capability_end() def authenticate(events, event): |
