Skip to content

Commit

Permalink
feat: Manage prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
null2264 committed Jul 17, 2023
1 parent 721b84c commit 82ece3d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 35 deletions.
47 changes: 31 additions & 16 deletions nexus/core/routes/ng/meta.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
from __future__ import annotations
# FIXME: __future__.annotations broke pydantics
# REF: https://github.com/tiangolo/fastapi/discussions/9709#discussioncomment-6449458
# from __future__ import annotations

import json
from typing import TYPE_CHECKING, Any, List, Optional, Union, overload

import discord
import zmq
import zmq.asyncio
from fastapi import HTTPException
from fastapi.routing import APIRouter
from pydantic import BaseModel
from starlette.requests import Request
from starlette.responses import JSONResponse

Expand All @@ -26,16 +28,16 @@


@overload
async def requestBot(app: Nexus, requestMessage: dict, userId: Optional[str] = None) -> list[Any]:
async def requestBot(app: "Nexus", requestMessage: dict, userId: Optional[str] = None) -> list[Any]:
...


@overload
async def requestBot(app: Nexus, requestMessage: dict, userId: Optional[str] = None) -> dict[str, Any]:
async def requestBot(app: "Nexus", requestMessage: dict, userId: Optional[str] = None) -> dict[str, Any]:
...


async def requestBot(app: Nexus, requestMessage: dict, userId: Optional[str] = None) -> Union[dict[str, Any], list[Any]]:
async def requestBot(app: "Nexus", requestMessage: dict, userId: Optional[str] = None) -> Union[dict[str, Any], list[Any]]:
retries = 0

if userId:
Expand All @@ -48,14 +50,13 @@ async def requestBot(app: Nexus, requestMessage: dict, userId: Optional[str] = N
await app.reqSocket.send_string(request)
message = json.loads(await app.reqSocket.recv_string())
return message
except Exception as e:
except (Exception, BaseException) as e:
app.logger.error(e)
if retries >= constants.REQUEST_RETRIES:
raise HTTPException(502, str(e))

if app._reqSocket:
app._reqSocket.setsockopt(zmq.LINGER, 0)
app._reqSocket.close()
app._reqSocket.close(linger=0)
app.logger.info("Reconnecting to bot...")
app.initRequestSocket()
retries += 1
Expand All @@ -64,7 +65,7 @@ async def requestBot(app: Nexus, requestMessage: dict, userId: Optional[str] = N


async def getchUser(request: Request) -> User:
app: Nexus = request.app
app: "Nexus" = request.app
user = app.cachedUser.get(request.session.get("userId", 0))

if not user:
Expand All @@ -82,7 +83,7 @@ async def getchGuilds(request: Request) -> List[Guild]:
user = await getchUser(request)
userId = user.id

app: Nexus = request.app
app: "Nexus" = request.app

guilds = app.cachedGuilds.get(userId)

Expand Down Expand Up @@ -146,23 +147,37 @@ async def guildAuth(request: Request, guild_id: int):
return "hello world"


@router.get("/guildstats")
@router.get("/guild/{guildId}/stats")
@requireValidAuth
async def guildStats(request: Request, guild_id: int):
return await requestBot(request.app, {"type": "guild", "id": guild_id}, request.session.get("userId"))
async def guildStats(request: Request, guildId: int):
return await requestBot(request.app, {"type": "guild", "id": guildId}, request.session.get("userId"))


@router.get("/botstats")
async def botstats(request: Request):
return await requestBot(request.app, {"type": "bot-stats"})


@router.put("/prefix")
class Prefix(BaseModel):
prefix: str


@router.put("/guild/{guildId}/prefix")
@requireValidAuth
async def prefixPut(request: Request, guildId: int, prefix: Prefix):
return await requestBot(
request.app,
{"type": "prefix-add", "guildId": guildId, "prefix": prefix.prefix},
request.session.get("userId"),
)


@router.delete("/guild/{guildId}/prefix")
@requireValidAuth
async def prefixPut(request: Request, guildId: int, prefix: str):
async def prefixDelete(request: Request, guildId: int, prefix: Prefix):
return await requestBot(
request.app,
{"type": "prefix-add", "guildId": guildId, "prefix": prefix},
{"type": "prefix-rm", "guildId": guildId, "prefix": prefix.prefix},
request.session.get("userId"),
)

Expand Down
34 changes: 17 additions & 17 deletions pdm.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ authors = [
{name = "null2264", email = "[email protected]"}
]
license = {text = "MPL-2.0"}
requires-python = ">=3.9"
requires-python = ">=3.10"
dependencies = [
"fastapi==0.92.0",
"fastapi==0.100.0",
"discord.py>=2.2",
"pyzmq==25.0.0",
"websockets>=10.4",
Expand All @@ -18,6 +18,7 @@ dependencies = [
"oauthlib>=3.2.2",
"beautifulsoup4>=4.12.2",
"Pillow>=10.0.0",
"pydantic>=1.10,<=2.0",
]

[tool.pdm.scripts]
Expand Down

0 comments on commit 82ece3d

Please sign in to comment.