Entre com o Discord para postar códigos de welcome e curtir os da comunidade.

// MQN Welcome Card - versão corrigida
// Variáveis: ctx, width, height, avatar, member
ctx.setFillGradient(0, 0, width, height, [
[0, '#070914'],
[1, '#111827']
]);
ctx.fillRect(0, 0, width, height);
// grid leve
ctx.strokeStyle = 'rgba(255,255,255,0.035)';
ctx.lineWidth = 1;
for (let x = 0; x < width; x += 36) {
ctx.beginPath();
ctx.moveTo(x, 0);
ctx.lineTo(x, height);
ctx.stroke();
}
for (let y = 0; y < height; y += 36) {
ctx.beginPath();
ctx.moveTo(0, y);
ctx.lineTo(width, y);
ctx.stroke();
}
// glow lateral
ctx.globalAlpha = 0.18;
ctx.fillStyle = '#7c3aed';
ctx.beginPath();
ctx.arc(width - 70, 85, 145, 0, Math.PI * 2);
ctx.fill();
ctx.fillStyle = '#2563eb';
ctx.beginPath();
ctx.arc(width - 20, 175, 110, 0, Math.PI * 2);
ctx.fill();
ctx.globalAlpha = 1;
// card principal
ctx.fillStyle = 'rgba(124,58,237,0.92)';
ctx.roundRect(28, 32, width - 56, height - 64, 24);
ctx.fill();
// detalhe escuro inferior
ctx.fillStyle = 'rgba(5,8,20,0.28)';
ctx.roundRect(28, height - 88, width - 56, 56, 0);
ctx.fill();
// avatar
const avatarSize = 112;
const avatarX = 60;
const avatarY = height / 2 - avatarSize / 2;
ctx.save();
ctx.beginPath();
ctx.arc(avatarX + avatarSize / 2, avatarY + avatarSize / 2, avatarSize / 2, 0, Math.PI * 2);
ctx.clip();
ctx.drawImage(avatar, avatarX, avatarY, avatarSize, avatarSize);
ctx.restore();
ctx.strokeStyle = '#8b5cf6';
ctx.lineWidth = 5;
ctx.beginPath();
ctx.arc(avatarX + avatarSize / 2, avatarY + avatarSize / 2, avatarSize / 2 + 2, 0, Math.PI * 2);
ctx.stroke();
// textos
let username = member.username;
if (username.length > 16) username = username.slice(0, 16) + '...';
ctx.fillStyle = '#e9d5ff';
ctx.font = 'bold 15px Arial';
ctx.fillText('NOVO MEMBRO', 200, 78);
ctx.fillStyle = '#ffffff';
ctx.font = 'bold 42px Arial';
ctx.fillText(username, 200, 130);
ctx.fillStyle = '#dbeafe';
ctx.font = '22px Arial';
ctx.fillText('Bem-vindo ao servidor', 200, 170);
let guildName = member.guildName;
if (guildName.length > 22) guildName = guildName.slice(0, 22) + '...';
ctx.fillStyle = '#ffffff';
ctx.font = 'bold 24px Arial';
ctx.fillText(guildName, 200, 205);
// linha gradiente
ctx.setFillGradient(200, 220, 360, 220, [
[0, '#ffffff'],
[1, '#38bdf8']
]);
ctx.fillRect(200, 220, 160, 4);
// mini badge direita
ctx.fillStyle = 'rgba(15,23,42,0.35)';
ctx.roundRect(width - 185, 58, 130, 84, 18);
ctx.fill();
ctx.strokeStyle = 'rgba(255,255,255,0.16)';
ctx.lineWidth = 2;
ctx.stroke();
ctx.fillStyle = '#ffffff';
ctx.font = 'bold 15px Arial';
ctx.fillText('MQN', width - 148, 92);
ctx.fillStyle = '#c4b5fd';
ctx.font = '13px Arial';
ctx.fillText('CONTROL', width - 158, 116);
// rodapé
ctx.fillStyle = 'rgba(255,255,255,0.65)';
ctx.font = '15px Arial';
ctx.fillText('Powered by Mequin Bot', width - 210, height - 48);
Tem certeza?