Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

My welcome message is confusing. (Discord.js)

I've a code that sends a message to a welcome channel:

import Discord from "discord.js"
const client = new Discord.Client()

client.on("guildMemberAdd", async member => {
   let bg = await jimp.read("img/img_bg.png") // Bg da imagem.
   if(guildId === "729008562747080836") {
       bg = await jimp.read("img/img_bg-thunder.png") // Bg da imagem da Thunder.
   }
   let font = await jimp.loadFont(jimp.FONT_SANS_32_WHITE) // Fonte usada na imagem.
   let mask = await jimp.read("img/img_mask.png") // Máscara da imagem.
   let welcomeImg = await jimp.read("img/img_txt-welcome.png") // Imagem dando boas-vindas.
   let name = member.user.username // Nome do novo membro.
   let lenName = name.length * 16 // "Calculando o tamanho" do nome.

   // Método usado para fazer a mensagem ao entrar no servidor. 
   await jimp.read(member.user.defaultAvatarURL).then(avatar => {
       avatar = member.user.displayAvatarURL() // Pega a URL da imagem.
       let avtUrl
       if(avatar.includes(".webp")) {
           avtUrl = avatar.substr(0, avatar.lastIndexOf(".")) + ".png" // Converte a extensão de .webp para .png.
       } else avtUrl = avatar
       jimp.read(avtUrl).then(avt => {
           avt.resize(250, 250) // Redimensiona o avatar.
           mask.resize(250, 250) // Redimensiona a máscara.
           welcomeImg.resize(280, 280) // Redimensiona a imagem de boas-vindas.
           avt.mask(mask) // Junta o avatar com a máscara.
           bg.composite(welcomeImg, 370, 210) // Adiciona a imagem de boas-vindas no background.
           bg.print(font, 512 - lenName / 2, 380, name) // Centraliza e escreve o nome da pessoa.
           bg.composite(avt, 387, 40) // Adiciona o avatar no background.

           // Guarda a imagem no arquivo "img_final.png".
           bg.write("img/img_final.png")
       }).catch(err => {
           console.log("Erro ao montar a imagem.")
           console.log(err)
       })
   }).catch(err => {
       console.log("Erro ao carregar a imagem.")
       console.log(err)
   })


   let channelWel = client.channels.cache.get(welcomeId)
   if(guildId === "729008562747080836") {
       await channelWel.send(`Olha só quem entou para a melhor e-team! 😍 Bem-vindo(a) <@${member.user.id}>!`, { files: ["img/img_final.png"] }) // Manda a mensagem e a foto para o canal.
   } else {
       await channelWel.send(`Olha só quem entou para o servidor! 😍 Bem-vindo(a) <@${member.user.id}>!`, { files: ["img/img_final.png"] }) // Manda a mensagem e a foto para o canal.
   }
})

It's working, but there is a problem I can't solve. When I enter the server it shows:

enter image description here

But when I enter the dyno bot or another user it shows:

enter image description here

When I enter again or another user:

enter image description here

It's always sending the previous user welcome image... I am hours and hours trying to solve this... help me!

(I'm Brazilian, so some words or sentences may be wrong.)

like image 404
Carlos Santos Avatar asked Oct 27 '22 19:10

Carlos Santos


1 Answers

The issue seems to be in this section of code:

jimp.read(avtUrl).then(avt => {
    avt.resize(250, 250) // Redimensiona o avatar.
    mask.resize(250, 250) // Redimensiona a máscara.
    welcomeImg.resize(280, 280) // Redimensiona a imagem de boas-vindas.
    avt.mask(mask) // Junta o avatar com a máscara.
    bg.composite(welcomeImg, 370, 210) // Adiciona a imagem de boas-vindas no background.
    bg.print(font, 512 - lenName / 2, 380, name) // Centraliza e escreve o nome da pessoa.
    bg.composite(avt, 387, 40) // Adiciona o avatar no background.

    // Guarda a imagem no arquivo "img_final.png".
    bg.write("img/img_final.png")
}).catch(err => {
    console.log("Erro ao montar a imagem.")
    console.log(err)
})

You are not using await so the rest of the code doesn't wait for this section of code to execute. To fix this, you need to add in await and make the outer function asynchronous:

// Método usado para fazer a mensagem ao entrar no servidor.
await jimp.read(member.user.defaultAvatarURL).then(async avatar => {
    avatar = member.user.displayAvatarURL() // Pega a URL da imagem.
    let avtUrl
    if(avatar.includes(".webp")) {
        avtUrl = avatar.substr(0, avatar.lastIndexOf(".")) + ".png" // Converte a extensão de .webp para .png.
    } else avtUrl = avatar
    await jimp.read(avtUrl).then(avt => {
        avt.resize(250, 250) // Redimensiona o avatar.
        mask.resize(250, 250) // Redimensiona a máscara.
        welcomeImg.resize(280, 280) // Redimensiona a imagem de boas-vindas.
        avt.mask(mask) // Junta o avatar com a máscara.
        bg.composite(welcomeImg, 370, 210) // Adiciona a imagem de boas-vindas no background.
        bg.print(font, 512 - lenName / 2, 380, name) // Centraliza e escreve o nome da pessoa.
        bg.composite(avt, 387, 40) // Adiciona o avatar no background.

        // Guarda a imagem no arquivo "img_final.png".
        bg.write("img/img_final.png")
    }).catch(err => {
        console.log("Erro ao montar a imagem.")
        console.log(err)
    })
}).catch(err => {
    console.log("Erro ao carregar a imagem.")
    console.log(err)
})
like image 86
Daemon Beast Avatar answered Nov 15 '22 11:11

Daemon Beast