From 020759fdabc4beb0014f19b6d6aafd136f874cf1 Mon Sep 17 00:00:00 2001 From: nemunaire Date: Sat, 4 Oct 2014 07:39:08 +0200 Subject: [PATCH] Decoding IRC message: use encoding from configuration file --- server/IRC.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/server/IRC.py b/server/IRC.py index 2d7fa5e..8d9f848 100644 --- a/server/IRC.py +++ b/server/IRC.py @@ -45,6 +45,11 @@ class IRCServer(SocketServer): #Keep a list of connected channels self.channels = dict() + if node.hasAttribute("encoding"): + self.encoding = node["encoding"] + else: + self.encoding = "utf-8" + if node.hasAttribute("caps"): if node["caps"].lower() == "no": self.capabilities = None @@ -196,13 +201,15 @@ class IRCServer(SocketServer): return True return False + def _close(self): if self.connected: self.write("QUIT") return SocketServer._close(self) + def read(self): for line in SocketServer.read(self): - msg = IRCMessage(line, datetime.now(timezone.utc)) + msg = IRCMessage(line, self.encoding) if msg.cmd in self.hookscmd: self.hookscmd[msg.cmd](msg) @@ -246,9 +253,11 @@ mgx = re.compile(b'''^(?:@(?P[^ ]+)\ )? class IRCMessage: - def __init__(self, raw, timestamp): - self.raw = raw - self.tags = { 'time': timestamp } + """Class responsible for parsing IRC messages""" + + def __init__(self, raw, encoding="utf-8"): + self.encoding = encoding + self.tags = { 'time': datetime.now(timezone.utc) } self.params = list() p = mgx.match(raw.rstrip()) @@ -299,8 +308,7 @@ class IRCMessage: try: s = s.decode() except UnicodeDecodeError: - #TODO: use encoding from config file - s = s.decode('utf-8', 'replace') + s = s.decode(self.encoding, 'replace') return s