diff options
| author | 2019-06-16 17:17:50 +0100 | |
|---|---|---|
| committer | 2019-06-16 17:20:31 +0100 | |
| commit | 75f60caaf8ed9f40c07f0597d7a9248821a26d66 (patch) | |
| tree | f09251032e7812421b027f0e971b588f22f9cea2 /modules/ircv3_multiline.py | |
| parent | 'timeout' -> 'cooldown'. closes #60 (diff) | |
| signature | ||
'multi-line' -> 'multiline'
Diffstat (limited to 'modules/ircv3_multiline.py')
| -rw-r--r-- | modules/ircv3_multiline.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/modules/ircv3_multiline.py b/modules/ircv3_multiline.py new file mode 100644 index 00000000..21b7abd1 --- /dev/null +++ b/modules/ircv3_multiline.py @@ -0,0 +1,38 @@ +from src import ModuleManager, utils + +CAP = utils.irc.Capability(None, "bitbot.dev/multiline") +BATCH = utils.irc.BatchType(None, "bitbot.dev/multiline") + +class Module(ModuleManager.BaseModule): + @utils.hook("received.cap.ls") + @utils.hook("received.cap.new") + def on_cap(self, event): + return CAP.copy() + + @utils.hook("preprocess.send.privmsg") + def preprocess_send_privmsg(self, event): + if len(event["line"].args) > 1: + if ("\n" in event["line"].args[1] and + event["server"].has_capability(CAP)): + event["line"].invalidate() + + target = event["line"].args[0] + lines = event["line"].args[1].split("\n") + batch = utils.irc.IRCSendBatch("bitbot.dev/multiline", + [target]) + for line in lines: + batch.add_line(utils.irc.protocol.privmsg(target, line)) + for line in batch.get_lines(): + event["server"].send(line) + + @utils.hook("received.batch.end") + def batch_end(self, event): + if BATCH.match(event["batch"].type): + messages = [] + lines = event["batch"].get_lines() + for line in lines: + messages.append(line.args[1]) + + target = event["batch"].args[0] + message = "\n".join(messages) + return [IRCLine.ParsedLine("PRIVMSG", [target, message])] |
