aboutsummaryrefslogtreecommitdiff
path: root/modules/ircv3_multiline.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-06-16 17:17:50 +0100
committerGravatar jesopo2019-06-16 17:20:31 +0100
commit75f60caaf8ed9f40c07f0597d7a9248821a26d66 (patch)
treef09251032e7812421b027f0e971b588f22f9cea2 /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.py38
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])]