Advertisement
BETAlwrd

Untitled

Jun 29th, 2025
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { Client, GatewayIntentBits } = require('discord.js');
  2. const { createCanvas, loadImage } = require('canvas');
  3. const fs = require('node:fs');
  4. const path = require('node:path');
  5. const getProfile = require('../managers/getProfile');
  6.  
  7.  
  8. async function _img(_p, _url) {
  9.   const { badges, user, user_profile } = _p;
  10.  
  11.   const _usr = user_profile?.pronouns || '';
  12.   const _nam = user.global_name || user.username || '';
  13.  
  14.   const _trim = (t, m = 13) => t.length <= m ? t : t.slice(0, m - 3) + '...';
  15.   const _bdgUrls = badges.map(b => `images/${b.id}.png`);
  16.   const _bdgImgs = await Promise.all(_bdgUrls.map(u => loadImage(u).catch(() => null)));
  17.  
  18.   const _bg = await loadImage('images/prof_arqet.png');
  19.   const _can = createCanvas(_bg.width, _bg.height);
  20.   const hydra_canvas = _can.getContext('2d');
  21.  
  22.   hydra_canvas.drawImage(_bg, 0, 0);
  23.  
  24.   const _s = 21, _g = 2.3, _y = 98, _m = 10;
  25.   const _sh = _bdgImgs.slice(0, _m);
  26.   let _x = (_can.width - (_s + _g) * _sh.length + _g) / 2;
  27.  
  28.   _sh.forEach(_i => {
  29.     if (!_i) return;
  30.     hydra_canvas.drawImage(_i, _x, _y - _s / 2, _s, _s);
  31.     _x += _s + _g;
  32.   });
  33.  
  34.   if (badges.length > _m) {
  35.     hydra_canvas.font = '13px Arial';
  36.     hydra_canvas.fillStyle = 'white';
  37.     hydra_canvas.fillText(`+ ${badges.length - _m} more`, _x, _y + 5);
  38.   }
  39.  
  40.   hydra_canvas.font = '14px "Noto Sans", "Segoe UI Emoji"';
  41.   hydra_canvas.fillStyle = 'white';
  42.   hydra_canvas.textAlign = 'center';
  43.   hydra_canvas.textBaseline = 'middle';
  44.  
  45.   hydra_canvas.fillText(_trim(_usr), 90, 150);
  46.   hydra_canvas.fillText(_nam, 300, 60);
  47.  
  48.   hydra_canvas.font = '15px "Noto Sans", "Segoe UI Emoji"';
  49.   hydra_canvas.textAlign = 'left';
  50.   hydra_canvas.textBaseline = 'top';
  51.   hydra_canvas.fillText(user.bio || _p.bio || '...', 310, 160);
  52.  
  53.   const _aX = 47, _aY = 40, _aS = 90;
  54.   hydra_canvas.save();
  55.   hydra_canvas.beginPath();
  56.   hydra_canvas.arc(_aX + _aS / 2, _aY + _aS / 2, _aS / 2, 0, Math.PI * 2);
  57.   hydra_canvas.clip();
  58.  
  59.   const _aU = user.avatar ? `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png` : 'https://cdn.discordapp.com/embed/avatars/0.png';
  60.   const _aImg = await loadImage(_aU);
  61.   hydra_canvas.drawImage(_aImg, _aX, _aY, _aS, _aS);
  62.   hydra_canvas.restore();
  63.  
  64.   if (user.avatar_decoration_data?.asset) {
  65.     const _d = await loadImage(`https://cdn.discordapp.com/avatar-decoration-presets/${user.avatar_decoration_data.asset}.png?size=4096`);
  66.     hydra_canvas.drawImage(_d, _aX - 10, _aY - 10, _aS + 20, _aS + 20);
  67.   }
  68.  
  69.   if (!user_profile?.pronouns && user?.clan?.badge) {
  70.     const _bU = `https://cdn.discordapp.com/clan-badges/${user.clan.identity_guild_id}/${user.clan.badge}.png?size=4096`;
  71.     const _b = await loadImage(_bU).catch(() => null);
  72.  
  73.     if (_b) {
  74.       const _tag = user.clan.tag || user.username;
  75.       hydra_canvas.drawImage(_b, 65, 140, 21, 21);
  76.       hydra_canvas.font = '14px "Noto Sans"';
  77.       hydra_canvas.textAlign = 'left';
  78.       hydra_canvas.textBaseline = 'middle';
  79.       hydra_canvas.fillStyle = 'white';
  80.       hydra_canvas.fillText(_tag, 115, 150);
  81.     }
  82.   }
  83.  
  84.   return _can.toBuffer();
  85. }
  86.  
  87. hydra.on('guildMemberAdd', async _mem => {
  88.   try {
  89.     const _ch = _mem.guild.channels.cache.get('1378625211091386459');
  90.     if (!_ch) return console.error('Room not found');
  91.  
  92.     const _p = await getProfile(_mem.id);
  93.     if (!_p) return _ch.send('❌ Failed to fetch profile.');
  94.  
  95.     const _url = `https://cdn.discordapp.com/avatars/${_mem.id}/${_mem.avatar}.png`;
  96.     const _imgBuf = await _img(_p, _url);
  97.  
  98.     await _ch.send({ files: [{ attachment: _imgBuf, name: 'profile-image.png' }] });
  99.   } catch (e) {
  100.     console.error(e);
  101.   }
  102. });
  103.  
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement