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"))