Bxio 52f44b368d
All checks were successful
Testar e publicar imagem Docker / publish (push) Successful in 32s
Send WebQuery action parameters as JSON instead of form data
2026-10-10 21:06:18 +01:00

TS6 Botflow 0.3

Painel local XanaX para gerir bots TeamSpeak, com login Discord e editor visual de flows. Usa os logótipos originais e o tema flat roxo.

Editor e motor

  • 68 blocos para eventos, dados, lógica, clientes, canais, grupos, servidor, permissões e integrações.
  • Vários pontos de início por flow: temporizador, cron, manual, eventos TeamSpeak, comandos de chat e webhook.
  • Portas Seguinte, Sim/Não, Cada/Fim e Erro. Ciclos no grafo são recusados; Para cada item percorre listas.
  • Arrastar, zoom, ajustar ao ecrã, organizar, duplicar, desfazer/refazer, pesquisa e validação.
  • Atalhos na área do editor: Ctrl+S, Ctrl+Z, Ctrl+Y, Ctrl+D e Delete. Shift+arrastar ou botão do meio desloca a área.
  • Templates: Estatísticas, Boas-vindas, Mover inativos, Comando de informações, Contador de entradas e Personalizado.
  • Importação/exportação JSON e duplicação. Importações começam desativadas e sem ligação. Exportações omitem campos secretos; webhooks importados recebem novos segredos.
  • Listas de clientes, canais, grupos e permissões carregadas do servidor pelo botão no editor.
  • Simulação com dados de exemplo ou evento JSON personalizado, sem pedidos TeamSpeak/HTTP/Discord nem alterações em variáveis persistentes.
  • Histórico por passo, tentativas, cancelamento, filtros e atualização automática.

A falha segue a porta Erro, quando ligada, e fica registada como erro tratado. Sem essa ligação, termina a execução. Até três tentativas adicionais repetem a ação. Cada bot tem uma execução de cada vez, fila limitada de eventos e limite de duração entre 10 e 600 segundos.

Ações

Categoria Operações
Clientes Consultar, mensagem privada/canal/servidor, poke, mover, kick, ban e remover ban
Canais Listar, consultar, criar, editar campos/descrição, mover e apagar
Grupos Listar, criar, renomear, apagar; adicionar/remover cliente, definir grupo de canal, consultar membros e grupos de um cliente
Servidor Consultar informações e editar campos com parâmetros JSON
Permissões Adicionar/remover/consultar: cliente, canal, grupo de servidor, grupo de canal e cliente num canal
Lógica Condições, expressões, ordenação, top, filtros, foreach, variáveis, cálculos, códigos aleatórios, texto, espera e paragem
Integrações HTTP GET/POST/PUT/PATCH/DELETE, Discord, webhook de entrada e WebQuery avançado

clid identifica a sessão online; cldbid identifica a pessoa na base de dados para grupos/permissões. Usar {{event.clid}} ou {{event.client_database_id}}; num foreach, {{item.clid}} ou {{item.client_database_id}}.

WebQuery avançado recebe operação e parâmetros JSON separados. Exemplo: channeledit, parâmetros {"cid":21,"channel_description":"{{text}}"}. Inclui operações adicionais para tokens, mensagens, reclamações, logs, cópia de grupos e edição de clientes. A resposta é uma lista em temp.result (configurável): {{temp.result.0.campo}}. Blocos de criação de canal/grupo guardam um objeto com o ID criado.

Variáveis e expressões

Blocos de dados preenchem server, clients, channels e temp. Executá-los antes de usar os seus valores. Variáveis persistentes suportam texto, números, booleanos e JSON. Temporárias duram uma execução.

{{server.virtualserver_name}}
{{server.virtualserver_clientsonline - server.virtualserver_queryclientsonline}}
{{variables.entradas}}
{{temp.resultado}}
{{event.command_args}}
{{event.webhook_body.name}}
{{item.client_nickname}}
{{text}}
{{top}}
{{time}}
{{time.time}}:{{time.seconds}}
{{temp.error.message}}

Expressões suportam contas, parênteses, comparações, &&, || e !, com avaliação condicional de &&/||. Funções: round, floor, ceil, abs, min, max, lower, upper, length, contains, startsWith, endsWith. São interpretadas por um parser próprio, sem executar JavaScript. Valores em falta numa conta ou divisão por zero produzem erro no passo.

Filtros: {{text | upper}}, {{temp.result | json}}, {{server.virtualserver_uptime | uptime}}. Horário: Europe/Lisbon; o trigger cron tem fuso configurável.

O template Estatísticas atualiza o canal 21 a cada 30 segundos. O top ordena pessoas atualmente online pela data de entrada. Ranking histórico está no checklist.

Eventos, chat e webhooks

Em Ligações, configurar WebQuery HTTP/HTTPS, ID virtual e API key. Para eventos/comandos, ativar Escuta SSH Query e indicar host, porta (habitualmente 10022), utilizador e password do SSH Query TeamSpeak.

A primeira ligação guarda a impressão digital SHA-256; uma alteração da chave exige confirmar e atualizar esse campo. Há reconexão automática e estado visível em Ligações. Escutas começam quando um bot ativo as utiliza, partilhadas por servidor/canal.

Um comando pode restringir um grupo de servidor. Canal vazio escuta mensagens privadas/servidor. Um ID de canal cria uma sessão Query nesse canal para escutar o seu chat. Notificações de entrada, saída, movimento, mensagens e edição de canais/servidor ficam em event.

Webhook: POST /api/hooks/ID_DO_BOT, cabeçalho X-Webhook-Secret (ou Bearer) com o segredo do bloco. O bot deve estar ativo. Corpo JSON em event.webhook_body. Limites: 30 chamadas por minuto por bot, 100 eventos em fila, corpo até 500 KB. O bloco permite filtros de campos do corpo.

Cron aceita cinco/seis campos numéricos, *, listas, intervalos e passos. * * * * * * executa a cada segundo; * * * * * a cada minuto. Temporizadores aceitam um segundo. Ações demoradas prolongam o intervalo efetivo; permissões e proteção contra flood do TeamSpeak devem permitir os pedidos.

Docker / Portainer

Web editor: deploy/bot-stack.yaml. Runner: deploy/README.md. Cada push em main testa, constrói e publica. Depois do workflow verde, fazer Update stack / Re-pull and redeploy. O volume /app/data preserva bots, flows, ligações e sessões. Build local: compose.yaml.

Variáveis: APP_URL (ex. http://192.168.88.99:3080), DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, OWNER_DISCORD_ID (IDs separados por vírgulas), ALLOWED_DISCORD_IDS (leitores). A stack tem os donos 376768118535749633,723613831196311603; um dono mantém o perfil mesmo que esteja nas duas listas.

Discord: adicionar redirect exato APP_URL/auth/discord/callback. O Dono configura/guarda/executa; o Leitor consulta, com controlo no backend. As credenciais TeamSpeak determinam as ações aceites pelo servidor.

http://teamspeak6:10080 funciona numa rede Docker partilhada que resolve o nome; também podes usar a porta publicada no IP da máquina. Testar a ligação e simular antes de ativar.

Persistência e validação

SQLite mantém o formato dos flows anteriores. API keys, passwords SSH e campos secretos são cifrados com AES-GCM. Preservar todo o volume, incluindo credentials.key, nas cópias de segurança. Histórico: 500 execuções. Encerramento cancela trabalhos antes de fechar a base de dados; interrupções abruptas são assinaladas no arranque.

Node 22.15+: npm ci --ignore-scripts, npm start, npm test. Testes abrangem autenticação, permissões, simulação de todos os blocos, payloads, foreach, cálculos, retries, erros, cancelamento, webhooks, armazenamento e compatibilidade. Servidores HTTP/SSH de teste verificam autenticação e notificações; ações administrativas não são executadas no TeamSpeak real. O editor é verificado em navegador desktop/móvel.

Voz/música, subflows/versionamento, gestão de perfis no painel e ranking histórico estão no checklist. Cada bot tem um flow com vários triggers. Voz precisa de identidade, protocolo e motor de áudio próprios.

Public Sans inclui licença OFL em public/fonts. Os logótipos conservam os ficheiros originais.

Description
No description provided
Readme 292 KiB
Languages
JavaScript 87.8%
CSS 11.8%
Dockerfile 0.2%
HTML 0.2%