Ir al contenido

Modulo de Analiticas

El Modulo de Analiticas (@zumito-team/analytics-module) realiza un seguimiento de la actividad del servidor incluyendo mensajes, entradas/salidas de miembros, uso de canales de voz y ejecucion de comandos. Proporciona configuracion por servidor, politicas de retencion de datos y paneles web opcionales con graficos Chart.js para el panel de administracion (estadisticas globales del bot) y el panel de usuario (estadisticas por servidor).

Ventana de terminal
npm install @zumito-team/analytics-module

Agregar a zumito.config.ts:

bundles: ['@zumito-team/analytics-module/dist']

Servicio principal disponible via ServiceContainer.getService(AnalyticsCollector). Otros modulos pueden consultar datos analiticos a traves de su API publica.

MetodoRetornaDescripcion
recordMessage(guildId)Promise<void>Registrar un mensaje
recordMemberJoin(guildId)Promise<void>Registrar una entrada
recordMemberLeave(guildId)Promise<void>Registrar una salida
recordVoiceJoin(guildId, channelId, userId)Promise<void>Registrar entrada a canal de voz
recordVoiceLeave(guildId, channelId, userId)Promise<void>Registrar salida de canal de voz (calcula duracion)
recordCommand(payload)Promise<void>Registrar ejecucion de comando
recordMemberCount(guildId, count)Promise<void>Almacenar conteo actual de miembros
getGuildStats(guildId, daysBack)Promise<GuildDailyStats[]>Estadisticas diarias de un servidor
getGlobalStatsSummary(daysBack)Promise<object>Estadisticas globales agregadas
getGuildGrowth(daysBack)Promise<object[]>Servidores activos por dia
getMessagesPerDay(daysBack)Promise<object[]>Mensajes por dia (global)
getCommandsPerDay(guildId, daysBack)Promise<object[]>Comandos por dia
getTopCommands(guildId, daysBack, limit)Promise<CommandDailyStats[]>Comandos mas usados
getSlowestCommands(guildId, daysBack, limit)Promise<object[]>Comandos por tiempo medio de ejecucion
getVoiceChannelStats(guildId, daysBack)Promise<VoiceChannelDailyStats[]>Estadisticas de voz por canal
getConfig(guildId)Promise<GuildAnalyticsConfig>Obtener configuracion del servidor
updateConfig(guildId, partial)Promise<void>Actualizar configuracion
runCleanup()Promise<void>Ejecutar limpieza de retencion
startCleanupScheduler()voidIniciar limpieza automatica
stopCleanupScheduler()voidDetener limpieza automatica
clearVoiceSessions()voidLimpiar sesiones de voz en memoria
ComandoTipoPermisoDescripcion
/statsSlash + PrefixTodosMuestra embed con estadisticas (7 dias)
/analytics-configSlash + PrefixAdminVer y modificar configuracion
/analytics-config enable/disableSubcomandoAdminActivar o desactivar analiticas
/analytics-config messagesSubcomandoAdminAlternar seguimiento de mensajes
/analytics-config voiceSubcomandoAdminAlternar seguimiento de voz
/analytics-config membersSubcomandoAdminAlternar seguimiento de miembros
/analytics-config commandsSubcomandoAdminAlternar seguimiento de comandos
/analytics-config performanceSubcomandoAdminAlternar seguimiento de rendimiento
/analytics-config retention <dias>SubcomandoAdminEstablecer dias de retencion
EventoFuenteDescripcion
messageCreateDiscordConteo de mensajes (excluye bots)
guildMemberAddDiscordEntradas + instantanea de miembros
guildMemberRemoveDiscordSalidas + instantanea de miembros
voiceStateUpdateDiscordMinutos de actividad de voz
commandExecutedFrameworkUso de comandos + tiempo + exito/fallo
  • /admin/analytics — Dashboard de estadisticas globales del bot:
    • Tarjetas: servidores, mensajes, comandos, entradas, minutos de voz
    • Graficos: crecimiento de servidores (linea), mensajes/dia (barras), comandos/dia (barras), top comandos (barras horizontales)
    • Si seguimiento de rendimiento activado: grafico de comandos mas lentos
    • Selector de rango: 7 / 30 / 90 dias
  • /panel/:guildId/analytics — Dashboard de estadisticas por servidor:
    • Tarjetas: mensajes, comandos, entradas, salidas, minutos de voz
    • Graficos: mensajes/dia (barras), entradas vs salidas (lineas), voz (barras), comandos/dia (barras), top comandos (barras horizontales)
    • Si track_command_performance activado: comandos mas lentos
    • Si track_per_channel_voice activado: desglose de voz por canal
    • Selector de rango: 7 / 30 / 90 dias

Configurar valores globales importando AnalyticsModuleConfig antes de que el modulo se inicialice:

import { AnalyticsModuleConfig } from '@zumito-team/analytics-module';
AnalyticsModuleConfig.configure({
defaultRetentionDays: 90,
cleanupIntervalHours: 24,
defaultTrackMessages: true,
defaultTrackVoice: true,
defaultTrackMembers: true,
defaultTrackCommands: true,
defaultTrackCommandPerformance: false,
defaultTrackPerChannelVoice: false,
});
ConfiguracionTipoValorDescripcion
defaultRetentionDaysnumber90Dias de retencion de datos
cleanupIntervalHoursnumber24Frecuencia de limpieza
defaultTrackMessagesbooleantrueSeguimiento de mensajes
defaultTrackVoicebooleantrueSeguimiento de voz
defaultTrackMembersbooleantrueSeguimiento de miembros
defaultTrackCommandsbooleantrueSeguimiento de comandos
defaultTrackCommandPerformancebooleanfalseTiempo de ejecucion por comando
defaultTrackPerChannelVoicebooleanfalseVoz por canal individual

Cada servidor tiene un registro GuildAnalyticsConfig en la base de datos. Usa el comando /analytics-config o la API publica:

const collector = ServiceContainer.getService(AnalyticsCollector);
await collector.updateConfig(guildId, {
enabled: true,
track_command_performance: true,
retention_days: 180, // servidores premium: 6 meses
});
CampoTipoValorDescripcion
guild_idstringClave primaria
enabledbooleantrueActivacion general
track_messagesbooleantrueContar mensajes
track_voicebooleantrueActividad de voz
track_membersbooleantrueEntradas/salidas
track_commandsbooleantrueUso de comandos
track_command_performancebooleanfalseTiempo de ejecucion
track_per_channel_voicebooleanfalseDesglose por canal
retention_daysnumberglobalPeriodo de retencion
public_stats_pagebooleanfalsePagina de estadisticas publica

Consumir AnalyticsCollector desde otros modulos

Sección titulada «Consumir AnalyticsCollector desde otros modulos»
import { AnalyticsCollector } from '@zumito-team/analytics-module';
import { ServiceContainer } from 'zumito-framework';
const collector = ServiceContainer.getService(AnalyticsCollector) as AnalyticsCollector;
// Top comandos globales (ultimos 7 dias)
const top = await collector.getTopCommands(null, 7, 10);
// Resumen global
const summary = await collector.getGlobalStatsSummary(30);
// Estadisticas de un servidor
const stats = await collector.getGuildStats(guildId, 7);

Para otorgar retencion extendida a servidores premium:

// En tu modulo de premium/licencias
const collector = ServiceContainer.getService(AnalyticsCollector);
await collector.updateConfig(guildId, { retention_days: 180 });
  • zumito-framework
  • ejs — Renderizado de plantillas para los paneles
  • @zumito-team/admin-module — Integracion opcional con panel de administracion
  • @zumito-team/user-panel-module — Integracion opcional con panel de usuario
  • Admin — Panel donde aparecen las estadisticas globales
  • User Panel — Panel donde aparecen las estadisticas por servidor
  • Logger — Registro de eventos complementario