diff --git a/slack/channels.py b/slack/channels.py index 8e3372f..9b8787d 100644 --- a/slack/channels.py +++ b/slack/channels.py @@ -35,8 +35,41 @@ class Channel: self.fetch_info() return self.__unread + def read(self): + if self.__last_ts == None: + self.fetch_info() + return history(self.__id, self.__last_ts); + +class Message: + def __init__(self, json): + self.__time = json["ts"] + self.__user = json["user"] + self.__text = json["text"].encode("utf-8").decode("latin-1") + + def __lt__(self, other): + return self.__time < other.__time + + def __str__(self): + return "" % (self.__time, self.__user, self.__text) + + def __repr__(self): + return self.__str__() + + + +def history(channel, timestamp): + ret = api.call("channels.history", token = auth.token(), channel = channel, oldest = timestamp) + if ret["ok"] == False: + return None + + m_list = [] + for message in ret["messages"]: + m_list += [ Message(message) ] + m_list.sort() + return m_list + def info(channel): ret = api.call("channels.info", token = auth.token(), channel = channel) if ret["ok"] == False: diff --git a/slackmail.py b/slackmail.py index 569f826..1c80761 100644 --- a/slackmail.py +++ b/slackmail.py @@ -3,7 +3,6 @@ import os import slack -import sys from datetime import datetime @@ -14,52 +13,40 @@ for channel in slack.channels.list(): continue if channel.unread_count() == 0 or channel.unread_count() == None: continue - print(channel, channel.unread_count()) + print(channel.read()) -sys.exit(0) - - -def read_channel(id, ts): - args = { "channel" : id, "oldest" : ts } - call = call_method_auth("channels.history", args) - if call["ok"] == True: - messages = call["messages"] - messages.reverse() - for message in messages: - yield message - -def _write_message(fout, user, message): - dt = datetime.fromtimestamp(float(message["ts"])) - text = message["text"].encode("utf-8").decode("latin-1") - fout.write("%s %s: %s\n" % (str(dt), user, text)) - -def write_message(fout, message): - call = call_method_auth("users.info", {"user" : message["user"]}) - if call["ok"] == False: - name = message["user"] - else: - first = call["user"]["profile"].get("first_name", "") - last = call["user"]["profile"].get("last_name", "") - name = "%s %s" % (first, last) - if first == "" and last == "": - name = call["user"]["name"] - _write_message(fout, name, message) - - -tmp_dir = "/tmp/%s" % team -if not os.path.exists(tmp_dir): - os.mkdir(tmp_dir) - -for id in list_channel_ids(): - channel = find_channel_info(id) - if not channel["is_member"]: - continue - if channel["unread_count"] == 0: - continue - - fout = open("%s/%s" % (tmp_dir, channel["name"]), 'w') - fout.write(channel["purpose"]["value"].encode("utf-8").decode("latin-1")) - fout.write("\n") - for message in read_channel(id, channel["last_read"]): - write_message(fout, message) - fout.close() +#def _write_message(fout, user, message): +# dt = datetime.fromtimestamp(float(message["ts"])) +# text = message["text"].encode("utf-8").decode("latin-1") +# fout.write("%s %s: %s\n" % (str(dt), user, text)) +# +#def write_message(fout, message): +# call = call_method_auth("users.info", {"user" : message["user"]}) +# if call["ok"] == False: +# name = message["user"] +# else: +# first = call["user"]["profile"].get("first_name", "") +# last = call["user"]["profile"].get("last_name", "") +# name = "%s %s" % (first, last) +# if first == "" and last == "": +# name = call["user"]["name"] +# _write_message(fout, name, message) +# +# +#tmp_dir = "/tmp/%s" % team +#if not os.path.exists(tmp_dir): +# os.mkdir(tmp_dir) +# +#for id in list_channel_ids(): +# channel = find_channel_info(id) +# if not channel["is_member"]: +# continue +# if channel["unread_count"] == 0: +# continue +# +# fout = open("%s/%s" % (tmp_dir, channel["name"]), 'w') +# fout.write(channel["purpose"]["value"].encode("utf-8").decode("latin-1")) +# fout.write("\n") +# for message in read_channel(id, channel["last_read"]): +# write_message(fout, message) +# fout.close()