diagnostico: fix text

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo@MacBook-Air-de-Rodrigo.local>
This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-06-23 20:08:04 -03:00
1 parent 0b695eeeeb
commit 2c103557d9
1 file changed
+19 -10
+19 -10
View File
@@ -1276,18 +1276,27 @@ Digite /help para ver todos os comandos disponíveis!
.catch(e => logger.warn(`[GenieACS] Falha ao sincronizar TAG: ${e.message}`)); .catch(e => logger.warn(`[GenieACS] Falha ao sincronizar TAG: ${e.message}`));
} }
// Escapa caracteres especiais do Markdown em textos livres (vindos de
// sistemas externos/erros) para evitar "can't parse entities" do Telegram
// quando o texto contém um número ímpar de _, *, ` ou [ (ex: nomes de OLT
// como "AN5516-06_172.16.10.6").
const escMd = (v) => {
if (v === null || v === undefined || v === '') return '';
return String(v).replace(/[_*`\[]/g, '\\$&');
};
// Montar relatório // Montar relatório
let msg = `🩺 *Diagnóstico do Cliente*\n`; let msg = `🩺 *Diagnóstico do Cliente*\n`;
msg += `━━━━━━━━━━━━━━━━━━━━━\n\n`; msg += `━━━━━━━━━━━━━━━━━━━━━\n\n`;
// Bloco 1: TopSapp // Bloco 1: TopSapp
msg += `📋 *Serviço TopSapp*\n`; msg += `📋 *Serviço TopSapp*\n`;
msg += ` 📦 Plano: ${nomePlano}\n`; msg += ` 📦 Plano: ${escMd(nomePlano)}\n`;
msg += ` 🔌 Status: ${statusServico}\n`; msg += ` 🔌 Status: ${escMd(statusServico)}\n`;
if (pppoeLogin) msg += ` 👤 Login PPPoE: \`${pppoeLogin}\`\n`; if (pppoeLogin) msg += ` 👤 Login PPPoE: \`${pppoeLogin}\`\n`;
if (servico.dhcp_username) msg += ` 👤 DHCP Username: \`${servico.dhcp_username}\`\n`; if (servico.dhcp_username) msg += ` 👤 DHCP Username: \`${servico.dhcp_username}\`\n`;
if (circuitId) msg += ` 🔗 Circuit\-ID: \`${circuitId}\`\n`; if (circuitId) msg += ` 🔗 Circuit\-ID: \`${circuitId}\`\n`;
if (endereco) msg += ` 📍 Endereço: ${endereco}${cidade ? `, ${cidade}` : ''}\n`; if (endereco) msg += ` 📍 Endereço: ${escMd(endereco)}${cidade ? `, ${escMd(cidade)}` : ''}\n`;
msg += '\n'; msg += '\n';
// Bloco 2: Concentrador Juniper // Bloco 2: Concentrador Juniper
@@ -1295,7 +1304,7 @@ Digite /help para ver todos os comandos disponíveis!
if (juniperResult.skipped && !circuitId) { if (juniperResult.skipped && !circuitId) {
msg += ` ⚫ Login PPPoE/Circuit\-ID não informado no cadastro\n`; msg += ` ⚫ Login PPPoE/Circuit\-ID não informado no cadastro\n`;
} else if (!juniperResult.success) { } else if (!juniperResult.success) {
msg += ` ⚠️ Erro ao consultar: ${juniperResult.error || 'falha na consulta'}\n`; msg += ` ⚠️ Erro ao consultar: ${escMd(juniperResult.error) || 'falha na consulta'}\n`;
} else if (juniperResult.connected) { } else if (juniperResult.connected) {
const modoAuth = juniperResult.viaCircuitId ? 'IPoE/Circuit\-ID' : 'PPPoE'; const modoAuth = juniperResult.viaCircuitId ? 'IPoE/Circuit\-ID' : 'PPPoE';
msg += ` 🟢 *Conectado* (${modoAuth})\n`; msg += ` 🟢 *Conectado* (${modoAuth})\n`;
@@ -1311,7 +1320,7 @@ Digite /help para ver todos os comandos disponíveis!
if (onuResult.skipped) { if (onuResult.skipped) {
msg += ` ⚫ Serial não informado no cadastro\n`; msg += ` ⚫ Serial não informado no cadastro\n`;
} else if (!onuResult.success) { } else if (!onuResult.success) {
msg += ` ❌ ${onuResult.error || 'ONU não encontrada'}\n`; msg += ` ❌ ${escMd(onuResult.error) || 'ONU não encontrada'}\n`;
if (serial) msg += ` 📋 Serial buscado: \`${serial}\`\n`; if (serial) msg += ` 📋 Serial buscado: \`${serial}\`\n`;
} else { } else {
const rxLabel = onuResult.rxPower || 'N/A'; const rxLabel = onuResult.rxPower || 'N/A';
@@ -1319,19 +1328,19 @@ Digite /help para ver todos os comandos disponíveis!
const rxEmoji = isNaN(rxNum) ? '⚫' : rxNum >= -27 ? '🟢' : rxNum >= -30 ? '🟡' : '🔴'; const rxEmoji = isNaN(rxNum) ? '⚫' : rxNum >= -27 ? '🟢' : rxNum >= -30 ? '🟡' : '🔴';
msg += ` 📋 Serial: \`${serial}\`\n`; msg += ` 📋 Serial: \`${serial}\`\n`;
msg += ` 🏢 OLT: ${onuResult.oltName || onuResult.oltType || 'N/A'}\n`; msg += ` 🏢 OLT: ${escMd(onuResult.oltName || onuResult.oltType) || 'N/A'}\n`;
if (onuResult.slot || onuResult.pon) { if (onuResult.slot || onuResult.pon) {
msg += ` 📍 Slot/PON: ${onuResult.slot || '?'}/${onuResult.pon || '?'}\n`; msg += ` 📍 Slot/PON: ${escMd(onuResult.slot) || '?'}/${escMd(onuResult.pon) || '?'}\n`;
} }
msg += ` 🔌 Estado: ${onuResult.online ? '🟢 Online' : '🔴 Offline'}\n`; msg += ` 🔌 Estado: ${onuResult.online ? '🟢 Online' : '🔴 Offline'}\n`;
if (onuResult.uptime) { if (onuResult.uptime) {
msg += ` ⏱️ Uptime: ${onuResult.uptime}\n`; msg += ` ⏱️ Uptime: ${escMd(onuResult.uptime)}\n`;
} }
msg += ` ${rxEmoji} Rx Power: *${rxLabel}*\n`; msg += ` ${rxEmoji} Rx Power: *${escMd(rxLabel)}*\n`;
if (onuResult.portaEthernet) { if (onuResult.portaEthernet) {
const ethOk = /forward|up|active|1gbit|100mbit/i.test(onuResult.portaEthernet); const ethOk = /forward|up|active|1gbit|100mbit/i.test(onuResult.portaEthernet);
msg += ` ${ethOk ? '🟢' : '🔴'} Porta Ethernet: ${onuResult.portaEthernet}\n`; msg += ` ${ethOk ? '🟢' : '🔴'} Porta Ethernet: ${escMd(onuResult.portaEthernet)}\n`;
} }
} }