Start web server integration (incomplete)

This commit is contained in:
Nexus 2024-01-09 16:26:18 +00:00
parent 9407e5cf59
commit 1f3e4955cb
3 changed files with 83 additions and 0 deletions

View file

@ -11,3 +11,7 @@ selenium==4.16
rich==13.7
dnspython==2.4.2
aiosqlite==0.19.0
fastapi==0.108.0
uvicorn==0.25.0
psutil==5.9.7
pydantic==2.5.3

View file

@ -7,6 +7,14 @@ try:
CONFIG.setdefault("logging", {})
CONFIG.setdefault("jimmy", {})
CONFIG.setdefault("ollama", {})
CONFIG.setdefault(
"server",
{
"host": "0.0.0.0",
"port": 8080,
"channel": 1032974266527907901
}
)
except FileNotFoundError:
cwd = Path.cwd()
logging.getLogger("jimmy.autoconf").critical("Unable to locate config.toml in %s.", cwd, exc_info=True)

71
src/web.py Normal file
View file

@ -0,0 +1,71 @@
import asyncio
import logging
import psutil
import time
import pydantic
from typing import Optional, Any
from conf import CONFIG
from fastapi import FastAPI, HTTPException, status
class BridgeResponse(pydantic.BaseModel):
status: str
pages: list[str]
class BridgePayload(pydantic.BaseModel):
secret: str
message: str
sender: str
class MessagePayload(pydantic.BaseModel):
class MessageAttachmentPayload(pydantic.BaseModel):
url: str
proxy_url: str
filename: str
size: int
width: Optional[int] = None
height: Optional[int] = None
content_type: str
ATTACHMENT: Optional[Any] = None
event_type: Optional[str] = "create"
message_id: int
author: str
is_automated: bool = False
avatar: str
content: str
clean_content: str
at: float
attachments: list[MessageAttachmentPayload] = []
reply_to: Optional["MessagePayload"] = None
app = FastAPI(
title="JimmyAPI",
version="2.0.0a1"
)
log = logging.getLogger("jimmy.web.api")
app.state.bot = None
app.state.bridge_lock = asyncio.Lock()
@app.get("/ping")
def ping():
"""Checks the bot is online and provides some uptime information"""
if not app.state.bot:
raise HTTPException(status.HTTP_503_SERVICE_UNAVAILABLE)
return {
"ping": "pong",
"online": app.state.bot.is_ready(),
"latency": max(round(app.state.bot.latency, 2), 0.01),
"uptime": round(time.time() - psutil.Process().create_time()),
"uptime.sys": time.time() - psutil.boot_time()
}
@app.post("/bridge", status_code=201)
async def bridge_post_send_message(body: BridgePayload):
"""Sends a message FROM matrix TO discord."""
raise HTTPException(status.HTTP_503_SERVICE_UNAVAILABLE)