Add support for IRCv3's batch and draft/labeled-response

This commit is contained in:
jesopo 2018-09-10 08:57:10 +01:00
parent aca5d78cee
commit 78171f7504
2 changed files with 21 additions and 4 deletions

View file

@ -9,7 +9,8 @@ RE_MODES = re.compile(r"[-+]\w+")
CAPABILITIES = {"multi-prefix", "chghost", "invite-notify", "account-tag", CAPABILITIES = {"multi-prefix", "chghost", "invite-notify", "account-tag",
"account-notify", "extended-join", "away-notify", "userhost-in-names", "account-notify", "extended-join", "away-notify", "userhost-in-names",
"draft/message-tags-0.2", "server-time", "cap-notify"} "draft/message-tags-0.2", "server-time", "cap-notify",
"batch", "draft/labeled-response"}
class LineHandler(object): class LineHandler(object):
def __init__(self, bot, events): def __init__(self, bot, events):
@ -42,13 +43,14 @@ class LineHandler(object):
events.on("raw.TOPIC").hook(self.topic) events.on("raw.TOPIC").hook(self.topic)
events.on("raw.PRIVMSG").hook(self.privmsg) events.on("raw.PRIVMSG").hook(self.privmsg)
events.on("raw.NOTICE").hook(self.notice) events.on("raw.NOTICE").hook(self.notice)
events.on("raw.CAP").hook(self.cap)
events.on("raw.AUTHENTICATE").hook(self.authenticate)
events.on("raw.CHGHOST").hook(self.chghost) events.on("raw.CHGHOST").hook(self.chghost)
events.on("raw.ACCOUNT").hook(self.account) events.on("raw.ACCOUNT").hook(self.account)
events.on("raw.TAGMSG").hook(self.tagmsg) events.on("raw.TAGMSG").hook(self.tagmsg)
events.on("raw.AWAY").hook(self.away) events.on("raw.AWAY").hook(self.away)
events.on("raw.BATCH").hook(self.batch)
events.on("raw.CAP").hook(self.cap)
events.on("raw.authenticate").hook(self.authenticate)
def handle(self, server, line): def handle(self, server, line):
original_line = line original_line = line
@ -62,6 +64,9 @@ class LineHandler(object):
if tag: if tag:
tag_split = tag.split("=", 1) tag_split = tag.split("=", 1)
tags[tag_split[0]] = "".join(tag_split[1:]) tags[tag_split[0]] = "".join(tag_split[1:])
if "batch" in tags and tags["batch"] in server.batches:
server.batches[tag["batch"]].append(line)
return
arbitrary = None arbitrary = None
if " :" in line: if " :" in line:
@ -492,6 +497,17 @@ class LineHandler(object):
self.events.on("received.away.off").call(user=user, self.events.on("received.away.off").call(user=user,
server=event["server"]) server=event["server"])
def batch(self, event):
identifier = event["args"][0]
modifier, identifier = identifier[0], identifier[1:]
if modifier == "+":
event["server"].batches[identifier] = []
else:
lines = event["server"].batches[identifier]
del event["server"].batches[identifier]
for line in lines:
self.handle(event["server"], line)
# IRCv3 CHGHOST, a user's username and/or hostname has changed # IRCv3 CHGHOST, a user's username and/or hostname has changed
def chghost(self, event): def chghost(self, event):
nickname, username, hostname = Utils.seperate_hostmask( nickname, username, hostname = Utils.seperate_hostmask(

View file

@ -31,6 +31,7 @@ class Server(object):
self._capabilities_waiting = set([]) self._capabilities_waiting = set([])
self.capabilities = set([]) self.capabilities = set([])
self.server_capabilities = {} self.server_capabilities = {}
self.batches = {}
self.write_buffer = b"" self.write_buffer = b""
self.buffered_lines = [] self.buffered_lines = []