const { Events, AttachmentBuilder } = require("discord.js"); const Canvas = require("@napi-rs/canvas"); const { request } = require("undici"); module.exports = { name: Events.GuildMemberAdd, async execute(member) { const { guild } = member; const applyText = (canvas, text) => { let fontSize = 70; do { context.font = `${fontSize - 10}px sans-serif`; } while (context.measureText(text).width > canvas.width - 300); return context.font; }; const canvas = Canvas.createCanvas(935, 479); const context = canvas.getContext("2d"); const background = await Canvas.loadImage("./image.jpg"); context.drawImage(background, 0, 0, canvas.width, canvas.height); const { body } = await request(member.displayAvatarURL({ extension: "png" })); const avatar = await Canvas.loadImage(await body.arrayBuffer()); context.drawImage(avatar, 25, 25, 200, 200); context.strokeStyle = "#0099ff"; context.strokeRect(0, 0, canvas.width, canvas.height); context.font = applyText(canvas, member.displayName); context.fillStyle = "#000000"; context.fillText(member.displayName, canvas.width / 2.5, canvas.height, 1.8); context.beginPath(); context.arc(125, 125, 100, 0, Math.PI * 2, true); context.closePath(); context.clip(); const attachment = new AttachmentBuilder(await canvas.encode("png"), { name: "image.png" }); const welcomeChannel = guild.channels.cache.get("1117900229459591278"); welcomeChannel.send({ files: [attachment] }); }, };