Send v4 BBCode as message tag to IRC clients

This commit is contained in:
Lephenixnoir 2023-07-29 22:43:09 +02:00
parent fab79f5d2b
commit 44e4d20ce2
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
2 changed files with 17 additions and 4 deletions

View File

@ -30,8 +30,7 @@ def handle_irc(m):
@shoutbox.on(lambda m: m.channel in channels)
def handle_shoutbox(m):
author = Shoutbox.normalize(m.author)
logging.debug(f"BBCODE: {m.bbcode}")
shoutbox.irc_clients[author][0].send(f"#{m.channel}", f"{m.text}")
shoutbox.irc_clients[author][0].send(f"#{m.channel}", f"{m.text}", bbcode=m.bbcode)
irc.start(f"Shoutbox[{nick}]", password, nick)

18
irc.py
View File

@ -37,6 +37,7 @@ class IRC(object):
self._send(f"USER {nick} * * :{nick}")
self._send(f"NICK {nick}")
self._send(f"CAP REQ :message-tags")
self._waitfor(lambda m: "NOTICE" in m and "/AUTH" in m)
for i in range(3):
@ -76,9 +77,13 @@ class IRC(object):
logging.info(f"matched {event.__name__}")
callback(message)
def send(self, target, message):
def send(self, target, message, bbcode=None):
""" Send a message to the specified target (channel or user) """
self._send(f"PRIVMSG {target} :{message}")
if bbcode is not None:
bbcode = self._escapetag(bbcode)
self._send(f"@planet-casio.com/v4-bbcode={bbcode} PRIVMSG {target} :{message}")
else:
self._send(f"PRIVMSG {target} :{message}")
def receive(self):
""" Receive a private message """
@ -156,6 +161,15 @@ class IRC(object):
msg = self._recv()
return msg
def _escapetag(self, text):
""" Escape text as an IRC tag """
text = text.replace("\\", "\\\\")
text = text.replace(";", "\\:")
text = text.replace(" ", "\\s")
text = text.replace("\r", "\\r")
text = text.replace("\n", "\\n")
return text
class IRCMessage(object):
r = re.compile("^:(?P<author>[\w.~|\[\]]+)(?:!(?P<host>\S+))? PRIVMSG (?P<to>\S+) :(?P<text>.+)")