From 359226229d2e815ceea053fd5d058c5d77fc6142 Mon Sep 17 00:00:00 2001 From: janderedev Date: Sun, 20 Mar 2022 22:00:57 +0100 Subject: [PATCH] temp commit --- api/src/routes/dash/server.ts | 21 +++++ bot/src/bot/modules/api/server_details.ts | 22 +++++ web/src/App.css | 6 +- .../pages/ServerDashboard/ServerDashboard.tsx | 83 +++++++++++++++++-- 4 files changed, 126 insertions(+), 6 deletions(-) diff --git a/api/src/routes/dash/server.ts b/api/src/routes/dash/server.ts index 89e4c90..aa031e7 100644 --- a/api/src/routes/dash/server.ts +++ b/api/src/routes/dash/server.ts @@ -100,6 +100,27 @@ app.put('/dash/server/:server/:option', async (req: Request, res: Response) => { return; } + case 'votekickTrusted': { + if (!item || typeof item != 'string') return badRequest(res); + if (permissionLevel < 1) return res.status(403).send({ error: 'You are not allowed to mark roles as trusted.' }); + + const serverRes = await botReq('getUserServerDetails', { user: user, server: server }); + if (!serverRes.success) { + return res.status(serverRes.statusCode ?? 500).send({ error: serverRes.error }); + } + + if (!serverRes.roles.find((r: any) => r.id == item)) { + return res.status(404).send({ error: 'The specified role does not appear to exist' }); + } + + const newRoles = [ ...(settings.votekick.trustedRoles ?? []), item.toUpperCase() ]; + await servers.update({ id: server }, { $set: { 'votekick.trustedRoles': newRoles } }); + res.send({ + success: true, + roles: newRoles, + }); + } + case 'config': { function validateField(field: string, type: string[], level: 0|1|2|3): boolean { if (permissionLevel < level) { diff --git a/bot/src/bot/modules/api/server_details.ts b/bot/src/bot/modules/api/server_details.ts index a5bb3d2..47b8432 100644 --- a/bot/src/bot/modules/api/server_details.ts +++ b/bot/src/bot/modules/api/server_details.ts @@ -19,6 +19,16 @@ type ServerDetails = { serverConfig?: ServerConfig, users: APIUser[], channels: APIChannel[], + roles: { + id: string, + name: string, + color?: string, + rank?: number, + perms: { + server: number, + channel: number, + } + }[], } wsEvents.on('req:getUserServerDetails', async (data: ReqData, cb: (data: WSResponse) => void) => { @@ -80,6 +90,18 @@ wsEvents.on('req:getUserServerDetails', async (data: ReqData, cb: (data: WSRespo type: c!.channel_type == 'VoiceChannel' ? 'VOICE' : 'TEXT', icon: c!.generateIconURL(), })), + roles: server.roles + ? Object.entries(server.roles).map(r => ({ + id: r[0], + name: r[1].name, + color: r[1].colour, + rank: r[1].rank, + perms: { + server: r[1].permissions[0], + channel: r[1].permissions[1], + }, + })) + : [], } cb({ success: true, server: response }); diff --git a/web/src/App.css b/web/src/App.css index b43a996..7200db6 100644 --- a/web/src/App.css +++ b/web/src/App.css @@ -1,3 +1,7 @@ a:hover { text-decoration: underline; -} \ No newline at end of file +} + +.fgtext { + color: var(--foreground); +} diff --git a/web/src/pages/ServerDashboard/ServerDashboard.tsx b/web/src/pages/ServerDashboard/ServerDashboard.tsx index cd681a6..54a1c14 100644 --- a/web/src/pages/ServerDashboard/ServerDashboard.tsx +++ b/web/src/pages/ServerDashboard/ServerDashboard.tsx @@ -46,10 +46,19 @@ const ServerDashboard: FunctionComponent = () => { const [serverInfo, setServerInfo] = useState({} as Server); const [status, setStatus] = useState(''); - const [changed, setChanged] = useState({} as { prefix?: boolean, prefixAllowSpace?: boolean }); + const [changed, setChanged] = useState({} as { + prefix?: boolean, + prefixAllowSpace?: boolean, + votekickEnabled?: boolean, + votekickRequired?: number, + votekickDuration?: number, + }); const [prefix, setPrefix] = useState('' as string|undefined); const [prefixAllowSpace, setPrefixAllowSpace] = useState(false); - + const [votekickEnabled, setVotekickEnabled] = useState(false); + const [votekickRequired, setVotekickRequired] = useState(0); + const [votekickDuration, setVotekickDuration] = useState(0); + const [botManagers, setBotManagers] = useState([] as string[]); const [moderators, setModerators] = useState([] as string[]); @@ -86,6 +95,9 @@ const ServerDashboard: FunctionComponent = () => { setPrefix(server.serverConfig?.prefix || ''); setPrefixAllowSpace(!!server.serverConfig?.spaceAfterPrefix); + setVotekickEnabled(!!server.serverConfig?.votekick?.enabled); + setVotekickRequired(server.serverConfig?.votekick?.votesRequired ?? 0); + setVotekickDuration(server.serverConfig?.votekick?.banDuration ?? 0); setBotManagers(server.serverConfig?.botManagers ?? []); setModerators(server.serverConfig?.moderators ?? []); @@ -160,7 +172,7 @@ const ServerDashboard: FunctionComponent = () => { />