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 podría hacer que la función setTimeout(function(){message.delete();} elimine un mensaje embebido de Discord?

Estoy empezando con javascript, o más específicamente discord.js, y he decidido intentar crear un bot de moderación. He creado un comando de ban, y después de banear al usuario, envía un mensaje embebido mostrando la información del ban, como la razón del ban, el tag del usuario, etc. He decidido usar la función setTimeout para eliminar el embebido después de 5 segundos. Pero no puedo descifrar cómo hacerlo. Sé exactamente cómo usar la función setTimeout, solo que no sé qué hacer para eliminar el embebido. Aquí está mi código:

let kickEmbed = new Discord.MessageEmbed()
            .setTitle('¡Usuario expulsado!')
            .setColor('VERDE')
            .addFields(
                {name: 'Usuario:', value: `${memberTarget}`},
                {name: 'Moderador:', value: `${message.author}`},
                {name: 'Razón:', value: `${kickReason}`}
            )
            await message.channel.send({embeds: [kickEmbed]})
            setTimeout(function(){
                kickEmbed.delete();
            }, 5000);

El problema está en la parte de “kickEmbed.delete();”. No sé qué poner ahí. “kickEmbed” no funciona, “msg” tampoco funciona, “message” tampoco funciona. Aquí tienes un error si eso ayuda: ‘kickEmbed.delete’ no es una función.

¿Alguien puede ayudarme a resolver esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que el método delete() no está disponible en el objeto kickEmbed. En su lugar, deberías llamar al método delete() en el objeto de mensaje devuelto por message.channel.send(). Aquí tienes cómo puedes solucionar tu código:

    let kickEmbed = new Discord.MessageEmbed()
        .setTitle('¡Miembro Expulsado!')
        .setColor("GREEN")
        .addFields(
            {name: `Miembro:`, value: `${memberTarget}`},
            {name: `Moderador`, value: `${message.author}`},
            {name: `Razón`, value: `${kickReason}`}
        );
    let messageToSend = await message.channel.send({embeds: [kickEmbed]});
    setTimeout(function(){
        messageToSend.delete();
    }, 5000);
    

    En este código, creamos el objeto kickEmbed como antes, pero también almacenamos el objeto de mensaje devuelto por message.channel.send() en una variable llamada messageToSend. Luego, cuando queremos borrar el embed después de 5 segundos, llamamos al método delete() en messageToSend, lo cual eliminará el mensaje que contiene el embed.

    ¡Espero que esto te ayude!

Comments are closed.