Skip to content

Conversation

Araxielfenix
Copy link

No description provided.

Gestión Centralizada de Configuración y Constantes:

Todas las variables que dependen del entorno (como API keys, IDs de canales, nombres de modelos) se cargan ahora desde process.env al inicio del archivo y se les asignan constantes con nombres descriptivos.
Se han añadido validaciones básicas para asegurar que las variables de entorno críticas estén presentes al iniciar el bot, terminando la ejecución si faltan.
Cadenas de texto "mágicas" (como IDs de usuario específicos o prompts) se han definido como constantes para mejorar la legibilidad y facilitar futuras modificaciones.
Configuraciones derivadas (como listas de IDs de canales ignorados o palabras clave) se procesan una vez al inicio.
Eliminación de Código No Utilizado:

Se quitaron importaciones de módulos (CronJob, https, EmbedBuilder) que no se estaban utilizando en el código.
Introducción de Funciones Auxiliares (Helpers):

callShapesAPI: Se creó esta función para encapsular la lógica de las llamadas a la API de shapes_client. Esto reduce la duplicación de código en los diferentes manejadores de eventos y centraliza el manejo de errores de la API. Ahora devuelve null en caso de error para que el llamador pueda manejarlo.
logSeparator: Una pequeña utilidad para imprimir separadores en la consola, ayudando a organizar visualmente los logs.
Refactorización y Mejoras en los Manejadores de Eventos:

ready:
Se corrigió el uso de la cabecera X-Channel-Id para que utilice el id del canal (canal.id) en lugar de una variable message que no estaba definida en ese contexto.
Ahora utiliza la función callShapesAPI para el mensaje periódico.
Se mejoró el manejo de errores en caso de que el canal general no se encuentre o la API falle.
guildMemberAdd:
Similar al evento ready, se corrigió la cabecera X-Channel-Id para usar canal.id por consistencia.
Utiliza callShapesAPI para generar el mensaje de bienvenida.
Mejorado el manejo de errores.
messageCreate:
Las condiciones de guarda (para ignorar mensajes) se han reescrito para mayor claridad, utilizando las constantes definidas (ej. MEE6_USER_ID, IGNORED_CHANNEL_IDS).
La lógica para determinar si el bot debe responder (debeResponder) ahora usa la constante COMMAND_KEYWORDS.
Utiliza callShapesAPI para obtener la respuesta del bot.
La cabecera X-Channel-Id ahora usa message.channel.id consistentemente.
El formato del historial de conversación (formattedHistory) enviado a la API es más legible y se une con saltos de línea.
La construcción del apiUserContentPayload (que incluye texto, imágenes o audio) es más clara.
Se ha mejorado el manejo de errores, incluyendo un try-catch al intentar responder al usuario en caso de fallo, y se verifica !message.replied para evitar respuestas duplicadas.
Mejoras Generales en Claridad y Mantenimiento:

Uso consistente de async/await.
Comentarios explicativos para las variables de entorno y algunas lógicas complejas.
Mejor manejo del estado de userConversations, asegurando que el historial se actualice correctamente.
Se añadió un console.log más detallado en messageCreate para incluir el ID del canal.
Explicación detallada de los cambios en messageCreate:

import { ChannelType } from "discord.js";: Se añade ChannelType a las importaciones.
const isDM = message.channel.type === ChannelType.DM;: Al inicio del manejador, determinamos si el mensaje es un DM y guardamos el resultado en isDM.
Guard Clause pedrojlazevedo#3 (Roles): Aunque la condición if (message.member) ya manejaba correctamente el caso de DMs (donde message.member es null), he añadido !isDM && para que sea explícito que esta lógica de roles solo aplica si no es un DM y message.member existe. Esto es más una clarificación que un cambio funcional crítico para DMs, ya que message.member sería null de todas formas.
Guard Clause pedrojlazevedo#4 (Canales Ignorados): Se modifica a if (!isDM && IGNORED_CHANNEL_IDS.includes(message.channel.id)) return;. Esto asegura que la lista de canales ignorados solo se aplique si el mensaje NO es un DM.
Logging: El console.log ahora usa la variable isDM para mostrar "DM" o el nombre del canal según corresponda:

console.log(
  `Mensaje recibido: "${message.content}" por ${message.author.username} en ${isDM ? 'DM' : `canal ${message.channel.name}`} (ID: ${message.channel.id})`
);
Inicializamos debeResponder a false.
Si isDM es true (es decir, el mensaje es un Mensaje Directo), establecemos debeResponder a true inmediatamente. Esto asegura que el bot procesará el mensaje.
Si no es un DM (else), mantenemos la lógica original: el bot responderá si es mencionado o si el mensaje contiene alguna de las COMMAND_KEYWORDS.
Si el usuario solo escribe el comando (por ejemplo, "@RodentPlay" y nada más), el bot detecta que no hay mensaje después del comando y responde pidiendo que escriban un mensaje.
Solo si hay texto adicional, el bot envía ese texto a la IA.
El comando y cualquier texto (o sólo el comando) se manda directo a la IA.
No hay mensajes de error por mensaje vacío.
La lógica es más simple y robusta.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant