From ff688b76b6bc81e926d0f20cbc5f5f6c6fdc71f4 Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Sat, 28 Mar 2026 19:27:25 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Auto-deploy:=20BotVPS=20atualiza?= =?UTF-8?q?do=20em=2028/03/2026=2019:27:25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools.py | 16 ++++++++++++++-- tools_v2.py | 11 ++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/tools.py b/tools.py index d98e636..59099e1 100644 --- a/tools.py +++ b/tools.py @@ -8,23 +8,35 @@ import json def run_bash_command(command: str) -> str: """Executa um comando bash na VPS e retorna a saída.""" try: + # Garante caminhos comuns no PATH para execução via PM2/Containers + custom_env = os.environ.copy() + paths = ["/usr/local/bin", "/root/.cargo/bin", "/usr/bin", "/bin"] + current_path = custom_env.get("PATH", "") + for p in paths: + if p not in current_path: + current_path = f"{p}:{current_path}" + custom_env["PATH"] = current_path + # Executa comando de forma segura dentro da VPS result = subprocess.run( command, shell=True, capture_output=True, text=True, - timeout=120 # Aumentado para comandos mais pesados + timeout=120, + env=custom_env ) output = result.stdout.strip() error = result.stderr.strip() - # Se encontrou algo no stdout, retornamos o que achou mesmo com erro (ex: find com permissão negada em algumas pastas) + # Se encontrou algo no stdout, retornamos o que achou mesmo com erro if output: return output if result.returncode != 0: + if result.returncode == 127: + return f"ERRO (127): Comando não encontrado. Verifique se o alias ou binário está no PATH. (Comando: {command})" return f"ERRO ({result.returncode}): {error if error else 'Nada no stderr'}" return "Sucesso (vazio)" diff --git a/tools_v2.py b/tools_v2.py index 9e8fd58..e424e95 100644 --- a/tools_v2.py +++ b/tools_v2.py @@ -16,7 +16,16 @@ def run_bash(command: str, timeout: int = 120) -> Dict: # Auto-moderniza docker-compose command = command.replace("docker-compose", "docker compose") try: - result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout) + # Garante caminhos comuns no PATH para execução via PM2/Containers + custom_env = os.environ.copy() + paths = ["/usr/local/bin", "/root/.cargo/bin", "/usr/bin", "/bin"] + current_path = custom_env.get("PATH", "") + for p in paths: + if p not in current_path: + current_path = f"{p}:{current_path}" + custom_env["PATH"] = current_path + + result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout, env=custom_env) return { "success": result.returncode == 0, "output": (result.stdout or result.stderr).strip() or "Sucesso"