From bd0fbbbeb328da4391c2a34c0a8b70fa2c116adc Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Wed, 29 Apr 2026 11:38:36 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Auto-deploy:=20BotVPS=20atualiza?= =?UTF-8?q?do=20em=2029/04/2026=2011:38:36?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tools.py b/tools.py index e18bbdb..16bc5e1 100644 --- a/tools.py +++ b/tools.py @@ -161,16 +161,24 @@ def resolve_account(account_alias: str) -> str: clean = account_alias.strip().lower() return ACCOUNT_MAPPING.get(clean, f"gws-{clean}") -def list_gmail_emails(account: str) -> str: +def list_gmail_emails(account_alias: str) -> str: """Lista os últimos 5 e-mails com Título e Remetente. Aceita apelidos: ma, mr, adm, 4r.""" - account = resolve_account(account) + account = resolve_account(account_alias) list_cmd = f"{account} gmail users messages list --params '{{\"userId\": \"me\", \"maxResults\": 5}}'" res = run_bash_command(list_cmd) try: - data = json.loads(res) + # Limpeza de JSON (remove lixo do keyring/stderr no stdout) + json_match = re.search(r"(\{.*\})", res, re.S) + res_clean = json_match.group(1) if json_match else res + data = json.loads(res_clean) + + if "error" in data: + err_msg = data["error"].get("message", str(data["error"])) + return f"❌ Erro de Autenticação GWS ({account}): {err_msg}. Você pode precisar reautenticar o CLI na VPS." + messages = data.get("messages", []) - if not messages: return "Nenhum e-mail encontrado." + if not messages: return "📭 Nenhum e-mail encontrado na caixa de entrada." result_text = "📧 **Últimos E-mails:**\n" for i, msg in enumerate(messages, 1): @@ -178,7 +186,11 @@ def list_gmail_emails(account: str) -> str: details_cmd = f"{account} gmail users messages get --params '{{\"userId\": \"me\", \"id\": \"{msg_id}\", \"format\": \"metadata\", \"metadataHeaders\": [\"Subject\", \"From\"]}}'" details_res = run_bash_command(details_cmd) try: - details = json.loads(details_res) + # Limpeza de JSON também nos detalhes + dm = re.search(r"(\{.*\})", details_res, re.S) + dc = dm.group(1) if dm else details_res + details = json.loads(dc) + headers = details.get("payload", {}).get("headers", []) subject = next((h["value"] for h in headers if h["name"] == "Subject"), "Sem Assunto") sender = next((h["value"] for h in headers if h["name"] == "From"), "Desconhecido")