TS6 Botflow
Painel local XanaX para gerir bots TeamSpeak, com login Discord e editor visual de flows. Mantém os logótipos originais e o tema flat roxo. As pastas dos projetos de origem permanecem intactas.
Funcionalidades
- Dashboard com bots, flows e execuções guardados na base de dados.
- Editor com blocos arrastáveis, ligações, condições, propriedades, zoom e gravação.
- Blocos: temporizador, início manual, informações do servidor, clientes, ordenação, limite, preparação de texto, edição da descrição de canal, mensagem, espera e registo.
- Simulação identificada com dados de exemplo, sem enviar pedidos ao TeamSpeak.
- Execução manual ou por temporizador, com histórico e resultado de cada passo. Um bot não executa duas vezes em simultâneo.
- Ligações WebQuery, teste de ligação e API keys cifradas em repouso.
- Variáveis por bot:
{{variables.nome}}. Outros valores:{{server.virtualserver_clientsonline}},{{count}},{{top}},{{text}}e{{time}}.
O primeiro arranque cria um rascunho Estatísticas, desativado, para atualizar a descrição do canal 21 a cada 30 segundos. O top inicial ordena as pessoas atualmente online pela data de entrada; não é um ranking histórico de tempo acumulado.
Esta versão não inclui reprodução de música, eventos SSH, webhooks, edição de permissões nem gestão de perfis pelo painel. Cada bot tem um flow. O editor disponibiliza os blocos implementados acima.
Docker / Portainer
Para Web editor com imagem construída no Gitea, consultar deploy/README.md e usar deploy/bot-stack.yaml. Cada push em main executa os testes e publica a imagem. Depois do workflow verde, atualizar a stack no Portainer com download da imagem e recriação do container. Restart sozinho não descarrega a nova imagem.
Para construir localmente com Docker Compose, usar compose.yaml. A aplicação escuta na porta 3080 e preserva os dados num volume montado em /app/data.
Variáveis de ambiente:
APP_URL: endereço do navegador, por exemplohttp://192.168.88.99:3080.DISCORD_CLIENT_ID: ID da aplicação Discord.DISCORD_CLIENT_SECRET: segredo OAuth da aplicação.OWNER_DISCORD_ID: IDs numéricos dos donos, separados por vírgulas. A stack inclui376768118535749633,723613831196311603. Um único ID continua a ser aceite.ALLOWED_DISCORD_IDS: IDs de leitores separados por vírgulas. Por defeito, não há leitores. Um ID presente nas duas listas recebe o perfil Dono.
No Discord Developer Portal, adicionar o redirect exato http://192.168.88.99:3080/auth/discord/callback, ajustando ao APP_URL. O navegador e o container precisam de Internet para o OAuth; o site pode continuar apenas na rede local.
O Dono pode configurar, guardar, simular e executar. O Leitor pode consultar. Outras contas são recusadas; as permissões são também verificadas no servidor.
Ligar ao TeamSpeak
Entrar com a conta do dono. Em Ligações, configurar o endereço WebQuery HTTP/HTTPS, o ID do servidor virtual e a API key TeamSpeak. Por exemplo, http://teamspeak6:10080 funciona quando ambos os containers partilham uma rede Docker com esse nome resolvível. Testar a ligação, escolher esse servidor na configuração do bot, simular e só depois ativar.
O temporizador aceita intervalos a partir de um segundo. A execução seguinte aguarda a conclusão da anterior; pedidos de rede e blocos de espera podem prolongar o intervalo efetivo. A configuração de permissões e proteção contra flood do TeamSpeak deve permitir os pedidos do bot.
Sessões e flows usam SQLite no volume. A chave de cifra das API keys fica em /app/data/credentials.key; preservar o volume completo nas cópias de segurança. O histórico retém as últimas 500 execuções. Não adicionar .env nem dados ao Git.
Desenvolvimento e validação
Node 22.15+, mesmas variáveis de ambiente e npm start. Executar npm test para verificar autenticação, restrições de acesso, persistência, simulação e execução WebQuery com transporte de teste. O build Docker executa os testes antes da publicação.
O editor foi verificado em navegador desktop e móvel. A execução no TeamSpeak real depende da ligação e API key configuradas na instalação; os testes locais não alteram o servidor real.
A fonte Public Sans é distribuída em public/fonts com a licença OFL. Os logótipos foram copiados sem alterações do projeto existente.