diff options
| author | 2019-06-04 17:53:40 +0100 | |
|---|---|---|
| committer | 2019-06-04 17:54:19 +0100 | |
| commit | 2d46fe0cbf9a383038b8715b27cfa587e5a50ecf (patch) | |
| tree | 64a34a0b8aaf1471a7b4b21420ae4a9760c727f1 | |
| parent | Add new BatchType object, to match like how Capability and MessageTag do (diff) | |
| signature | ||
labels: Use BatchType to match, pass `lines` not `line`, batch ID isn't a label,
fire event on label response
| -rw-r--r-- | modules/ircv3_labeled_responses.py | 16 | ||||
| -rw-r--r-- | src/utils/irc/__init__.py | 9 |
2 files changed, 16 insertions, 9 deletions
diff --git a/modules/ircv3_labeled_responses.py b/modules/ircv3_labeled_responses.py index 59bab81a..d6ee7975 100644 --- a/modules/ircv3_labeled_responses.py +++ b/modules/ircv3_labeled_responses.py @@ -31,20 +31,22 @@ class Module(ModuleManager.BaseModule): label = str(uuid.uuid4()) event["line"].tags[tag_key] = label - event["server"]._label_cache[label] = event["line"] + event["server"]._label_cache[label] = [event["line"], + event["events"]] @utils.hook("raw.received") def raw_recv(self, event): if not event["line"].command == "BATCH": label = TAG.get_value(event["line"].tags) if not label == None: - self._recv(event["server"], label, event["line"]) + self._recv(event["server"], label, [event["line"]]) @utils.hook("received.batch.end") def batch_end(self, event): - if TAG.match(event["batch"].type): - self._recv(event["server"], event["batch"].identifier, None) + if BATCH.match(event["batch"].type): + label = TAG.get_value(event["batch"].tags) + self._recv(event["server"], label, event["batch"].get_lines()) - def _recv(self, server, label, line): - cached_line = server._label_cache.pop(label) - # do something with the line! + def _recv(self, server, label, lines): + cached_line, cached_events = server._label_cache.pop(label) + cached_events.on("labeled-response").call(lines=lines) diff --git a/src/utils/irc/__init__.py b/src/utils/irc/__init__.py index 12abc144..c9b50c6c 100644 --- a/src/utils/irc/__init__.py +++ b/src/utils/irc/__init__.py @@ -275,11 +275,16 @@ class Capability(object): self._caps = set([name, draft_name]) self._on_ack_callbacks = [ ] # type: typing.List[typing.Callable[[], None]] + def available(self, capabilities: typing.Iterable[str] ) -> typing.Optional[str]: match = list(set(capabilities)&self._caps) return match[0] if match else None + def match(self, capability: str) -> typing.Optional[str]: + cap = list(set([capability])&self._caps) + return cap[0] if cap else None + def copy(self): return Capability(*self._caps) @@ -297,8 +302,8 @@ class MessageTag(object): def get_value(self, tags: typing.Dict[str, str]) -> typing.Optional[str]: key = list(set(tags.keys())&self._names) return tags[key[0]] if key else None - def match(self, s: str) -> typing.Optional[str]: - key = list(set([s])&self._names) + def match(self, tag: str) -> typing.Optional[str]: + key = list(set([tag])&self._names) return key[0] if key else None class BatchType(object): |
