From 721b84cb9bdfaaa067ef03379f15c0a2845901f9 Mon Sep 17 00:00:00 2001 From: ziro Date: Mon, 17 Jul 2023 10:00:40 +0700 Subject: [PATCH] feat: Invite endpoint --- nexus/core/routes/auth.py | 14 ++++++++++++++ nexus/core/routes/ng/meta.py | 8 ++------ nexus/utils/discord_utils.py | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 nexus/utils/discord_utils.py diff --git a/nexus/core/routes/auth.py b/nexus/core/routes/auth.py index dcde885..6e30729 100644 --- a/nexus/core/routes/auth.py +++ b/nexus/core/routes/auth.py @@ -1,9 +1,13 @@ +from typing import Annotated, Union + +from fastapi import Header from fastapi.requests import Request from fastapi.responses import JSONResponse, RedirectResponse from fastapi.routing import APIRouter from nexus.core.oauth import OAuth2Session from nexus.core.oauth.decorators import requireValidAuth +from nexus.utils.discord_utils import generateInviteLink router = APIRouter() @@ -27,3 +31,13 @@ async def logout(request: Request): if request.cookies.get("loggedIn"): resp.delete_cookie("loggedIn") return resp + + +@router.get("/invite") +async def invite(request: Request): + inviteLink = generateInviteLink(request) + resp = RedirectResponse(inviteLink) + contentType: Union[str, None] = request.headers.get("content-type") + if contentType == "application/json": + resp = JSONResponse({"invite": inviteLink}) + return resp diff --git a/nexus/core/routes/ng/meta.py b/nexus/core/routes/ng/meta.py index ac7f4d8..a17e28e 100644 --- a/nexus/core/routes/ng/meta.py +++ b/nexus/core/routes/ng/meta.py @@ -15,6 +15,7 @@ from nexus.core.oauth import Guild, User from nexus.core.oauth.decorators import requireValidAuth from nexus.core.oauth.utils import validateAuth +from nexus.utils.discord_utils import generateInviteLink if TYPE_CHECKING: @@ -123,12 +124,7 @@ async def managedGuilds(request: Request): guildJson = guild.json() # for some reason 'guild.id in botGuilds' always returns False guildJson["bot"] = int(guild.id) in [int(i) for i in botGuilds] - guildJson["invite"] = discord.utils.oauth_url( - request.app.clientId, - permissions=discord.Permissions(4260883702), - guild=guild, - # redirect_uri=os.getenv("DISCORD_GUILD_REDIRECT_URI"), - ) + guildJson["invite"] = generateInviteLink(request, guild) ret.append(guildJson) # show guilds that has the bot in it first, while also sort them by name diff --git a/nexus/utils/discord_utils.py b/nexus/utils/discord_utils.py new file mode 100644 index 0000000..f583f23 --- /dev/null +++ b/nexus/utils/discord_utils.py @@ -0,0 +1,15 @@ +from typing import Optional +import discord +from discord.abc import MISSING +from starlette.requests import Request + +from nexus.core.oauth.models import Guild + + +def generateInviteLink(request: Request, guild: Optional[Guild] = None): + return discord.utils.oauth_url( + request.app.clientId, + permissions=discord.Permissions(4260883702), + guild=guild or MISSING, + # redirect_uri=os.getenv("DISCORD_GUILD_REDIRECT_URI"), + )