aboutsummaryrefslogtreecommitdiff
path: root/modules/ircv3_typing.py
diff options
context:
space:
mode:
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"))