From 8d38fffaf44763a2ec6658c062bf28014dac39c3 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Mon, 8 Jun 2015 16:52:53 -0400 Subject: [PATCH] Fixes for merging messages I noticed that a merged message reversed all the lines. This is due to how slack returns messages in the history() call, so let's parse replies in two steps to keep everything chronological. Signed-off-by: Anna Schumaker --- slack/channels.py | 18 ++++++++++-------- slack/chat.py | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/slack/channels.py b/slack/channels.py index 5d83359..da3bff1 100644 --- a/slack/channels.py +++ b/slack/channels.py @@ -49,7 +49,7 @@ class Channel: def read(self): if self.__last_ts == None: self.fetch_info() - return history(self.__id, self.__last_ts); + return history(self.__id, self.__last_ts) @@ -58,18 +58,20 @@ def history(channel, timestamp): if ret["ok"] == False: return None - m_list = [] + # Read original message list + o_list = [] for message in ret["messages"]: - msg = chat.Message(message) - if len(m_list) == 0: - m_list += [ msg ] - elif m_list[-1].user() == msg.user(): + o_list += [ chat.Message(message) ] + o_list.sort() + + # Merge together messages from the same user + m_list = [ o_list[0] ] + for msg in o_list[1:]: + if msg.user() == m_list[-1].user(): m_list[-1].merge(msg) else: m_list += [ msg ] - m_list.sort() - if len(m_list) > 0: mark(channel, m_list[-1].ts()) return m_list diff --git a/slack/chat.py b/slack/chat.py index 0e6b542..c6764bf 100644 --- a/slack/chat.py +++ b/slack/chat.py @@ -12,7 +12,7 @@ class Message: def __init__(self, json): self.__ts = json["ts"] self.__time = datetime.fromtimestamp(float(self.__ts)) - self.__user = users.info(json["user"]) + self.__user = users.info(json.get("user", None)) self.__text = [ json["text"].encode("utf-8").decode("latin-1") ] def __lt__(self, other): @@ -34,6 +34,7 @@ class Message: def merge(self, msg): self.__text += msg.__text + self.__ts = msg.__ts