UNPKG

@getsolara/solara.canvas

Version:

Optional canvas and image manipulation functionality for @getsolara/solara.js

42 lines 2.76 kB
const { AttachmentBuilder } = require('discord.js'); module.exports = { name: "$rankCard", description: "Generates a rank card image. Args: username;level;rank;currentXP;requiredXP;[avatarURL?];[backgroundURL?];[status?];[borderColor?];[progressBarColor?]", takesBrackets: true, execute: async (context, args) => { if (context.client.canvasInitialized === false) { return "[Error: $rankCard requires canvas features to be enabled. Ensure @getsolara/solara.canvas is installed and configured correctly.]"; } if (args.length < 5) return "[Error: $rankCard requires username, level, rank, currentXP, and requiredXP]"; const [username, levelStr, rankStr, currentXpStr, requiredXpStr, avatar, background, status, border, progressColor] = args; const level = parseInt(levelStr, 10); const rank = parseInt(rankStr, 10); const currentXp = parseInt(currentXpStr, 10); const requiredXp = parseInt(requiredXpStr, 10); if (isNaN(level) || isNaN(rank) || isNaN(currentXp) || isNaN(requiredXp)) { return "[Error: Level, rank, currentXP, and requiredXP for $rankCard must be numbers]"; } try { const canvafy = require("canvafy"); const builder = new canvafy.Rank().setUsername(username).setLevel(level).setRank(rank).setCurrentXp(currentXp).setRequiredXp(requiredXp); if (avatar) builder.setAvatar(avatar); else if (context.user) builder.setAvatar(context.user.displayAvatarURL({ forceStatic: true, extension: "png" })); if (background) builder.setBackground("image", background); if (status && ['online', 'idle', 'dnd', 'offline', 'streaming', 'invisible'].includes(status.toLowerCase())) builder.setStatus(status.toLowerCase()); if (border) builder.setBorder(border); if (progressColor) builder.setBarColor(progressColor); const imageBuffer = await builder.build(); const attachment = new AttachmentBuilder(imageBuffer, { name: `rank-${context.user?.id || Date.now()}.png` }); context.attachments = context.attachments || []; context.attachments.push(attachment); return ""; } catch (e) { if (e.code === 'MODULE_NOT_FOUND' && e.message.includes('canvafy')) { console.error("Solara.canvas ($rankCard): 'canvafy' module not found. This is a dependency of @getsolara/solara.canvas."); return "[Error: $rankCard - canvafy module missing.]"; } console.error("Solara.canvas Error ($rankCard):", e); return `[Error generating rank card: ${e.message}]`; } } };