slack_bot.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import os
  2. from dotenv import load_dotenv
  3. from flask import Flask
  4. from slack_sdk import WebClient
  5. from slackeventsapi import SlackEventAdapter
  6. from embedchain import App
  7. load_dotenv()
  8. app = Flask(__name__)
  9. slack_signing_secret = os.environ.get("SLACK_SIGNING_SECRET")
  10. slack_events_adapter = SlackEventAdapter(slack_signing_secret, "/chat", app)
  11. slack_bot_token = os.environ.get("SLACK_BOT_TOKEN")
  12. client = WebClient(token=slack_bot_token)
  13. chat_bot = App()
  14. recent_message = {"ts": 0, "channel": ""}
  15. @slack_events_adapter.on("message")
  16. def handle_message(event_data):
  17. message = event_data["event"]
  18. if "text" in message and message.get("subtype") != "bot_message":
  19. text = message["text"]
  20. if float(message.get("ts")) > float(recent_message["ts"]):
  21. recent_message["ts"] = message["ts"]
  22. recent_message["channel"] = message["channel"]
  23. if text.startswith("query"):
  24. _, question = text.split(" ", 1)
  25. try:
  26. response = chat_bot.chat(question)
  27. send_slack_message(message["channel"], response)
  28. print("Query answered successfully!")
  29. except Exception as e:
  30. send_slack_message(message["channel"], "An error occurred. Please try again!")
  31. print("Error occurred during 'query' command:", e)
  32. elif text.startswith("add"):
  33. _, data_type, url_or_text = text.split(" ", 2)
  34. if url_or_text.startswith("<") and url_or_text.endswith(">"):
  35. url_or_text = url_or_text[1:-1]
  36. try:
  37. chat_bot.add(data_type, url_or_text)
  38. send_slack_message(message["channel"], f"Added {data_type} : {url_or_text}")
  39. except Exception as e:
  40. send_slack_message(message["channel"], f"Failed to add {data_type} : {url_or_text}")
  41. print("Error occurred during 'add' command:", e)
  42. def send_slack_message(channel, message):
  43. response = client.chat_postMessage(channel=channel, text=message)
  44. return response
  45. if __name__ == "__main__":
  46. app.run(host="0.0.0.0", port=5000, debug=False)