aboutsummaryrefslogtreecommitdiff
path: root/modules/ircv3_typing.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-11-22 16:23:30 +0000
committerGravatar jesopo2019-11-22 16:23:30 +0000
commit5730d6fe591b63b8d50fbebf7c151504003921bd (patch)
treef6d170e30a8bd82513b52b98771c4f4c7a8fd778 /modules/ircv3_typing.py
parentupdate CHANGELOG.md (diff)
signature
refactor commands (mostly stdout/stderr) and split typing/reply out
closes #208
Diffstat (limited to 'modules/ircv3_typing.py')
-rw-r--r--modules/ircv3_typing.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/modules/ircv3_typing.py b/modules/ircv3_typing.py
new file mode 100644
index 00000000..ca2fce2b
--- /dev/null
+++ b/modules/ircv3_typing.py
@@ -0,0 +1,27 @@
+from src import IRCLine, ModuleManager, utils
+
+CAP = utils.irc.Capability("message-tags", "draft/message-tags-0.2")
+
+class Module(ModuleManager.BaseModule):
+ def _tagmsg(self, target, state):
+ return IRCLine.ParsedLine("TAGMSG", [target],
+ tags={"+draft/typing": state})
+ def _has_tags(self, server):
+ return server.has_capability(CAP)
+
+ @utils.hook("preprocess.command")
+ def preprocess(self, event):
+ if (self._has_tags(event["server"]) and
+ event["hook"].get_kwarg("expect_output", True)):
+ event["target"]._typing = True
+ event["server"].send(self._tagmsg(event["target_str"], "active"),
+ immediate=True)
+ else:
+ event["target"]._typing = False
+
+ @utils.hook("postprocess.command")
+ def postprocess(self, event):
+ if (event["target"]._typing and
+ not event["stdout"].has_text() and
+ not event["stderr"].has_text()):
+ event["server"].send(self._tagmsg(event["target_str"], "done"))