Source: commands.js

// Importar módulos necesarios
const funciones = require('./Functions.js');
const variables = require('./Variables');

// ======== COMANDOS ========

/**
 * Maneja los comandos enviados por los usuarios en los canales donde el bot tiene acceso.
 * @param {Message} message - Mensaje recibido en el canal
 */
async function manejarComandos(message) {
  const args = message.content.trim().split(/ +/); // Divide le mensaje en palabras separadas por espacios
  const comando = args[0].toLowerCase();          // Obtiene el comando (Primera palabra de la cadena mensaje)

  switch (comando) { //en este switch se permite joder con poner lo que te de la gana si pones al inicio lo que es, incluso en borrar si pones el comando al inicio y en algún momento un numero funciona igual
    case '-comandos':
      funciones.mostrarComandos(message);
      break;
    case '-avatar':
      funciones.enviarImagen(message, variables.IMAGE_PATHS.avatar, 'Aquí está tu imagen:');
      break;
    case '-banner':
      funciones.enviarImagen(message, variables.IMAGE_PATHS.banner, 'Aquí está tu imagen:');
      break;
    case '-pececin':
      funciones.enviarImagen(message, variables.IMAGE_PATHS.pececin, 'Aquí está tu imagen:');
      break;
    case '-cores':
      funciones.enviarImagen(message, variables.IMAGE_PATHS.cores, 'Aquí está tu imagen:');
      break;
    case '-chanti':
      funciones.enviarImagen(message, variables.IMAGE_PATHS.chanti, 'Aquí está tu imagen:');
      break;
    case '-esencia':
    case 'esencia':
      funciones.enviarMensaje(message, 'Puede tardar un poquito, no desesperarse...');
      funciones.enviarImagen(message, variables.IMAGE_PATHS.esencia, 'JA JA JA JA', true);
      break;
    case '-help':
      funciones.enviarMensaje(message, 'Pregúntale al Bios');
      break;
    case '-borrar': {
      const mensaje = message.content;
      const numero = mensaje.match(/\d+/); // Extrae el número del mensaje
      const cantidad = numero ? numero[0] : 0;
      await funciones.borrarMensajes(message, Number(cantidad));
      break;
    }
    case '-function.on':
      funciones.gestionarMensajesRepetidos(message, true);
      break;
    case '-function.off':
      funciones.gestionarMensajesRepetidos(message, false);
      break;
    case '-working.on':
      funciones.activarActividadBios();
      funciones.enviarMensaje(message, 'Listo, jefe.');
      break;
    case '-working.off':
      funciones.desactivarActividadBios();
      break;
    case '-contar:':
      funciones.enviarMensaje(message, `El mensaje tiene ${funciones.contarPalabras(message)} palabras.`);
      break;
    case '-play':
      if (!variables.GLOBAL_VARIABLES.connection || variables.GLOBAL_VARIABLES.connection.state.status !== 'ready') {
        funciones.administrarPlaylist(message);
        return;
      }
      funciones.enviarMensaje(message, '❌ Otro, qué no ves tú que ya está sonando algo o cómo. Para que carallo hay un comando de parar (-stop), mira a ver mejor si usas -chamba en vez de estar tocando los huevos. ❌');
      break;
    case '-stop':
      if (!variables.GLOBAL_VARIABLES.connection || variables.GLOBAL_VARIABLES.connection.state.status !== 'ready') {
        funciones.enviarMensaje(message, '❌ Qué, tonto tú o qué, no ves que no estoy conectado. Dime, que vas a desconectar. Prueba cuando esté conectado o, mejor, prueba a ponerte a chambear. ❌');
      }
      funciones.detenerPlaylistBucle();
      break;
    case `<@${variables.USER_IDs.botPurgador}>`:
      if (message.content === `<@${variables.USER_IDs.botPurgador}> chambeando por lo que veo`) {
        funciones.responderMensaje(message, 'Habló');
        break;
      }
      let ultimaClave = null;
      const mensajeRandom = funciones.obtenerMensajeAleatorio(variables.BOT_MESSAGES, ultimaClave);
      if (mensajeRandom) {
        // mensajeRandom.valor es el mensaje, mensajeRandom.clave es la clave seleccionada
        ultimaClave = mensajeRandom.clave;
      }
      funciones.responderMensaje(message, mensajeRandom.valor);
      break;
    default: { // Para comandos de varias palabras (y no es -borrar [parámetro]) // Se usan switches anidados porque es más eficiente que usar dos separados
      const comandoEspecial = message.content.toLowerCase();

      switch (comandoEspecial) { //en este switch por la naturaleza de los switches y de estos comandos, no se puede joder, hay que poner el comando exacto y ya, sino no funciona (espero que sea entendible)
        case '-7 palabras':
        case '7 palabras':
          funciones.enviarMensaje(message, 'esencia');
          break;
        case 'está el cores trabajando?':
          funciones.enviarMensaje(message, 'No sé, mira. Pero muy seguramente no');
          break;
        case '-no cojan dibujo':
        case 'no cojan dibujo':
          funciones.enviarImagen(message, variables.IMAGE_PATHS.dibujo, 'Dibujante Mafioso', true);
          break;
        case 'no reaction':
          if (message.author.id === variables.USER_IDs.biosID) {
            variables.GLOBAL_VARIABLES.biosReaction = false;
          } break;
        case 'reaction':
          if (message.author.id === variables.USER_IDs.biosID) {
            variables.GLOBAL_VARIABLES.biosReaction = true;
          } break;
        default:
          // No hacer nada si no coincide con ningún comando
          break;
      }
    }
  }
}

const commands = Object.freeze({
  manejarComandos,
});

module.exports = commands;