slackdemo / slack_reader.py
svummidi's picture
POC for passive monitoring
a31ba66
raw
history blame
2.16 kB
import datetime
import os
from slack_sdk import WebClient
class SlackChannelReader:
def __init__(self, token, channel_id):
self.client = WebClient(token=token)
self.channel_id = channel_id
def read_messages(self, start_date):
start_timestamp = int(start_date.timestamp())
cursor = None
has_more = True
while has_more:
response = self.client.conversations_history(
channel=self.channel_id,
limit=100,
oldest=start_timestamp,
cursor=cursor
)
messages = response["messages"]
threads = self._group_messages_by_thread(messages)
self._write_threads_to_files(threads)
has_more = response["has_more"]
if has_more:
cursor = response["response_metadata"]["next_cursor"]
@staticmethod
def _group_messages_by_thread(messages):
threads = {}
for message in messages:
if "thread_ts" in message:
thread_ts = message["thread_ts"]
user = message["user"]
timestamp = message["ts"]
content = message["text"]
if thread_ts in threads:
threads[thread_ts].append((user, timestamp, content))
else:
threads[thread_ts] = [(user, timestamp, content)]
return threads
@staticmethod
def _write_threads_to_files(threads):
for thread_ts, thread_messages in threads.items():
file_name = f"slack_data/{thread_ts}_{thread_messages[0][0]}.txt"
with open(file_name, "w") as file:
for user, timestamp, content in thread_messages:
file.write(f"User: {user}\n")
file.write(f"Timestamp: {timestamp}\n")
file.write(f"Content: {content}\n\n")
def main():
token = os.environ.get('SLACK_API_TOKEN')
channel_id = "C02JEH5KGGN"
start_date = datetime.datetime(2023, 1, 1)
reader = SlackChannelReader(token, channel_id)
reader.read_messages(start_date)
main()