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") @app.route("/") def home(): print(f'Static folder path: {app.static_folder}') return send_from_directory(app.static_folder, 'index.html')