wip on cli

This commit is contained in:
Micha Albert 2025-02-28 13:18:21 -05:00
parent 883167be89
commit 32ed81d7ba
2 changed files with 52 additions and 23 deletions

View file

@ -7,6 +7,7 @@ from datetime import datetime
from secrets import choice, token_hex from secrets import choice, token_hex
from typing import Dict, List from typing import Dict, List
import click
import cv2 import cv2
import httpx import httpx
import uvicorn import uvicorn
@ -17,7 +18,7 @@ from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException, Request, Response from fastapi import FastAPI, HTTPException, Request, Response
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.responses import HTMLResponse, RedirectResponse
from prisma import Prisma from prisma import Prisma # type: ignore
from slack_bolt.adapter.fastapi.async_handler import AsyncSlackRequestHandler from slack_bolt.adapter.fastapi.async_handler import AsyncSlackRequestHandler
from slack_bolt.async_app import AsyncAck, AsyncApp from slack_bolt.async_app import AsyncAck, AsyncApp
from yarl import URL from yarl import URL
@ -36,6 +37,10 @@ FERNET_KEY_USERS = []
FERNET = Fernet(FERNET_KEY) FERNET = Fernet(FERNET_KEY)
@click.group()
def cli():
pass
async def rotate_fernet_key(): async def rotate_fernet_key():
global FERNET_KEY global FERNET_KEY
global FERNET global FERNET
@ -477,10 +482,14 @@ async def deny(ack, body):
message = body["message"] message = body["message"]
applicant_slack_id = message["blocks"][len(message) - 3]["text"]["text"].split( applicant_slack_id = message["blocks"][len(message) - 3]["text"]["text"].split(
": " ": "
)[1] # I hate it. You hate it. We all hate it. Carry on. )[
1
] # I hate it. You hate it. We all hate it. Carry on.
applicant_name = message["blocks"][len(message) - 7]["text"]["text"].split( applicant_name = message["blocks"][len(message) - 7]["text"]["text"].split(
"Name: " "Name: "
)[1] # oops i did it again )[
1
] # oops i did it again
await bolt.client.chat_delete( await bolt.client.chat_delete(
channel=body["container"]["channel_id"], ts=message["ts"] channel=body["container"]["channel_id"], ts=message["ts"]
) )
@ -496,10 +505,14 @@ async def approve(ack, body):
message = body["message"] message = body["message"]
applicant_slack_id = message["blocks"][len(message) - 3]["text"]["text"].split( applicant_slack_id = message["blocks"][len(message) - 3]["text"]["text"].split(
": " ": "
)[1] # I hate it. You hate it. We all hate it. Carry on. )[
1
] # I hate it. You hate it. We all hate it. Carry on.
applicant_name = message["blocks"][len(message) - 7]["text"]["text"].split( applicant_name = message["blocks"][len(message) - 7]["text"]["text"].split(
"Name: " "Name: "
)[1] # oops i did it again )[
1
] # oops i did it again
await bolt.client.chat_delete( await bolt.client.chat_delete(
channel=body["container"]["channel_id"], ts=message["ts"] channel=body["container"]["channel_id"], ts=message["ts"]
) )
@ -653,32 +666,36 @@ async def status_command(ack: AsyncAck, command):
await bolt.client.chat_postEphemeral( await bolt.client.chat_postEphemeral(
channel=channel_id, channel=channel_id,
user=user_id, user=user_id,
text=f"You don't have any recorded streams! Please message <@U05C64XMMHV> if you think this is a mistake." text=f"You don't have any recorded streams! Please message <@U05C64XMMHV> if you think this is a mistake.",
) )
total_streamed = sum([get_recording_duration(recording, user_stream_key) for recording in stream_recs]) total_streamed = sum(
all_recs = "\n".join([ [
get_recording_duration(recording, user_stream_key)
for recording in stream_recs
]
)
all_recs = "\n".join(
[
recording recording
+ " for " + " for "
+ str( + str(get_recording_duration(recording, user_stream_key))
get_recording_duration(
recording, user_stream_key
)
)
+ " minutes" + " minutes"
for recording in stream_recs for recording in stream_recs
]) ]
)
await bolt.client.chat_postEphemeral( await bolt.client.chat_postEphemeral(
channel=channel_id, channel=channel_id,
user=user_id, user=user_id,
text=f"The server currently thinks you are {"live" if user_stream_key in [stream for stream in active_streams] else "not live"}! It looks like you've streamed for a total of {total_streamed} minutes. Here are all of your recordings: ```{all_recs}```" text=f"The server currently thinks you are {"live" if user_stream_key in [stream for stream in active_streams] else "not live"}! It looks like you've streamed for a total of {total_streamed} minutes. Here are all of your recordings: ```{all_recs}```",
) )
except Exception: except Exception:
await bolt.client.chat_postEphemeral( await bolt.client.chat_postEphemeral(
channel=channel_id, channel=channel_id,
user=user_id, user=user_id,
text=f"There was an error processing your request! Are you signed up for OnBoard Live yet? Message <@U05C64XMMHV> if this looks like a mistake!" text=f"There was an error processing your request! Are you signed up for OnBoard Live yet? Message <@U05C64XMMHV> if this looks like a mistake!",
) )
@bolt.command("/onboard-live-submit") @bolt.command("/onboard-live-submit")
async def submit(ack: AsyncAck, command): async def submit(ack: AsyncAck, command):
await ack() await ack()
@ -896,9 +913,20 @@ async def slack_event_endpoint(req: Request):
return await bolt_handler.handle(req) return await bolt_handler.handle(req)
def main(): @cli.command()
uvicorn.run(api) @click.option("-u", "--user", "user")
@click.option("-s", "--session", "session")
@click.option("-", "--session", "session")
def update_session(user: str, session: str):
pass
@cli.command()
@click.option('-l', '--log-level', 'log-level')
@click.option('-h', '--host', 'host')
@click.option('-p', '--port', 'port')
def run(log_level: str, host: str, port: int):
uvicorn.run(api, log_level=log_level, host=host, port=port)
if __name__ == "__main__": if __name__ == "__main__":
main() cli()

View file

@ -9,3 +9,4 @@ prisma
slack-bolt slack-bolt
yarl yarl
aiohttp aiohttp
click