UNPKG

discord-multipurpose

Version:

A simple package to help in your discord.js needs!

227 lines 10.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const canvas_1 = require("canvas"); const path_1 = require("path"); const emoji_parser_1 = require("@canvacord/emoji-parser"); const Shorten_1 = __importDefault(require("../Util/Image/Shorten")); const FormatHexCode_1 = __importDefault(require("../Util/Image/FormatHexCode")); const GetDiscordTime_1 = __importDefault(require("../Util/Image/GetDiscordTime")); canvas_1.registerFont(path_1.join(__dirname, "../../Assets/Fonts/WHITNEY_MEDIUM.otf"), { family: "Whitney", weight: "regular", style: "Normal", }); class Image { /** * @param avatar1 The avatar of the user who is replying * @param avatar2 The avatar of the user being replied to * @param username1 The nickname/username of the user who is replying * @param username2 The nickname/username of the user who is being replied to * @param messageText The content of the sent message * @param replyText The content of the replied message * @param hex1 The colour of the role of the replying user * @param hex2 The colour of the role of the replying user * @param mode The mode you want the stuff to be displayed in * @default hex1 #ffffff * @default hex2 #ffffff * @default mode dark */ static async fakeReply(avatar1, avatar2, replyText, messageText, username1, username2, hex1 = "#FFFFFF", hex2 = "#FFFFFF", mode = "dark") { if (!avatar1) throw new Error("First avatar was not provided!"); if (!avatar2) throw new Error("Second avatar was not provided!"); if (!username1) throw new Error("First username was not provided!"); if (!username2) throw new Error("Second username was not provided!"); if (!messageText || typeof messageText !== "string") throw new Error("Main text was not provided!"); if (!replyText || typeof replyText !== "string") throw new Error("Reply text was not provided!"); if (!hex1 || typeof hex1 !== "string") hex1 = "#FFFFFF"; if (!hex2 || typeof hex2 !== "string") hex2 = "#FFFFFF"; if (!["light", "dark"].includes(mode.toLowerCase())) throw new Error("Invalid mode provided"); // @ts-ignore mode = mode.toLowerCase(); const image1 = await canvas_1.loadImage(avatar1); const image2 = await canvas_1.loadImage(avatar2); const canvas = canvas_1.createCanvas(1300, 250); const ctx = canvas.getContext("2d"); if (mode === "dark") ctx.fillStyle = "#36393E"; else ctx.fillStyle = "#FFFFFF"; ctx.fillRect(0, 0, canvas.width, canvas.height); if (mode === "dark") ctx.fillStyle = "#FFFFFF"; else ctx.fillStyle = "#000000"; ctx.textAlign = "left"; ctx.font = "38px Whitney"; await emoji_parser_1.fillTextWithTwemoji(ctx, Shorten_1.default(messageText, 64), 186, 200); ctx.font = "38px Whitney"; ctx.fillStyle = FormatHexCode_1.default(hex1, "#FFFFFF"); ctx.fillText(username1, 185, 147); const usernameWidth = ctx.measureText(username1).width; ctx.fillStyle = "#d1d1d1"; ctx.fillText(" replied to ", 165 + usernameWidth + 20, 147); const repliedWidth = ctx.measureText(" replied to ").width; ctx.fillStyle = FormatHexCode_1.default(hex2, "#FFFFFF"); ctx.font = "38px Whitney"; ctx.fillText(username2, 165 + usernameWidth + repliedWidth + 20, 167 - 20); const secondMemberUserWidth = ctx.measureText(username2).width; ctx.font = "26px Whitney"; ctx.fillStyle = "#7a7c80"; const time = GetDiscordTime_1.default(); ctx.fillText(` ${time}`, 165 + usernameWidth + repliedWidth + secondMemberUserWidth + 3 + 20, 167 - 20); ctx.font = "29px Whitney"; ctx.globalAlpha = 0.7; ctx.fillStyle = "#d1d1d1"; ctx.fillText(Shorten_1.default(replyText, 64), 195 + 20 + 20, 100 + 5 - 20); ctx.strokeStyle = "#a3a2a2"; ctx.lineWidth = 4; ctx.globalAlpha = 0.4; ctx.moveTo(34 + (105 / 2) + 70 + 20, 92 + 5 - 20); ctx.lineTo(34 + (105 / 2) + 20, 92 + 5 - 20); ctx.moveTo(34 + (105 / 2) + 20, 92 + 5 - 20); ctx.quadraticCurveTo(34 + (105 / 2) + 4, 92 + 5 - 20, 34 + (105 / 2), 103 + 5 - 20); ctx.moveTo(34 + (105 / 2), 125 - 20); ctx.lineTo(34 + (105 / 2), 103 + 5 - 20); ctx.stroke(); ctx.globalAlpha = 1; ctx.save(); ctx.beginPath(); ctx.lineWidth = 1; ctx.arc(90, 182 - 20, 50, 0, Math.PI * 2, true); ctx.strokeStyle = "#36393E"; ctx.stroke(); ctx.closePath(); ctx.clip(); ctx.drawImage(image1, 38, 130 - 20, 105, 105); ctx.restore(); ctx.save(); ctx.beginPath(); ctx.lineWidth = 1; ctx.arc(165 + 20 + 20, 90 + 5 - 20, 20, 0, Math.PI * 2); ctx.strokeStyle = "#36393E"; ctx.stroke(); ctx.closePath(); ctx.clip(); ctx.drawImage(image2, 165 + 20, 70 + 5 - 20, 40, 40); ctx.restore(); return canvas.toBuffer(); } /** * @param avatar The avatar of the user who will be appearing in the ping */ static async ping(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const pongy = await canvas_1.loadImage(path_1.join(__dirname, "../../Assets/Images/ping.png")); const canvas = canvas_1.createCanvas(400, 400); const ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0, canvas.width, canvas.height); ctx.drawImage(pongy, 0, 0, canvas.width, canvas.height); return canvas.toBuffer(); } /** * @param avatar The avatar of the user, whose colour you want to invert */ static async invert(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const canvas = canvas_1.createCanvas(image.width, image.height); const ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0, canvas.width, canvas.height); const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (let i = 0; i < imgData.data.length; i += 4) { imgData.data[i] = 255 - imgData.data[i]; imgData.data[i + 1] = 255 - imgData.data[i + 1]; imgData.data[i + 2] = 255 - imgData.data[i + 2]; imgData.data[i + 3] = 255; } ctx.putImageData(imgData, 0, 0); return canvas.toBuffer(); } /** * @param avatar The image on which you want to apply the filter */ static async sepia(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const canvas = canvas_1.createCanvas(image.width, image.height); const ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0, canvas.width, canvas.height); const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (let i = 0; i < imgData.data.length; i += 4) { imgData.data[i] = imgData.data[i] * 0.393 + imgData.data[i + 1] * 0.769 + imgData.data[i + 2] * 0.189; imgData.data[i + 1] = imgData.data[i] * 0.349 + imgData.data[i + 1] * 0.686 + imgData.data[i + 2] * 0.168; imgData.data[i + 2] = imgData.data[i] * 0.272 + imgData.data[i + 1] * 0.534 + imgData.data[i + 2] * 0.131; } ctx.putImageData(imgData, 0, 0); return canvas.toBuffer(); } /** * @param avatar The image on which you want to apply the filter */ static async greyscale(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const canvas = canvas_1.createCanvas(image.width, image.height); const ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0, canvas.width, canvas.height); const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (let i = 0; i < imgData.data.length; i += 4) { const brightness = 0.34 * imgData.data[i] + 0.5 * imgData.data[i + 1] + 0.16 * imgData.data[i + 2]; imgData.data[i] = brightness; imgData.data[i + 1] = brightness; imgData.data[i + 2] = brightness; } ctx.putImageData(imgData, 0, 0); return canvas.toBuffer(); } /** * @param avatar The image which you want to blur */ static async blur(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const canvas = canvas_1.createCanvas(image.width, image.height); const ctx = canvas.getContext("2d"); ctx.fillStyle = "#ffffff"; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.drawImage(image, 0, 0, canvas.width / 4, canvas.height / 4); ctx.imageSmoothingEnabled = true; ctx.drawImage(canvas, 0, 0, canvas.width / 4, canvas.height / 4, 0, 0, canvas.width + 5, canvas.height + 5); return canvas.toBuffer(); } /** * @param avatar The image which you want to be 'drip'ed */ static async drip(avatar) { if (!avatar) throw new Error("avatar not provided"); const image = await canvas_1.loadImage(avatar); const base = await canvas_1.loadImage(path_1.join(__dirname, "../../Assets/Images/drip.jpg")); const canvas = canvas_1.createCanvas(base.width, base.height); const ctx = canvas.getContext("2d"); ctx.drawImage(base, 0, 0, canvas.width, canvas.height); ctx.drawImage(image, 350, 150, 205, 205); return canvas.toBuffer(); } } exports.default = Image; ; //# sourceMappingURL=Image.js.map