From 81603be0a5fbfa0ae6eeee29a384ad9413fa9be5 Mon Sep 17 00:00:00 2001 From: "Rodrigo B. de Sousa Martins" Date: Mon, 11 Aug 2025 21:42:05 -0300 Subject: [PATCH] topsapp: fix liberar cliente no handler Signed-off-by: Rodrigo B. de Sousa Martins --- src/bot/handler.js | 108 ++++++++++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 30 deletions(-) diff --git a/src/bot/handler.js b/src/bot/handler.js index 7d7f2de..ccf979c 100644 --- a/src/bot/handler.js +++ b/src/bot/handler.js @@ -3303,25 +3303,16 @@ Digite /help para ver todos os comandos disponíveis! const clienteId = parts[0]; const location = parts[1] ? parts[1].replace(/_/g, ' ') : ''; - await this.bot.answerCallbackQuery(callbackQuery.id, 'Processando liberação...'); + await this.bot.answerCallbackQuery(callbackQuery.id, 'Carregando opções...'); - await this.bot.editMessageText( - `🔓 **Liberando cliente ID: ${clienteId}**\n\n⏳ Aguarde...`, - { - chat_id: chatId, - message_id: callbackQuery.message.message_id, - parse_mode: 'Markdown' - } - ); - - const resultado = await this.topsapp.liberarCliente(clienteId, location); + // Usar a mesma lógica do comando NLP para mostrar opções de serviços + // Em vez de liberar tudo diretamente, mostrar menu de seleção + const servicosResult = await this.topsapp.obterServicosCliente(clienteId, location); - if (!resultado.success) { + if (!servicosResult.success) { await this.bot.editMessageText( - `❌ **Erro ao liberar cliente**\n\n` + - `🆔 Cliente ID: ${clienteId}\n` + - `🌐 Instância: ${location}\n` + - `⚠️ Erro: ${resultado.error}`, + `❌ **Erro ao buscar serviços**\n\n` + + `⚠️ ${servicosResult.error}`, { chat_id: chatId, message_id: callbackQuery.message.message_id, @@ -3330,29 +3321,86 @@ Digite /help para ver todos os comandos disponíveis! ); return; } - - let message = `🔓 **Cliente liberado com sucesso!**\n\n`; - message += `🆔 Cliente ID: ${clienteId}\n`; - message += `🌐 Instância: ${resultado.instancia}\n`; - message += `📊 Serviços liberados: ${resultado.total}\n\n`; - - if (resultado.servicosLiberados && resultado.servicosLiberados.length > 0) { - message += `📋 **Detalhes das liberações:**\n`; - resultado.servicosLiberados.forEach((servico, index) => { - message += `${index + 1}. ${servico.descricao}: ${servico.resultado.success ? '✅ Liberado' : '❌ Erro'}\n`; - }); + + if (!servicosResult.servicos || servicosResult.servicos.length === 0) { + await this.bot.editMessageText( + `📋 **Nenhum serviço encontrado**\n\n` + + `🆔 Cliente ID: ${clienteId}`, + { + chat_id: chatId, + message_id: callbackQuery.message.message_id, + parse_mode: 'Markdown' + } + ); + return; } + + // Verificar se há serviços bloqueados + const servicosBloqueados = servicosResult.servicos.filter(s => + s.status === 'bloqueado' || s.statusNumerico === 2 + ); + + if (servicosBloqueados.length === 0) { + await this.bot.editMessageText( + `✅ **Nenhum serviço bloqueado**\n\n` + + `🆔 Cliente ID: ${clienteId}\n` + + `📊 Todos os ${servicosResult.servicos.length} serviços estão liberados.`, + { + chat_id: chatId, + message_id: callbackQuery.message.message_id, + parse_mode: 'Markdown' + } + ); + return; + } + + // Criar menu de seleção de serviços + let message = `🔓 **Selecionar Serviços para Liberar**\n\n`; + message += `🆔 **Cliente ID**: ${clienteId}\n`; + message += `🌐 **Instância**: ${location}\n\n`; + message += `� **Serviços bloqueados** (${servicosBloqueados.length}):\n\n`; + + const keyboard = []; + + servicosBloqueados.forEach((servico, index) => { + message += `${index + 1}. **${servico.nome}**\n`; + message += ` 💰 Valor: R$ ${servico.valorMensal}\n`; + message += ` 🆔 ID: ${servico.id}\n\n`; + + // Botão para liberar este serviço específico + keyboard.push([{ + text: `🔓 Liberar ${servico.nome}`, + callback_data: `confirm_unblock_service_${servico.id}_${clienteId}_${location.replace(/\s+/g, '_')}` + }]); + }); + + // Botão para liberar todos + if (servicosBloqueados.length > 1) { + keyboard.push([{ + text: `🔓 Liberar TODOS os serviços (${servicosBloqueados.length})`, + callback_data: `confirm_unblock_all_${clienteId}_${location.replace(/\s+/g, '_')}` + }]); + } + + // Botão cancelar + keyboard.push([{ + text: '❌ Cancelar', + callback_data: 'cancel_action' + }]); await this.bot.editMessageText(message, { chat_id: chatId, message_id: callbackQuery.message.message_id, - parse_mode: 'Markdown' + parse_mode: 'Markdown', + reply_markup: { + inline_keyboard: keyboard + } }); } catch (error) { - console.error('❌ Erro ao liberar cliente:', error); + console.error('❌ Erro ao preparar liberação:', error); await this.bot.editMessageText( - `❌ **Erro interno ao liberar cliente**\n\n` + + `❌ **Erro ao preparar liberação**\n\n` + `🆔 Cliente ID: ${clienteId}\n` + `⚠️ ${error.message}`, {