Start web server integration (incomplete)
This commit is contained in:
parent
9407e5cf59
commit
1f3e4955cb
3 changed files with 83 additions and 0 deletions
|
@ -11,3 +11,7 @@ selenium==4.16
|
||||||
rich==13.7
|
rich==13.7
|
||||||
dnspython==2.4.2
|
dnspython==2.4.2
|
||||||
aiosqlite==0.19.0
|
aiosqlite==0.19.0
|
||||||
|
fastapi==0.108.0
|
||||||
|
uvicorn==0.25.0
|
||||||
|
psutil==5.9.7
|
||||||
|
pydantic==2.5.3
|
||||||
|
|
|
@ -7,6 +7,14 @@ try:
|
||||||
CONFIG.setdefault("logging", {})
|
CONFIG.setdefault("logging", {})
|
||||||
CONFIG.setdefault("jimmy", {})
|
CONFIG.setdefault("jimmy", {})
|
||||||
CONFIG.setdefault("ollama", {})
|
CONFIG.setdefault("ollama", {})
|
||||||
|
CONFIG.setdefault(
|
||||||
|
"server",
|
||||||
|
{
|
||||||
|
"host": "0.0.0.0",
|
||||||
|
"port": 8080,
|
||||||
|
"channel": 1032974266527907901
|
||||||
|
}
|
||||||
|
)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
cwd = Path.cwd()
|
cwd = Path.cwd()
|
||||||
logging.getLogger("jimmy.autoconf").critical("Unable to locate config.toml in %s.", cwd, exc_info=True)
|
logging.getLogger("jimmy.autoconf").critical("Unable to locate config.toml in %s.", cwd, exc_info=True)
|
||||||
|
|
71
src/web.py
Normal file
71
src/web.py
Normal 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)
|
Loading…
Reference in a new issue