import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler from dotenv import load_dotenv import firepup650 as fp input = fp.replitInput fp.replitCursor = fp.bcolors.REPLIT + ">>>" + fp.bcolors.RESET # Totally not hijacking one of my functions to use ;P load_dotenv() for requiredVar in ["SLACK_BOT_TOKEN", "SLACK_APP_TOKEN"]: if not os.environ.get(requiredVar): raise ValueError(f'Missing required environment variable "{requiredVar}". Please create a .env file in the same directory as this script and define it.') app = App(token=os.environ.get("SLACK_BOT_TOKEN")) client = app.client if __name__ == "__main__": print("^D at any time to terminate program") while 1: chan = input("Channel ID") try: print("^C to change channel") while 1: thread = input("Reply to a thread? (y|N)").lower().startswith("y") ts = None if thread: hasID = input("Do you have the TS ID? (y|N))").lower().startswith("y") if not hasID: try: print("Getting the last 50 messages for threading options...") res = client.conversations_history( channel=chan, inclusive=True, limit=50 ) messages = res["messages"] texts = {} for i in range(len(messages)): texts[f'{messages[i]["text"]} ({messages[i]["ts"]})'] = i found = messages[fp.menu(texts, "Please select the message to reply to as a thread")] ts = found["ts"] except Exception as E: print(f"Exception: {E}") break else: ts = input("TS ID") print("^C to change/exit thread (^C twice if you want to change channel)") try: while 1: msg = input("[THREAD] Message (Raw text, not blocks)") try: print( client.chat_postMessage( channel=chan, text=msg, thread_ts=ts ) ) except Exception as E: print(f"Exception: {E}") except KeyboardInterrupt: print() if ts: continue msg = input("Message (Raw text, not blocks)") try: print(client.chat_postMessage(channel=chan, text=msg)) except Exception as E: print(f"Exception: {E}") except KeyboardInterrupt: print()