feat: Mejorar la selección de servidores y mostrar el nombre del servidor seleccionado en la navegación del dashboard
This commit is contained in:
@@ -898,15 +898,23 @@ export const server = createServer(
|
|||||||
}
|
}
|
||||||
touchSession(sid!);
|
touchSession(sid!);
|
||||||
|
|
||||||
// Simple guild list: for demo, fetch guilds where guild.staff contains user.id (not implemented fully)
|
// Guild list: prefer session-stored guilds from OAuth (accurate), otherwise fallback to DB
|
||||||
const guilds = await (async () => {
|
const sessionGuilds: Array<{ id: string; name?: string }> =
|
||||||
|
session?.guilds || [];
|
||||||
|
let guilds: Array<{ id: string; name: string }> = [];
|
||||||
|
if (sessionGuilds && sessionGuilds.length) {
|
||||||
|
guilds = sessionGuilds.map((g: any) => ({
|
||||||
|
id: String(g.id),
|
||||||
|
name: String(g.name || g.id),
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
try {
|
try {
|
||||||
const rows = await prisma.guild.findMany({ take: 10 });
|
const rows = await prisma.guild.findMany({ take: 50 });
|
||||||
return rows.map((r) => ({ id: r.id, name: r.name }));
|
guilds = rows.map((r) => ({ id: r.id, name: r.name }));
|
||||||
} catch {
|
} catch {
|
||||||
return [];
|
guilds = [];
|
||||||
}
|
}
|
||||||
})();
|
}
|
||||||
|
|
||||||
// /dashboard -> main dashboard
|
// /dashboard -> main dashboard
|
||||||
if (url.pathname === "/dashboard" || url.pathname === "/dashboard/") {
|
if (url.pathname === "/dashboard" || url.pathname === "/dashboard/") {
|
||||||
@@ -936,12 +944,16 @@ export const server = createServer(
|
|||||||
if (parts.length >= 2) {
|
if (parts.length >= 2) {
|
||||||
const guildId = parts[1];
|
const guildId = parts[1];
|
||||||
const page = parts[2] || "overview";
|
const page = parts[2] || "overview";
|
||||||
// Render dashboard with selected guild context; hide global navbar for server view
|
// find a nicer display name for selected guild
|
||||||
|
const found = guilds.find((g) => String(g.id) === String(guildId));
|
||||||
|
const selectedGuildName = found ? found.name : guildId;
|
||||||
|
// Render dashboard with selected guild context; show dashboard nav
|
||||||
await renderTemplate(req, res, "dashboard", {
|
await renderTemplate(req, res, "dashboard", {
|
||||||
appName: pkg.name ?? "Amayo Bot",
|
appName: pkg.name ?? "Amayo Bot",
|
||||||
user,
|
user,
|
||||||
guilds,
|
guilds,
|
||||||
selectedGuild: guildId,
|
selectedGuild: guildId,
|
||||||
|
selectedGuildName,
|
||||||
page,
|
page,
|
||||||
hideNavbar: false,
|
hideNavbar: false,
|
||||||
useDashboardNav: true,
|
useDashboardNav: true,
|
||||||
|
|||||||
@@ -31,50 +31,7 @@
|
|||||||
<%- body %>
|
<%- body %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="pixel-box mt-16 mx-4 mb-8">
|
|
||||||
<div class="max-w-6xl mx-auto">
|
|
||||||
<div class="text-center mb-8">
|
|
||||||
<h3 class="mb-4">Amayo Bot</h3>
|
|
||||||
<p class="text-sm pixel-text-dim">Sistema completo de juego, economía y gestión para Discord</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-wrap justify-center gap-4 mb-6 text-sm items-center">
|
|
||||||
<span class="pixel-leaf" style="width: 16px; height: 10px;"></span>
|
|
||||||
<a href="#primeros-pasos">Primeros Pasos</a>
|
|
||||||
<span>✦</span>
|
|
||||||
<a href="#comandos-basicos">Comandos</a>
|
|
||||||
<span>✦</span>
|
|
||||||
<a href="#minijuegos">Minijuegos</a>
|
|
||||||
<span>✦</span>
|
|
||||||
<a href="#faq">FAQ</a>
|
|
||||||
<span class="pixel-leaf" style="width: 16px; height: 10px; transform: rotate(20deg);"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pixel-border p-4 mb-6" style="background: linear-gradient(135deg, var(--pixel-bg-dark) 0%, var(--pixel-bg-medium) 100%);">
|
|
||||||
<div class="flex items-center justify-center gap-4 text-sm" style="color: var(--text-secondary);">
|
|
||||||
<span class="pixel-pumpkin" style="width: 16px; height: 16px;"></span>
|
|
||||||
<span>VER <%= version %></span>
|
|
||||||
<span>•</span>
|
|
||||||
<span>DJS <%= djsVersion %></span>
|
|
||||||
<span>•</span>
|
|
||||||
<span><%= currentDateHuman %></span>
|
|
||||||
<span class="pixel-ghost" style="width: 16px; height: 20px;"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p class="text-center text-sm mb-6 flex items-center justify-center gap-3" style="color: var(--text-muted);">
|
|
||||||
<span class="pixel-star-halloween">✦</span>
|
|
||||||
<span>Amayo © <%= new Date().getFullYear() %> — Documentación para usuarios finales de Discord</span>
|
|
||||||
<span class="pixel-star-halloween">✦</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="text-center">
|
|
||||||
<a class="pixel-btn-secondary pixel-btn inline-block" href="#primeros-pasos">
|
|
||||||
↑ Volver arriba
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="/assets/js/main.js" type="module"></script>
|
<script src="/assets/js/main.js" type="module"></script>
|
||||||
<script src="/assets/js/code.js" defer></script>
|
<script src="/assets/js/code.js" defer></script>
|
||||||
|
|||||||
@@ -6,8 +6,9 @@
|
|||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<label class="block text-xs text-slate-300 mb-2">Servidor</label>
|
<label class="block text-xs text-slate-300 mb-2">Servidor</label>
|
||||||
<select id="guildSelector" class="w-full rounded-md p-3 bg-white/6 text-white focus:outline-none">
|
<select id="guildSelector" class="w-full rounded-md p-3 bg-white/6 text-white focus:outline-none">
|
||||||
|
<option value="">Selecciona un servidor...</option>
|
||||||
<% if (guilds && guilds.length) { %>
|
<% if (guilds && guilds.length) { %>
|
||||||
<% guilds.forEach(g => { %>
|
<% guilds.sort((a,b)=> a.name.localeCompare(b.name)).forEach(g => { %>
|
||||||
<option value="<%= g.id %>"><%= g.name %> (<%= g.id %>)</option>
|
<option value="<%= g.id %>"><%= g.name %> (<%= g.id %>)</option>
|
||||||
<% }) %>
|
<% }) %>
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
@@ -15,18 +16,13 @@
|
|||||||
<% } %>
|
<% } %>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 text-right">
|
|
||||||
<button id="goBtn" class="pixel-btn">Ir al servidor</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const sel = document.getElementById('guildSelector');
|
const sel = document.getElementById('guildSelector');
|
||||||
const btn = document.getElementById('goBtn');
|
sel?.addEventListener('change', (e)=>{
|
||||||
btn?.addEventListener('click', () => {
|
const v = e.target.value;
|
||||||
const v = sel.value;
|
|
||||||
if (v) window.location.href = `/dashboard/${v}/overview`;
|
if (v) window.location.href = `/dashboard/${v}/overview`;
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -13,6 +13,10 @@
|
|||||||
<img src="<%= user.avatar || '/assets/images/snap1.svg' %>" class="w-8 h-8 rounded-full" alt="avatar">
|
<img src="<%= user.avatar || '/assets/images/snap1.svg' %>" class="w-8 h-8 rounded-full" alt="avatar">
|
||||||
<span class="text-white"><%= user.username %></span>
|
<span class="text-white"><%= user.username %></span>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="text-sm text-white/70 px-3">|</span>
|
||||||
|
<% if (typeof selectedGuildName !== 'undefined' && selectedGuildName) { %>
|
||||||
|
<span class="text-white/80"> <%= selectedGuildName %> </span>
|
||||||
|
<% } %>
|
||||||
<a href="/auth/logout" class="text-sm text-white/70 px-3 py-2 rounded-md hover:bg-white/5">Salir</a>
|
<a href="/auth/logout" class="text-sm text-white/70 px-3 py-2 rounded-md hover:bg-white/5">Salir</a>
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
<a href="/auth/discord" class="text-sm text-white/70 px-3 py-2 rounded-md hover:bg-white/5">Entrar</a>
|
<a href="/auth/discord" class="text-sm text-white/70 px-3 py-2 rounded-md hover:bg-white/5">Entrar</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user