簡體   English   中英

我的歡迎信息令人困惑。 (不和諧.js)

[英]My welcome message is confusing. (Discord.js)

我有一個向歡迎頻道發送消息的代碼:

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.
   }
})

它正在工作,但有一個我無法解決的問題。 當我進入服務器時,它顯示:

在此處輸入圖像描述

但是當我輸入 dyno 機器人或其他用戶時,它會顯示:

在此處輸入圖像描述

當我再次輸入或其他用戶時:

在此處輸入圖像描述

它總是發送以前的用戶歡迎圖像......我花了好幾個小時試圖解決這個問題......幫幫我!

(我是巴西人,所以有些詞或句子可能是錯誤的。)

問題似乎出在這部分代碼中:

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)
})

您沒有使用await ,因此代碼的 rest 不會等待這部分代碼執行。 要解決此問題,您需要添加await並使外部 function 異步:

// 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)
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM