Spaces:
Sleeping
Sleeping
from flask import Flask, send_from_directory, jsonify, request | |
from flask_cors import CORS | |
from dotenv import load_dotenv | |
import os | |
import requests | |
import subprocess | |
import time | |
from app.auth import get_meeting_token | |
load_dotenv() | |
app = Flask(__name__, static_url_path="/", static_folder="frontend/out") | |
CORS(app) | |
def _start_bot(bot_path, args=None): | |
daily_api_key = os.getenv("DAILY_API_KEY") or "" | |
api_path = os.getenv("DAILY_API_PATH") or "https://api.daily.co/v1" | |
timeout = int(os.getenv("ROOM_TIMEOUT") or os.getenv("BOT_MAX_DURATION") or 300) | |
exp = time.time() + timeout | |
''' | |
res = requests.post( | |
f"{api_path}/rooms", | |
headers={"Authorization": f"Bearer {daily_api_key}"}, | |
json={ | |
"properties": { | |
"exp": exp, | |
"enable_chat": True, | |
"enable_emoji_reactions": True, | |
"eject_at_room_exp": True, | |
"enable_prejoin_ui": False, | |
} | |
}, | |
) | |
if res.status_code != 200: | |
return ( | |
jsonify( | |
{ | |
"error": "Unable to create room", | |
"status_code": res.status_code, | |
"text": res.text, | |
} | |
), | |
500, | |
) | |
''' | |
room_url = os.getenv("DAILY_ROOM_URL") #res.json()["url"] | |
room_name = os.getenv("DAILY_ROOM_NAME") #res.json()["name"] | |
meeting_token = get_meeting_token(room_url, daily_api_key, exp) | |
if args: | |
extra_args = " ".join([f'-{x[0]} "{x[1]}"' for x in args]) | |
else: | |
extra_args = "" | |
proc = subprocess.Popen( | |
[ | |
f"python3 {bot_path} -u {room_url} -t {meeting_token} {extra_args}" | |
], | |
shell=True, | |
bufsize=1, | |
) | |
# Don't return until the bot has joined the room, but wait for at most 2 seconds. | |
attempts = 0 | |
while attempts < 20: | |
time.sleep(0.1) | |
attempts += 1 | |
res = requests.get( | |
f"{api_path}/rooms/{room_name}/get-session-data", | |
headers={"Authorization": f"Bearer {daily_api_key}"}, | |
) | |
if res.status_code == 200: | |
break | |
print(f"Took {attempts} attempts to join room {room_name}") | |
return jsonify({"room_url": room_url, "token": meeting_token}), 200 | |
# Routes | |
#@app.route("/start-bot", methods=["POST"]) | |
#def start_bot(): | |
# return _start_bot("./app/bot.py") | |
def catch_all(path): | |
full_path = os.path.join(app.static_folder, path) | |
# Check if path is a directory and index.html exists | |
if os.path.isdir(full_path) and os.path.exists(os.path.join(full_path, 'index.html')): | |
return send_from_directory(full_path, 'index.html') | |
# Check if path.html exists | |
elif os.path.exists(full_path + '.html'): | |
return send_from_directory(app.static_folder, path + '.html') | |
# Serve index.html by default | |
else: | |
return send_from_directory(app.static_folder, 'index.html') |