mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 03:29:28 +01:00
clientbot: implement preliminary message tags parsing
Untested so far...
This commit is contained in:
parent
7e37a90c80
commit
cbc7f438d2
@ -1409,7 +1409,8 @@ class Protocol():
|
||||
'uplink': uplink, 'nicks': affected_nicks, 'serverdata': serverdata,
|
||||
'channeldata': old_channels}
|
||||
|
||||
def parseCapabilities(self, args):
|
||||
@staticmethod
|
||||
def parseCapabilities(args, fallback=''):
|
||||
"""
|
||||
Parses a string of capabilities in the 005 / RPL_ISUPPORT format.
|
||||
"""
|
||||
@ -1424,7 +1425,7 @@ class Protocol():
|
||||
key, value = cap.split('=', 1)
|
||||
except ValueError:
|
||||
key = cap
|
||||
value = ''
|
||||
value = fallback
|
||||
caps[key] = value
|
||||
|
||||
return caps
|
||||
|
@ -332,9 +332,36 @@ class ClientbotWrapperProtocol(Protocol):
|
||||
|
||||
return idsource
|
||||
|
||||
@staticmethod
|
||||
def parseMessageTags(data):
|
||||
"""
|
||||
Parses a message with IRC v3.2 message tags, as described at http://ircv3.net/specs/core/message-tags-3.2.html
|
||||
"""
|
||||
# Example query:
|
||||
# @aaa=bbb;ccc;example.com/ddd=eee :nick!ident@host.com PRIVMSG me :Hello
|
||||
if data[0].startswith('@'):
|
||||
tagdata = data[0].lstrip('@').split(';')
|
||||
for tag in tagdata:
|
||||
tag = tag.replace(r'\s', ' ')
|
||||
tag = tag.replace(r'\\', '\\')
|
||||
tag = tag.replace(r'\r', '\r')
|
||||
tag = tag.replace(r'\n', '\n')
|
||||
tag = tag.replace(r'\:', ';')
|
||||
|
||||
results = self.parseCapabilities(tagdata, fallback=None)
|
||||
log.debug('(%s) parsed message tags %s', self.irc.name, results)
|
||||
return results
|
||||
return {}
|
||||
|
||||
def handle_events(self, data):
|
||||
"""Event handler for the RFC1459/2812 (clientbot) protocol."""
|
||||
data = data.split(" ")
|
||||
|
||||
tags = self.parseMessageTags(data)
|
||||
if tags:
|
||||
# If we have tags, split off the first argument.
|
||||
data = data[1:]
|
||||
|
||||
try:
|
||||
args = self.parsePrefixedArgs(data)
|
||||
sender = args[0]
|
||||
@ -348,7 +375,7 @@ class ClientbotWrapperProtocol(Protocol):
|
||||
command = args[0]
|
||||
args = args[1:]
|
||||
else:
|
||||
# PyLink as a services framework expects UIDs and SIDs for everythiung. Since we connect
|
||||
# PyLink as a services framework expects UIDs and SIDs for everything. Since we connect
|
||||
# as a bot here, there's no explicit user introduction, so we're going to generate
|
||||
# pseudo-uids and pseudo-sids as we see prefixes.
|
||||
if '!' not in sender:
|
||||
|
Loading…
Reference in New Issue
Block a user