in chat-client/main.py [0:0]
def chat_app(req: flask.Request) -> Mapping[str, Any]:
req_json = req.get_json()
print(f"Received request: {req_json}")
# Handle chat UI
if req.method == "POST" and req.path == "/":
chatEvent = req_json["chat"]
if "messagePayload" in chatEvent:
return handleMessage(req_json)
# Handle app commands
elif "appCommandPayload" in chatEvent:
appCommandMetadata = chatEvent["appCommandPayload"]["appCommandMetadata"]
if appCommandMetadata["appCommandType"] == "SLASH_COMMAND":
if appCommandMetadata["appCommandId"] == SUBSCRIBE_COMMAND_ID:
return openInitialDialog(req_json)
elif appCommandMetadata["appCommandId"] == SUBSCRIPTIONS_COMMAND_ID:
return returnSubscriptions(req_json)
# Handle added to space
elif "addedToSpacePayload" in chatEvent:
return handleMessage(req_json)
# Handle app removal from space
elif "removedFromSpacePayload" in chatEvent:
print("Unsubscribing from space")
space_id = req_json["chat"]["removedFromSpacePayload"]["space"]["name"]
subscriptions_ref = DB.collection("product_space_subscriptions")
product_doc_ref = subscriptions_ref.document(space_id.replace("/", "_"))
products_doc = product_doc_ref.get()
if products_doc.exists:
products = products_doc.to_dict().get("products_subscribed", [])
categories = products_doc.to_dict().get("categories_subscribed", [])
with futures.ThreadPoolExecutor() as executor:
unsubscribe_space_product_futures = [
executor.submit(
unsubscribe_space_product,
space_id,
DB.collection("space_product_subscriptions"),
product,
)
for product in products
]
unsubscribe_space_blogs_futures = [
executor.submit(
unsubscribe_space_blogs,
space_id,
DB.collection("space_blog_subscriptions"),
category,
)
for category in categories
]
futures.wait(
unsubscribe_space_product_futures + unsubscribe_space_blogs_futures
)
product_doc_ref.delete()
print(
f"Unsubscribed space {space_id} from all products and categories."
)
return ("Done", 200)
# Handle button clicks
elif "buttonClickedPayload" in chatEvent:
if (
req_json["commonEventObject"]["parameters"]["actionName"]
== "openInitialDialog"
):
return openInitialDialog(req_json)
elif (
req_json["commonEventObject"]["parameters"]["actionName"]
== "submitDialog"
):
print(f"Submitting dialog: {submitDialog(req_json)}")
return submitDialog(req_json)
# Handle Pub/Sub push messages
elif req.method == "POST" and req.path == "/messages":
return handle_pubsub_message(req)
print("Reached an unexpected state.")