File size: 2,421 Bytes
bd1c43c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8385aa9
bd1c43c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from flask import Flask, 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__)
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 hello_world():
    return "<p>Hello, World!</p>"