slack: Add the channels.history() function and a Message class
For finding unread messages. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
4eb177cd8f
commit
48baf65574
|
@ -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 "<Message time:%s user:%s text:%s>" % (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:
|
||||
|
|
85
slackmail.py
85
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()
|
||||
|
|
Loading…
Reference in New Issue