diff --git a/nemubot/bot.py b/nemubot/bot.py index fccefc5..0889ca1 100644 --- a/nemubot/bot.py +++ b/nemubot/bot.py @@ -423,9 +423,14 @@ class Bot(threading.Thread): return False - def receive_message(self, srv, msg, private=False, data=None): - """Queued the message for treatment""" - #print("READ", raw_msg) + def receive_message(self, srv, msg): + """Queued the message for treatment + + Arguments: + srv -- The server where the message comes from + msg -- The message not parsed, as simple as possible + """ + self.cnsr_queue.put_nowait(MessageConsumer(srv, msg)) # Launch a new thread if necessary diff --git a/nemubot/consumer.py b/nemubot/consumer.py index 8022b72..18e3d47 100644 --- a/nemubot/consumer.py +++ b/nemubot/consumer.py @@ -30,7 +30,8 @@ class MessageConsumer: def __init__(self, srv, msg): self.srv = srv - self.msgs = [ msg ] + self.orig = msg + self.msgs = [ ] self.responses = None @@ -145,6 +146,16 @@ class MessageConsumer: def run(self, context): """Create, parse and treat the message""" + try: + for msg in self.srv.parse(self.orig): + self.msgs.append(msg) + except: + logger.exception("Error occurred during the processing of the %s: " + "%s", type(self.msgs[0]).__name__, self.msgs[0]) + + if len(self.msgs) <= 0: + return + try: for msg in self.msgs: self.first_treat(msg) diff --git a/nemubot/server/IRC.py b/nemubot/server/IRC.py index 25f37cf..5dd81a5 100644 --- a/nemubot/server/IRC.py +++ b/nemubot/server/IRC.py @@ -257,11 +257,16 @@ class IRC(SocketServer): def read(self): for line in SocketServer.read(self): + # PING should be handled here, so start parsing here :/ msg = IRCMessage(line, self.encoding) if msg.cmd in self.hookscmd: self.hookscmd[msg.cmd](msg) - mes = msg.to_bot_message(self) - if mes is not None: - yield mes + yield msg + + + def parse(self, msg): + mes = msg.to_bot_message(self) + if mes is not None: + yield mes diff --git a/nemubot/server/abstract.py b/nemubot/server/abstract.py index 127fa15..dd71ff6 100644 --- a/nemubot/server/abstract.py +++ b/nemubot/server/abstract.py @@ -139,6 +139,12 @@ class AbstractServer(io.IOBase): self.write(vprnt.pp) + # Read + + def parse(self, msg): + raise NotImplemented + + # Exceptions def exception(self):