const app = document.querySelector('#app'); const errors = { denied: 'Esta conta não está autorizada a entrar no painel.', 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 = `
TS6 Botflow Local
`; 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 a entrar no painel.

Perfil
ID Discord
Novos utilizadoresSem acesso
'; document.querySelector('#discord-id').textContent = user.id; document.querySelector('#profile-role').textContent = user.role; 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

Acesso
AutenticaçãoDiscord
Ligação TeamSpeakPor configurar

Começamos por testar o login. Depois ligamos os bots e construímos os flows.

`; document.querySelector('#dashboard-role').textContent = user.role; } 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.'; });