From 28147446a17a46f91ff43ba58850a409e76739c6 Mon Sep 17 00:00:00 2001 From: brobert Date: Sun, 26 Oct 2025 00:55:04 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20m=C3=A9tricas=20de=20unknown/alias=20y?= =?UTF-8?q?=20chequeo=20de=20tabla=20users=20para=20onboarding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: aider (openrouter/openai/gpt-5) --- src/services/command.ts | 17 ++++++++++++----- src/services/commands/index.ts | 9 +++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/services/command.ts b/src/services/command.ts index 00b66bb..d169151 100644 --- a/src/services/command.ts +++ b/src/services/command.ts @@ -47,11 +47,18 @@ export class CommandService { // Registrar interacción del usuario (last_command_at) para cualquier comando /t … try { - const ensured = ensureUserExists(context.sender, this.dbInstance); - if (ensured) { - try { - this.dbInstance.prepare(`UPDATE users SET last_command_at = strftime('%Y-%m-%d %H:%M:%f','now') WHERE id = ?`).run(ensured); - } catch {} + let usersTableExists = false; + try { + const row = this.dbInstance.query(`SELECT name FROM sqlite_master WHERE type='table' AND name='users'`).get() as any; + usersTableExists = !!row; + } catch {} + if (usersTableExists) { + const ensured = ensureUserExists(context.sender, this.dbInstance); + if (ensured) { + try { + this.dbInstance.prepare(`UPDATE users SET last_command_at = strftime('%Y-%m-%d %H:%M:%f','now') WHERE id = ?`).run(ensured); + } catch {} + } } } catch {} diff --git a/src/services/commands/index.ts b/src/services/commands/index.ts index 8aca6fd..e90aa2d 100644 --- a/src/services/commands/index.ts +++ b/src/services/commands/index.ts @@ -81,6 +81,14 @@ export async function route(context: RouteContext, deps?: { db: Database }): Pro // Ayuda (no requiere DB) if (action === 'ayuda') { + // Métrica de alias "info" (compatibilidad con legacy) + try { + if (rawAction === 'info' || rawAction === '?') { + Metrics.inc('commands_alias_used_total', 1, { action: 'info' }); + } + } catch {} + try { ResponseQueue.setOnboardingAggregatesMetrics(); } catch {} + const isAdvanced = (tokens[2] || '').toLowerCase() === 'avanzada'; const message = isAdvanced ? getFullHelp() @@ -150,6 +158,7 @@ export async function route(context: RouteContext, deps?: { db: Database }): Pro } // Desconocido → ayuda rápida + try { Metrics.inc('commands_unknown_total'); } catch {} return [{ recipient: context.sender, message: buildUnknownHelp()