es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo reemplazar letras de una lista en `config.json` por nada utilizando discord.js?

Estoy agregando un auto-mod para evitar obscenidades. Quiero que el bot busque cualquier palabra de la lista en config.json llamada “badwords” y la elimine, lo cual funciona, pero si el miembro agrega un espacio o “_”, o algo similar, evita la comprobación. Así que agregué .replace(/\s/g, ''), que funciona para el espacio, pero no para el guion y otras cosas. Quería usar una lista en config.json, pero no logro hacer que el bot la recorra, no hay errores. ¿Cómo puedo solucionar este problema?

Aquí está mi código:

const config = require('../../config');

module.exports = async (client, message) => {
    if (!message.guild) return;

    if (!message.author.bot) {
        var badwords = config.badwords;
        var thingstoremove = config.thingstoremove;

        for (var i = 0; i < badwords.length; i++) {
            if (message.content.toLowerCase().replace(thingstoremove[8], '').includes(badwords[i])) {
                message.delete();
                message.reply("¡Cuida tu lenguaje!").then(m => m.delete({timeout: 10000}));
                break;
            }
        }
    }
}

config.json:

{
    "badwords": ["test1", "test2", "test3", "test4", "test5"],
    "thingstoremove": ["-", "_", ".", ",", "`", "~", "@", "#"]
}

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de que el bot no recorra la lista de caracteres a eliminar del contenido del mensaje, puedes modificar tu bucle for para recorrer tanto el arreglo badwords como el arreglo thingstoremove. Aquí tienes el código modificado con comentarios:

    const config = require('../../config');
    
    module.exports = async (client, message) => {
      if (!message.guild) return;
    
      if (!message.author.bot) {
        // Obtener los arreglos desde la configuración
        var badwords = config.badwords;
        var thingstoremove = config.thingstoremove;
    
        // Recorrer cada palabra ofensiva y cada cosa a eliminar
        for (var i = 0; i < badwords.length; i++) {
          for (var j = 0; j < thingstoremove.length; j++) {
            // Reemplazar cada cosa con una cadena vacía antes de verificar las palabras ofensivas
            if (message.content.toLowerCase().replace(new RegExp(thingstoremove[j], 'g'),'').includes(badwords[i])) {
              message.delete();
              message.reply('¡Cuidado con tu lenguaje!').then(m => m.delete({timeout: 10000}));
              break;
            }
          }
        }
      }
    }
    

    Los cambios clave son:

    • Agregar un segundo bucle for para iterar a través de cada elemento en thingstoremove.
    • Utilizar new RegExp(thingstoremove[j], 'g') para crear una expresión regular que reemplace todas las instancias de cada cosa a eliminar.
    • Utilizar el contenido del mensaje modificado que ha reemplazado todas las cosas a eliminar con una cadena vacía para verificar si incluye alguna palabra ofensiva.

    Con estas modificaciones, el bot debería eliminar correctamente cualquier instancia de palabras ofensivas, ya sea que tengan espacios, guiones u otros caracteres entre las letras.

Comments are closed.