const app = document.querySelector('#app');
const errors = { denied: 'Esta conta ainda não tem acesso. Nesta fase, só o dono pode entrar.', authentication: 'O login expirou ou foi cancelado. Tenta novamente.', configuration: 'Falta configurar o Discord e o ID numérico do dono no Docker.' };
async function boot() {
const response = await fetch('/api/me');
if (!response.ok) throw new Error();
const { user, configured } = await response.json();
if (!user) {
app.innerHTML = `
O teu centro de bots.
Configura, acompanha e organiza as automações do teu TeamSpeak num só lugar.
Entrar com Discord →Acesso reservado · TS6 Botflow
`;
const message = errors[new URLSearchParams(location.search).get('error')] || (!configured && errors.configuration);
if (message) { const notice = document.querySelector('#notice'); notice.className = 'notice'; notice.textContent = message; }
return;
}
const data = await fetch('/api/dashboard'); if (!data.ok) throw new Error();
const dashboard = await data.json();
app.innerHTML = `
`;
document.querySelector('#username').textContent = user.name;
const content = document.querySelector('#content');
function page(name) {
document.querySelectorAll('.nav').forEach(b => b.classList.toggle('active', b.dataset.page === name));
if (name === 'access') {
content.innerHTML = 'Acesso ao painel
A tua conta está autorizada como dono.
PerfilDono
ID Discord
Novos utilizadoresSem acesso
';
document.querySelector('#discord-id').textContent = user.id; return;
}
if (name === 'bots') { content.innerHTML = 'Bots e flows
A primeira experiência valida o painel e o acesso.
◇Ainda não existem bots.
O editor de flows e a ligação ao TeamSpeak serão a próxima etapa.
'; return; }
content.innerHTML = `Dashboard
Bem-vindo ao teu centro de automações.
${[['Bots',dashboard.bots.length],['Flows',dashboard.flows.length],['Execuções',dashboard.executions.length],['Servidores',dashboard.connections.length]].map(([label,value])=>`
${label}${value}
`).join('')}
Atividade recente
◷Ainda sem execuções.
A atividade dos bots aparecerá aqui.
O teu espaço
AcessoDono
AutenticaçãoDiscord
Ligação TeamSpeakPor configurar
Começamos por testar o login. Depois ligamos os bots e construímos os flows.
`;
}
document.querySelectorAll('.nav').forEach(b => b.onclick = () => page(b.dataset.page));
document.querySelector('#logout').onclick = async () => { const r = await fetch('/auth/logout', { method: 'POST' }); if (r.ok) location.assign('/'); };
page('dashboard');
}
boot().catch(() => { app.textContent = 'Não foi possível carregar o painel. Atualiza a página para tentar novamente.'; });