diff --git a/cogs/events.py b/cogs/events.py index a50b79c..86bc93b 100644 --- a/cogs/events.py +++ b/cogs/events.py @@ -60,6 +60,7 @@ class MessagePayload(pydantic.BaseModel): message_id: int author: str + is_automated: bool = False avatar: str content: str clean_content: str @@ -346,6 +347,7 @@ class Events(commands.Cog): _payload = MessagePayload( message_id=_message.id, author=_message.author.name, + is_automated=_message.author.bot or _message.author.system, avatar=_message.author.display_avatar.with_static_format("webp").with_size(512).url, content=_message.content or '', clean_content=str(_message.clean_content or ''), diff --git a/web/server.py b/web/server.py index d4715c7..5aba5c0 100644 --- a/web/server.py +++ b/web/server.py @@ -55,6 +55,7 @@ except ImportError: bot = None app.state.last_sender = None app.state.last_sender_ts = datetime.utcnow() +app.state.ws_connected = False @app.middleware("http") @@ -291,9 +292,12 @@ async def bridge(req: Request): async def bridge_recv(ws: WebSocket, secret: str = Header(None)): if secret != app.state.bot.http.token: raise HTTPException(status_code=401, detail="Invalid secret.") + if app.state.ws_connected: + raise HTTPException(status_code=409, detail="Already connected.") queue: asyncio.Queue = app.state.bot.bridge_queue await ws.accept() + app.state.ws_connected = True while True: try: data = queue.get_nowait() @@ -307,3 +311,4 @@ async def bridge_recv(ws: WebSocket, secret: str = Header(None)): break finally: queue.task_done() + app.state.ws_connected = False