From 0490fc71ad2465aacf2a749e5d9271d40a49276c Mon Sep 17 00:00:00 2001 From: Shni Date: Wed, 15 Oct 2025 01:39:05 -0500 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- .../public/assets/images/logo-amayo.svg | 8 ++ src/server/server.ts | 38 +++++---- src/server/views/pages/dashboard.ejs | 61 ++++++++++++++ src/server/views/pages/login.ejs | 84 +++++++++++++++++-- 4 files changed, 171 insertions(+), 20 deletions(-) create mode 100644 src/server/public/assets/images/logo-amayo.svg diff --git a/src/server/public/assets/images/logo-amayo.svg b/src/server/public/assets/images/logo-amayo.svg new file mode 100644 index 0000000..568e66e --- /dev/null +++ b/src/server/public/assets/images/logo-amayo.svg @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/src/server/server.ts b/src/server/server.ts index b3f130f..8cafe62 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1155,6 +1155,8 @@ export const server = createServer( if (parts.length >= 2) { const guildId = parts[1]; const page = parts[2] || "overview"; + const fragment = + url.searchParams.get("fragment") || url.searchParams.get("ajax"); // find a nicer display name for selected guild const found = guilds.find((g) => String(g.id) === String(guildId)); const selectedGuildName = found ? found.name : guildId; @@ -1193,10 +1195,9 @@ export const server = createServer( } // Render dashboard with selected guild context; show dashboard nav // If caller requested a fragment, render only the page template (no layout) - const fragment = - url.searchParams.get("fragment") || url.searchParams.get("ajax"); if (fragment) { - const pageFile = path.join(viewsDir, "pages", `${page}.ejs`); + // Render the dashboard page and extract the inner #dashContent fragment + const dashPage = path.join(viewsDir, "pages", `dashboard.ejs`); const pageLocals = { appName: pkg.name ?? "Amayo Bot", user, @@ -1211,23 +1212,30 @@ export const server = createServer( useDashboardNav: true, }; try { - const fragmentHtml = await ejs.renderFile(pageFile, pageLocals, { + const fullPageHtml = await ejs.renderFile(dashPage, pageLocals, { async: true, }); - res.writeHead( - 200, - applySecurityHeadersForRequest(req, { - "Content-Type": "text/html; charset=utf-8", - }) - ); - res.end(fragmentHtml); - return; + // extract content inside the first
...
+ const match = + /]*>([\s\S]*?)<\/div>/.exec( + fullPageHtml + ); + if (match && match[1] != null) { + const fragmentHtml = match[1]; + res.writeHead( + 200, + applySecurityHeadersForRequest(req, { + "Content-Type": "text/html; charset=utf-8", + }) + ); + res.end(fragmentHtml); + return; + } + // if extraction failed, fall through to full render } catch (err) { - console.warn("Failed rendering page fragment:", err); - // fallthrough to full render + console.warn("Failed rendering dashboard fragment:", err); } } - await renderTemplate(req, res, "dashboard", { appName: pkg.name ?? "Amayo Bot", user, diff --git a/src/server/views/pages/dashboard.ejs b/src/server/views/pages/dashboard.ejs index 853a262..7160e1f 100644 --- a/src/server/views/pages/dashboard.ejs +++ b/src/server/views/pages/dashboard.ejs @@ -45,6 +45,67 @@ <% } %>
+ <% if (typeof page !== 'undefined' && page === 'overview' && selectedGuild) { %> +
+
+ + + + +
+
+
+

Welcome <%= user?.username || 'Admin' %>

+

find commonly used dashboard pages below.

+
+
+ +
+
+

Custom messages

+

Create fully customized messages called templates and pack them with your very own embeds, buttons and select menus.

+ +
+
+

Moderation cases

+

View and edit all moderation cases using the dashboard.

+ +
+
+

User reports

+

Allow users to report others and fully customize how to handle them.

+ +
+
+

Role greetings

+

Welcome users to their new role by using role assignment messages.

+ +
+
+
+ + + +
+
+ <% } %> + <% if (typeof page !== 'undefined' && page === 'settings' && selectedGuild) { %>
diff --git a/src/server/views/pages/login.ejs b/src/server/views/pages/login.ejs index ad0fbc2..9076dea 100644 --- a/src/server/views/pages/login.ejs +++ b/src/server/views/pages/login.ejs @@ -1,7 +1,81 @@ -
-
-

Inicia sesión con Discord

-

Para administrar servidores y usar el dashboard debes autenticarte con Discord.

- Continuar con Discord +
+
+
+ + +

Sapphire

+
+ +
+

Log in with Discord to access the dashboard.

+ + + + Log in with Discord + + + + +
+ +
+
+ + + +