49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
import uuid
|
|
from src import ModuleManager, utils
|
|
|
|
CAP = utils.irc.Capability(None, "draft/labeled-response-0.2")
|
|
TAG = utils.irc.MessageTag(None, "draft/label")
|
|
|
|
CAP_TO_TAG = {
|
|
"draft/labeled-response-0.2": "draft/label"
|
|
}
|
|
|
|
class Module(ModuleManager.BaseModule):
|
|
@utils.hook("new.server")
|
|
def new_server(self, event):
|
|
event["server"]._label_cache = {}
|
|
|
|
@utils.hook("received.cap.ls")
|
|
@utils.hook("received.cap.new")
|
|
def on_cap(self, event):
|
|
if CAP.available(event["capabilities"]):
|
|
return CAP.copy()
|
|
|
|
@utils.hook("preprocess.send")
|
|
def raw_send(self, event):
|
|
available_cap = event["server"].available_capability(CAP)
|
|
|
|
if available_cap:
|
|
label = TAG.get_value(event["line"].tags)
|
|
if label == None:
|
|
tag_key = CAP_TO_TAG[available_cap]
|
|
label = str(uuid.uuid4())
|
|
event["line"].tags[tag_key] = label
|
|
|
|
event["server"]._label_cache[label] = event["line"]
|
|
|
|
@utils.hook("raw.received")
|
|
def raw_recv(self, event):
|
|
if not event["line"].command == "BATCH":
|
|
label = TAG.get_value(event["line"].tags)
|
|
if not label == None:
|
|
self._recv(event["server"], label, event["line"])
|
|
|
|
@utils.hook("received.batch.end")
|
|
def batch_end(self, event):
|
|
if TAG.match(event["batch"].type):
|
|
self._recv(event["server"], event["batch"].identifier, None)
|
|
|
|
def _recv(self, server, label, line):
|
|
cached_line = server._label_cache.pop(label)
|
|
# do something with the line!
|