diff --git a/README.md b/README.md
index e17c336..c3d0d3e 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ A powerfull module that allow you to generate awesome images.
# Bugs and glitches
-Feel free to report all bugs and glitches by creating an issue in the issue section.
+Feel free to report all bugs and glitches by creating an issue in the issue section.
A correct and understandable issue contains :
- Steps to reproduce
@@ -18,10 +18,10 @@ Please join [this](https://discord.gg/5ZSGFYtnqw) community server to follow all
# Links:
### Support Server Community
-
+
-### Amandine Discord Bot Support Server
-
+### Xinko Discord Bot Support Server
+
# Download
@@ -41,96 +41,123 @@ const DIG = require("discord-image-generation");
Then you have to request your image and send it as an attachement.
-## Discord.js v12
-```js
-// Import the discord.js library.
-const Discord = require("discord.js")
-// Create a new discord.js client.
-const bot = new Discord.Client()
-
-const DIG = require("discord-image-generation");
-> You can also destructure to avoid repeating DIG.
-
-// Listen to the ready event
-bot.on("ready", () => {
- console.log("ok");
-})
-
-// Listen to the message event
-bot.on("message", async (message) => {
- // Send the image in a simple message
- if (message.content === "*delete") {
- // Get the avatarUrl of the user
- let avatar = message.author.displayAvatarURL({ dynamic: false, format: 'png' });
- // Make the image
- let img = await new DIG.Delete().getImage(avatar)
- // Add the image as an attachement
- let attach = new Discord.MessageAttachment(img, "delete.png");;
- message.channel.send(attach)
- }
- // Send the message with the image attached to an embed
- if (message.content === "*blur") {
- // Get the avatarUrl of the user
- let avatar = message.author.displayAvatarURL({ dynamic: false, format: 'png' });
- // Make the image
- let img = await new DIG.Blur().getImage(avatar)
- // Add the image as an attachement
- let embed = new Discord.MessageEmbed()
- .setTitle("Blur")
- .setImage("attachment://delete.png")
- let attach = new Discord.MessageAttachment(img, "blur.png");;
- message.channel.send({ embed: embed, files: [attach])
- }
-})
-
-// Log in to the bot
-bot.login("super_secret_token")
-```
-
## Discord.js v13
```js
// Import the discord.js library.
-const Discord = require("discord.js")
+const Discord = require("discord.js");
// Create a new discord.js client.
-const bot = new Discord.Client()
+const bot = new Discord.Client();
const DIG = require("discord-image-generation");
-> You can also destructure to avoid repeating DIG.
// Listen to the ready event
bot.on("ready", () => {
- console.log("ok");
-})
+ console.log("Bot is online");
+});
// Listen to the message event
bot.on("messageCreate", async (message) => {
// Send the image in a simple message
if (message.content === "*delete") {
// Get the avatarUrl of the user
- let avatar = message.author.displayAvatarURL({ dynamic: false, format: 'png' });
+ let avatar = message.author.displayAvatarURL({
+ dynamic: false,
+ format: 'png'
+ });
// Make the image
- let img = await new DIG.Delete().getImage(avatar)
+ let img = await new DIG.Delete().getImage(avatar);
// Add the image as an attachement
- let attach = new Discord.MessageAttachment(img, "delete.png");;
- message.channel.send({ files: [attach] })
+ let attach = new Discord.MessageAttachment(img, "delete.png");
+ message.channel.send({
+ files: [attach]
+ });
}
// Send the message with the image attached to an embed
if (message.content === "*blur") {
// Get the avatarUrl of the user
- let avatar = message.author.displayAvatarURL({ dynamic: false, format: 'png' });
+ let avatar = message.author.displayAvatarURL({
+ dynamic: false,
+ format: 'png'
+ });
// Make the image
- let img = await new DIG.Blur().getImage(avatar)
+ let img = await new DIG.Blur().getImage(avatar);
// Add the image as an attachement
let embed = new Discord.MessageEmbed()
.setTitle("Blur")
- .setImage("attachment://delete.png")
- let attach = new Discord.MessageAttachment(img, "blur.png");;
- message.channel.send({ embeds: [embed], files: [attach])
+ .setImage("attachment://delete.png");
+ let attach = new Discord.MessageAttachment(img, "blur.png");
+ message.channel.send({
+ embeds: [embed],
+ files: [attach]
+ });
}
-})
+});
// Log in to the bot
-bot.login("super_secret_token")
+bot.login("super_secret_token");
+```
+
+## Discord.js v14
+```js
+// Import the required elements from the discord.js library.
+const { Client, GatewayIntentBits, AttachmentBuilder, EmbedBuilder } = require("discord.js");
+// Create a new discord.js client.
+const bot = new Client({
+ intents: [
+ GatewayIntentBits.Guilds,
+ GatewayIntentBits.GuildMembers,
+ GatewayIntentBits.GuildMessages,
+ GatewayIntentBits.MessageContent,
+ ],
+});
+
+const DIG = require("discord-image-generation");
+
+// Listen to the ready event
+bot.on("ready", () => {
+ console.log("Bot is online");
+});
+
+// Listen to the message event
+bot.on("messageCreate", async (message) => {
+ // Send the image in a simple message
+ if (message.content === "*delete") {
+ // Get the avatarUrl of the user
+ let avatar = message.author.displayAvatarURL({
+ forceStatic: true,
+ extension: 'png'
+ });
+ // Make the image
+ let img = await new DIG.Delete().getImage(avatar);
+ // Add the image as an attachement
+ let attach = new AttachmentBuilder(img).setName("delete.png");
+ message.channel.send({
+ files: [attach]
+ });
+ }
+ // Send the message with the image attached to an embed
+ if (message.content === "*blur") {
+ // Get the avatarUrl of the user
+ let avatar = message.author.displayAvatarURL({
+ forceStatic: true,
+ extension: 'png'
+ });
+ // Make the image
+ let img = await new DIG.Blur().getImage(avatar);
+ // Add the image as an attachement
+ let embed = new EmbedBuilder()
+ .setTitle("Blur")
+ .setImage("attachment://blur.png");
+ let attach = new AttachmentBuilder(img).setName("blur.png");
+ message.channel.send({
+ embeds: [embed],
+ files: [attach]
+ });
+ }
+});
+
+// Log in to the bot
+bot.login("super_secret_token");
```
# Available images
@@ -161,7 +188,7 @@ bot.login("super_secret_token")
## Gifs
-- ``new DIG.Blink().getImage(``, ``.....);``
+- ``new DIG.Blink().getImage(delay (in ms), ``, ``.....);``
> You can add as many images as you want
@@ -198,10 +225,19 @@ bot.login("super_secret_token")

+- ``new DIG.Clown().getImage(``);``
+
+
+
- ``new DIG.ConfusedStonk().getImage(``);``

+
+- ``new DIG.Deepfry().getImage(``);``
+
+
+
- ``new DIG.Delete().getImage(``);``

@@ -222,6 +258,10 @@ bot.login("super_secret_token")

+- ``new DIG.Heartbreaking().getImage(``);``
+
+
+
- ``new DIG.Hitler().getImage(``);``

@@ -244,6 +284,10 @@ bot.login("super_secret_token")
> Limited to 300char
+- ``new DIG.Mikkelsen().getImage(``);``
+
+
+
(Thanks to sιмση ℓεcℓεяε#5765)
- ``new DIG.Mms().getImage(``);``
@@ -265,6 +309,10 @@ bot.login("super_secret_token")

+- ``new DIG.Snyder().getImage(``);``
+
+
+
- ``new DIG.Spank().getImage(``, ``);``

@@ -304,10 +352,38 @@ bot.login("super_secret_token")

-# Changelog
+- ``new DIG.Denoise().getImage(``, ``);``
-## v1.4.8
-- Typings added, thanks to https://github.com/Lioness100
+> Level should be a number
+
+- ``new DIG.Mirror().getImage(``, `true`, `false`);``
+
+
+
+# Changelog
+
+## v1.4.24
+- Re added typings
+
+## v1.4.23
+- Fixed import issue
+- Added Denoise()
+- Added Mirror()
+
+## v1.4.22
+- Fixed some bugs
+
+## v1.4.21
+- Added discord.js V14 usage example
+- Removed discord.js V12 usage example
+
+## v1.4.20
+- Some fixes
+- Added Clown() (thanks to Retrojection#1937)
+- Added Deepfry() (thanks to Retrojection#1937)
+- Added Heartbreaking() (thanks to Retrojection#1937)
+- Added Mikkelsen() (thanks to Retrojection#1937)
+- Added Snyder() (thanks to Retrojection#1937)
## v1.4.7
- Improved Blink() generation, now supports adding an insane amount of images ^^
diff --git a/package.json b/package.json
index 9665027..ac47963 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
{
"name": "discord-image-generation",
- "version": "1.4.12",
- "description": "discord-image-generation is a powerfull module that allow you to generate awesome images.",
+ "version": "1.4.25",
+ "description": "discord-image-generation is a powerful module that allow you to generate awesome images.",
"main": "src/index.js",
"types": "typings/index.d.ts",
"scripts": {
- "test": "node src/index.js"
+ "test": "node tests/test.js"
},
"author": {
"name": "Mr¤KayJayDee",
@@ -14,12 +14,12 @@
"license": "MIT",
"repository": {
"type": "git",
- "url": "https://github.com/Mr-KayJayDee/discord-image-generation.git"
+ "url": "https://git.mrkayjaydee.xyz/Mr-KayJayDee/discord-image-generation"
},
"bugs": {
- "url": "https://github.com/Mr-KayJayDee/discord-image-generation/issues"
+ "url": "https://git.mrkayjaydee.xyz/Mr-KayJayDee/discord-image-generation/issues"
},
- "homepage": "https://github.com/Mr-KayJayDee/discord-image-generation#readme",
+ "homepage": "https://git.mrkayjaydee.xyz/Mr-KayJayDee/discord-image-generation/src/branch/main/README.md",
"keywords": [
"discord",
"images",
@@ -33,8 +33,15 @@
"drawing"
],
"dependencies": {
- "canvas": "^2.6.1",
+ "canvas": "^2.10.1",
+ "discord-image-generation": "file:",
+ "discord.js": "^14.7.1",
"gifencoder": "^2.0.1",
- "jimp": "^0.16.1"
+ "jimp": "^0.16.0"
+ },
+ "overrides": {
+ "jimp": {
+ "jpeg-js": "^0.4.4"
+ }
}
}
diff --git a/src/assets/clown.png b/src/assets/clown.png
new file mode 100644
index 0000000..ed779e6
Binary files /dev/null and b/src/assets/clown.png differ
diff --git a/src/assets/heartbreaking.png b/src/assets/heartbreaking.png
new file mode 100644
index 0000000..83e1a5a
Binary files /dev/null and b/src/assets/heartbreaking.png differ
diff --git a/src/assets/mikkelsen.png b/src/assets/mikkelsen.png
new file mode 100644
index 0000000..6316f00
Binary files /dev/null and b/src/assets/mikkelsen.png differ
diff --git a/src/assets/snyder.png b/src/assets/snyder.png
new file mode 100644
index 0000000..2d190fe
Binary files /dev/null and b/src/assets/snyder.png differ
diff --git a/src/index.js b/src/index.js
index de4940f..9f3ffae 100644
--- a/src/index.js
+++ b/src/index.js
@@ -12,4 +12,4 @@ for (let type of readdirSync(join(__dirname, `module`)).filter(
Name.charAt(0).toUpperCase() + Name.slice(1)
] = require(`${__dirname}/module/${type}/${File}`);
});
-}
+}
\ No newline at end of file
diff --git a/src/module/filters/blur.js b/src/module/filters/blur.js
index caba99c..389f326 100644
--- a/src/module/filters/blur.js
+++ b/src/module/filters/blur.js
@@ -1,19 +1,12 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Blur {
- /**
- * Blur
- * @param {image} image
- * @param {level} level
- */
async getImage(image, level) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
image = await jimp.read(image);
image.blur(isNaN(level) ? 5 : parseInt(level));
- let raw;
- image.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await image.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/filters/gay.js b/src/module/filters/gay.js
index 800dbd6..d604974 100644
--- a/src/module/filters/gay.js
+++ b/src/module/filters/gay.js
@@ -1,12 +1,11 @@
const Canvas = require(`canvas`);
+const { validateURL } = require(`../functions`);
module.exports = class Gay {
- /**
- * Gay
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
let bg = await Canvas.loadImage(`${__dirname}/../../assets/gay.png`);
let img = await Canvas.loadImage(image);
const canvas = Canvas.createCanvas(480, 480);
diff --git a/src/module/filters/greyscale.js b/src/module/filters/greyscale.js
index 90b974a..2d3027e 100644
--- a/src/module/filters/greyscale.js
+++ b/src/module/filters/greyscale.js
@@ -1,18 +1,12 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Geryscale {
- /**
- * Greyscale
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
image = await jimp.read(image);
image.greyscale();
- let raw;
- image.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await image.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/filters/invert.js b/src/module/filters/invert.js
index e602f41..2a02855 100644
--- a/src/module/filters/invert.js
+++ b/src/module/filters/invert.js
@@ -1,18 +1,12 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Invert {
- /**
- * Invert
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
image = await jimp.read(image);
image.invert();
- let raw;
- image.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await image.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/filters/sepia.js b/src/module/filters/sepia.js
index 431e032..2576c92 100644
--- a/src/module/filters/sepia.js
+++ b/src/module/filters/sepia.js
@@ -1,18 +1,12 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Sepia {
- /**
- * Sepia
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
image = await jimp.read(image);
image.sepia();
- let raw;
- image.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await image.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/functions.js b/src/module/functions.js
index 39e18c0..21138e6 100644
--- a/src/module/functions.js
+++ b/src/module/functions.js
@@ -1,3 +1,5 @@
+const https = require(`https`);
+
module.exports = {
/**
* Crate a responsive on the text
@@ -47,5 +49,38 @@ module.exports = {
}
return resolve(lines);
});
+ },
+
+ async validateURL(url) {
+ if (!url) return null;
+ if (Buffer.isBuffer(url)) {
+ return url;
+ }
+ try {
+ // if url is not https
+ if (!url.startsWith(`https`)) {
+ return console.error(`The url must be https`);
+ return null;
+ }
+ return new Promise((resolve, reject) => {
+ https.get(url, (response) => {
+ if (response.statusCode !== 200) {
+ return console.error(`Invalid status code ${response.statusCode}`);
+ return;
+ }
+ const type = response.headers['content-type'];
+ if (!type.startsWith('image/')) {
+ return console.error(`Invalid content type ${type}`);
+ return;
+ }
+ const chunks = [];
+ response.on('data', (chunk) => chunks.push(chunk));
+ response.on('end', () => resolve(Buffer.concat(chunks)));
+ });
+ });
+ } catch (error) {
+ return console.error(error);
+ return null;
+ }
}
};
\ No newline at end of file
diff --git a/src/module/gif/blink.js b/src/module/gif/blink.js
index c54abcc..9ade12c 100644
--- a/src/module/gif/blink.js
+++ b/src/module/gif/blink.js
@@ -1,17 +1,22 @@
const Canvas = require(`canvas`);
const GIFEncoder = require(`gifencoder`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Blink {
+ async getImage(delay, ...images) {
+ if (!images || images.length < 2) return console.error(`You must provide at least two images.`);
+
+ if (isNaN(delay)) return console.error(`You must provide a valid delay.`);
+ for (const image of images) {
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ }
- async getImage( ...images) {
- if (!images || images.length < 2) throw new Error(`You must provide at least two images.`);
-
const GIF = new GIFEncoder(480, 480);
GIF.start();
GIF.setRepeat(0);
- GIF.setDelay(1000);
+ GIF.setDelay(delay);
GIF.setTransparent();
-
+
const canvas = Canvas.createCanvas(480, 480);
for (const image of images) {
@@ -21,8 +26,8 @@ module.exports = class Blink {
ctx2.drawImage(base, 0, 0, 480, 480);
GIF.addFrame(ctx2);
}
-
+
GIF.finish();
return GIF.out.getData();
}
-};
+};
\ No newline at end of file
diff --git a/src/module/gif/triggered.js b/src/module/gif/triggered.js
index 39a09d9..d7943cc 100644
--- a/src/module/gif/triggered.js
+++ b/src/module/gif/triggered.js
@@ -1,16 +1,13 @@
const Canvas = require(`canvas`);
const GIFEncoder = require(`gifencoder`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Triggered {
- /**
- * Triggered
- * @param {image} image
- * @param {number} timeout
- */
async getImage(image, timeout = 15) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- if (isNaN(timeout)) throw new Error(`The timeout argument must be a number.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ if (isNaN(timeout)) return console.error(`The timeout argument must be a number.`);
const base = await Canvas.loadImage(`${__dirname}/../../assets/triggered.png`);
const img = await Canvas.loadImage(image);
const GIF = new GIFEncoder(256, 310);
diff --git a/src/module/montage/ad.js b/src/module/montage/ad.js
index 5db0930..b8d1da0 100644
--- a/src/module/montage/ad.js
+++ b/src/module/montage/ad.js
@@ -1,18 +1,14 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class Ad {
- /**
- * Ad
- * @param {image} image1
- */
async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(550, 474);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/ad.png`);
- ctx.drawImage(image1, 150, 75, 230, 230);
- ctx.drawImage(background, 0, 0, 550, 474);
- return canvas.toBuffer();
+ if (!image1) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image1);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const image1Buffer = await Jimp.read(image1);
+ image1Buffer.resize(230, 230);
+ const background = await Jimp.read(`${__dirname}/../../assets/ad.png`);
+ background.composite(image1Buffer, 150, 75);
+ return background.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/affect.js b/src/module/montage/affect.js
index 3622746..ab44e46 100644
--- a/src/module/montage/affect.js
+++ b/src/module/montage/affect.js
@@ -1,20 +1,14 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Affect {
- /**
- * Affect
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
let base = await jimp.read(`${__dirname}/../../assets/affect.png`);
let img = await jimp.read(image);
img.resize(200, 157);
base.composite(img, 180, 383);
- let raw;
- base.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await base.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/batslap.js b/src/module/montage/batslap.js
index 6482ee5..6e5d445 100644
--- a/src/module/montage/batslap.js
+++ b/src/module/montage/batslap.js
@@ -1,14 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Batslap {
- /**
- * Batslap
- * @param {image} image1
- * @param {image} image2
- */
async getImage(image1, image2) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image1);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
let base = await jimp.read(`${__dirname}/../../assets/batslap.png`);
image1 = await jimp.read(image1);
image2 = await jimp.read(image2);
@@ -19,10 +18,6 @@ module.exports = class Batslap {
image2.resize(200, 200);
base.composite(image2, 580, 260);
base.composite(image1, 350, 70);
- let raw;
- base.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await base.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/beautiful.js b/src/module/montage/beautiful.js
index a2ed674..3f4cdab 100644
--- a/src/module/montage/beautiful.js
+++ b/src/module/montage/beautiful.js
@@ -1,22 +1,16 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Beautiful {
- /**
- * Beautiful
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
let base = await jimp.read(`${__dirname}/../../assets/beautiful.png`);
base.resize(376, 400);
let img = await jimp.read(image);
img.resize(84, 95);
base.composite(img, 258, 28);
base.composite(img, 258, 229);
- let raw;
- base.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await base.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/bed.js b/src/module/montage/bed.js
index 08e360c..d2e7494 100644
--- a/src/module/montage/bed.js
+++ b/src/module/montage/bed.js
@@ -1,14 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Bed {
- /**
- * Bed
- * @param {image} image1
- * @param {image} image2
- */
async getImage(image1, image2) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image2);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
let bg = await jimp.read(`${__dirname}/../../assets/bed.png`);
image1 = await jimp.read(image1);
image2 = await jimp.read(image2);
@@ -21,10 +20,6 @@ module.exports = class Bed {
bg.composite(image1, 25, 300);
bg.composite(image3, 53, 450);
bg.composite(image2, 53, 575);
- let raw;
- bg.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await bg.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/bobross.js b/src/module/montage/bobross.js
index f059810..3d4c5ff 100644
--- a/src/module/montage/bobross.js
+++ b/src/module/montage/bobross.js
@@ -1,20 +1,16 @@
-const { createCanvas, loadImage } = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class Bobross {
- /**
- * Bobross
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const base = await loadImage(`${__dirname}/../../assets/bobross.png`);
- const canvas = createCanvas(base.width, base.height);
- const ctx = canvas.getContext(`2d`);
- image1 = await loadImage(image1);
- ctx.fillStyle = `white`;
- ctx.fillRect(0, 0, base.width, base.height);
- ctx.drawImage(image1, 15, 20, 440, 440);
- ctx.drawImage(base, 0, 0);
- return canvas.toBuffer();
- }
+ async getImage(image1) {
+ if (!image1) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image1);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const base = await Jimp.read(`${__dirname}/../../assets/bobross.png`);
+ const image1Buffer = await Jimp.read(image1);
+ image1Buffer.resize(440, 440);
+ const compositeImage = new Jimp(base.getWidth(), base.getHeight(), 0xFFFFFFFF);
+ compositeImage.composite(image1Buffer, 15, 20);
+ compositeImage.composite(base, 0, 0);
+ return compositeImage.getBufferAsync(Jimp.MIME_PNG);
+ }
};
diff --git a/src/module/montage/clown.js b/src/module/montage/clown.js
new file mode 100644
index 0000000..4812b58
--- /dev/null
+++ b/src/module/montage/clown.js
@@ -0,0 +1,28 @@
+const Canvas = require(`canvas`);
+const { validateURL } = require(`../functions`);
+
+module.exports = class Clown {
+ async getImage(image) {
+
+ function drawImage(ctx, image, x, y, w, h, degrees) {
+ ctx.save();
+ ctx.translate(x + w / 2, y + h / 2);
+ ctx.rotate(degrees * Math.PI / 180.0);
+ ctx.translate(-x - w / 2, -y - h / 2);
+ ctx.drawImage(image, x, y, w, h);
+ ctx.restore();
+ }
+
+ if (!image) throw new Error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = Canvas.createCanvas(610, 343);
+ const ctx = canvas.getContext(`2d`);
+ image = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`${__dirname}/../../assets/clown.png`);
+ ctx.fillRect(0, 0, 610, 343);
+ drawImage(ctx, image, 15, 55, 145, 130, -5);
+ ctx.drawImage(background, 0, 0, 610, 343);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/confusedStonk.js b/src/module/montage/confusedStonk.js
index 22e2d16..18d2c68 100644
--- a/src/module/montage/confusedStonk.js
+++ b/src/module/montage/confusedStonk.js
@@ -1,18 +1,16 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class ConfusedStonk {
- /**
- * ConfusedStonk
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(1994, 1296);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/confusedStonk.png`);
- ctx.drawImage(image1, 190, 70, 400, 400);
- ctx.drawImage(background, 0, 0, 1994, 1296);
- return canvas.toBuffer();
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const image1 = await Jimp.read(image);
+ const background = await Jimp.read(`${__dirname}/../../assets/confusedStonk.png`);
+ image1.resize(400, 400);
+ const compositeImage = new Jimp(background.getWidth(), background.getHeight(), 0xFFFFFFFF);
+ compositeImage.composite(image1, 190, 70);
+ compositeImage.composite(background, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/deepfry.js b/src/module/montage/deepfry.js
new file mode 100644
index 0000000..ae1c725
--- /dev/null
+++ b/src/module/montage/deepfry.js
@@ -0,0 +1,16 @@
+const jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
+
+module.exports = class Deepfry {
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ image = await jimp.read(image);
+ image.quality(2)
+ image.contrast(1);
+ image.pixelate(2);
+ image.posterize(10);
+ return await image.getBufferAsync(`image/png`);
+ }
+};
\ No newline at end of file
diff --git a/src/module/montage/delete.js b/src/module/montage/delete.js
index 40a8ae3..fad3ae8 100644
--- a/src/module/montage/delete.js
+++ b/src/module/montage/delete.js
@@ -1,20 +1,14 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Delete {
- /**
- * Delete
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- let bg = await jimp.read(`${__dirname}/../../assets/delete.png`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const background = await jimp.read(`${__dirname}/../../assets/delete.png`);
image = await jimp.read(image);
image.resize(195, 195);
- bg.composite(image, 120, 135);
- let raw;
- bg.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ background.composite(image, 120, 135);
+ return await background.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/discordBlack.js b/src/module/montage/discordBlack.js
index 1208d33..cfc506b 100644
--- a/src/module/montage/discordBlack.js
+++ b/src/module/montage/discordBlack.js
@@ -1,18 +1,16 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class DiscordBlack {
- /**
- * Bobross
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(610, 610);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/discordblack.png`);
- ctx.drawImage(image1, 0, 0, 610, 610);
- ctx.drawImage(background, 0, 0, 610, 610);
- return canvas.toBuffer();
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const background = await Jimp.read(`${__dirname}/../../assets/discordblack.png`);
+ const image1 = await Jimp.read(image);
+ image1.resize(background.getWidth(), background.getHeight());
+ const compositeImage = new Jimp(background.getWidth(), background.getHeight(), 0xFFFFFFFF);
+ compositeImage.composite(image1, 0, 0);
+ compositeImage.composite(background, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/discordBlue.js b/src/module/montage/discordBlue.js
index c7ec0bb..35153b3 100644
--- a/src/module/montage/discordBlue.js
+++ b/src/module/montage/discordBlue.js
@@ -1,18 +1,16 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class DiscordBlue {
- /**
- * Bobross
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(610, 610);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/discordblue.png`);
- ctx.drawImage(image1, 0, 0, 610, 610);
- ctx.drawImage(background, 0, 0, 610, 610);
- return canvas.toBuffer();
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const background = await Jimp.read(`${__dirname}/../../assets/discordblue.png`);
+ const image1 = await Jimp.read(image);
+ image1.resize(background.getWidth(), background.getHeight());
+ const compositeImage = new Jimp(background.getWidth(), background.getHeight(), 0xFFFFFFFF);
+ compositeImage.composite(image1, 0, 0);
+ compositeImage.composite(background, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/doubleStonk.js b/src/module/montage/doubleStonk.js
index e064a51..12e8e73 100644
--- a/src/module/montage/doubleStonk.js
+++ b/src/module/montage/doubleStonk.js
@@ -1,14 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class DoubleStonk {
- /**
- * DoubleStonk
- * @param {image} image1
- * @param {image} image2
- */
async getImage(image1, image2) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image2);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
let base = await jimp.read(`${__dirname}/../../assets/doubleStonk.png`);
image1 = await jimp.read(image1);
image2 = await jimp.read(image2);
@@ -19,10 +18,6 @@ module.exports = class DoubleStonk {
image2.resize(140, 140);
base.composite(image2, 60, 20);
base.composite(image1, 0, 30);
- let raw;
- base.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await base.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/facepalm.js b/src/module/montage/facepalm.js
index 96c3d3e..cd114dc 100644
--- a/src/module/montage/facepalm.js
+++ b/src/module/montage/facepalm.js
@@ -1,20 +1,16 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class Facepalm {
- /**
- * Facepalm
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- let canvas = Canvas.createCanvas(632, 357);
- let ctx = canvas.getContext(`2d`);
- ctx.fillStyle = `black`;
- ctx.fillRect(0, 0, 632, 357);
- let avatar = await Canvas.loadImage(image);
- ctx.drawImage(avatar, 199, 112, 235, 235);
- let layer = await Canvas.loadImage(`${__dirname}/../../assets/facepalm.png`);
- ctx.drawImage(layer, 0, 0, 632, 357);
- return canvas.toBuffer();
+ if (!image) return console.error(`You must provide an image as an argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const layer = await Jimp.read(`${__dirname}/../../assets/facepalm.png`);
+ const avatar = await Jimp.read(image);
+ const compositeImage = new Jimp(layer.getWidth(), layer.getHeight(), 0xFFFFFFFF);
+ avatar.resize(235, 235);
+ compositeImage.composite(avatar, 199, 112);
+ compositeImage.composite(layer, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
-};
\ No newline at end of file
+};
diff --git a/src/module/montage/heartbreaking.js b/src/module/montage/heartbreaking.js
new file mode 100644
index 0000000..94b9eb7
--- /dev/null
+++ b/src/module/montage/heartbreaking.js
@@ -0,0 +1,17 @@
+const Canvas = require(`canvas`);
+const { validateURL } = require(`../functions`);
+
+module.exports = class Heartbreaking {
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = Canvas.createCanvas(610, 797);
+ const ctx = canvas.getContext(`2d`);
+ image = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`${__dirname}/../../assets/heartbreaking.png`);
+ ctx.drawImage(image, 0, 150, 610, 610);
+ ctx.drawImage(background, 0, 0, 610, 797);
+ return canvas.toBuffer();
+ }
+};
\ No newline at end of file
diff --git a/src/module/montage/hitler.js b/src/module/montage/hitler.js
index 7912033..a30c28d 100644
--- a/src/module/montage/hitler.js
+++ b/src/module/montage/hitler.js
@@ -1,20 +1,14 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Hitler {
- /**
- * Hitler
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
let bg = await jimp.read(`${__dirname}/../../assets/hitler.png`);
let img = await jimp.read(image);
img.resize(140, 140);
bg.composite(img, 46, 43);
- let raw;
- bg.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await bg.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/jail.js b/src/module/montage/jail.js
index 269b91e..fbe8bac 100644
--- a/src/module/montage/jail.js
+++ b/src/module/montage/jail.js
@@ -1,18 +1,17 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
module.exports = class Jail {
- /**
- * Jail
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- let bg = await Canvas.loadImage(`${__dirname}/../../assets/jail.png`);
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(400, 400);
- const ctx = canvas.getContext(`2d`);
- ctx.drawImage(img, 0, 0, 400, 400);
- ctx.drawImage(bg, 0, 0, 400, 400);
- return canvas.toBuffer();
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ let bg = await Jimp.read(`${__dirname}/../../assets/jail.png`);
+ let img = await Jimp.read(image);
+ const compositeImage = new Jimp(400, 400, 0xFFFFFFFF);
+ img.resize(400, 400);
+ bg.resize(400, 400);
+ compositeImage.composite(img, 0, 0);
+ compositeImage.composite(bg, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
};
\ No newline at end of file
diff --git a/src/module/montage/karaba.js b/src/module/montage/karaba.js
index 2a213db..e7696c0 100644
--- a/src/module/montage/karaba.js
+++ b/src/module/montage/karaba.js
@@ -1,18 +1,17 @@
-const Canvas = require(`canvas`);
-
-module.exports = class Mms {
- /**
- * MMS
- * @param {image} image
- */
+const Jimp = require('jimp');
+const { validateURL } = require(`../functions`);
+module.exports = class Karaba {
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as an argument`);
- let bg = await Canvas.loadImage(`${__dirname}/../../assets/karaba.png`);
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(bg.width, bg.height);
- const ctx = canvas.getContext(`2d`);
- ctx.drawImage(img, 130, 44, 130, 130);
- ctx.drawImage(bg, 0, 0, bg.width, bg.height);
- return canvas.toBuffer();
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ let bg = await Jimp.read(`${__dirname}/../../assets/karaba.png`);
+ let img = await Jimp.read(image);
+ const compositeImage = new Jimp(bg.getWidth(), bg.getHeight(), 0xFFFFFFFF);
+ img.resize(130, 130);
+ bg.resize(bg.getWidth(), bg.getHeight());
+ compositeImage.composite(img, 130, 44);
+ compositeImage.composite(bg, 0, 0);
+ return await compositeImage.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/kiss.js b/src/module/montage/kiss.js
index f76ae2a..a9adc34 100644
--- a/src/module/montage/kiss.js
+++ b/src/module/montage/kiss.js
@@ -1,14 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Kiss {
- /**
- * Kiss
- * @param {image} image1
- * @param {image} image2
- */
async getImage(image1, image2) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image2);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
let base = await jimp.read(`${__dirname}/../../assets/kiss.png`);
image1 = await jimp.read(image1);
image2 = await jimp.read(image2);
@@ -19,10 +18,6 @@ module.exports = class Kiss {
image2.resize(200, 200);
base.composite(image1, 150, 25);
base.composite(image2, 350, 25);
- let raw;
- base.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await base.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/lisaPresentation.js b/src/module/montage/lisaPresentation.js
index e311bd1..6c8d427 100644
--- a/src/module/montage/lisaPresentation.js
+++ b/src/module/montage/lisaPresentation.js
@@ -5,10 +5,8 @@ const path = require(`path`);
const { wrapText } = require(`../functions`);
module.exports = class LisaPresentation {
-
async getImage(text) {
- if (!text || text.length > 300) throw new Error(`You must provide a text of 300 characters or less.`);
-
+ if (!text || text.length > 300) return console.error(`You must provide a text of 300 characters or less.`);
const base = await loadImage(path.join(`${__dirname}/../../assets/lisa-presentation.png`));
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext(`2d`);
@@ -27,8 +25,6 @@ module.exports = class LisaPresentation {
const height = topMost + ((fontSize + 20) * i);
ctx.fillText(lines[i], base.width / 2, height);
}
-
return canvas.toBuffer();
}
-
};
\ No newline at end of file
diff --git a/src/module/montage/mikkelsen.js b/src/module/montage/mikkelsen.js
new file mode 100644
index 0000000..be3e341
--- /dev/null
+++ b/src/module/montage/mikkelsen.js
@@ -0,0 +1,17 @@
+const Canvas = require(`canvas`);
+const { validateURL } = require(`../functions`);
+
+module.exports = class Mikkelsen {
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = Canvas.createCanvas(610, 955);
+ const ctx = canvas.getContext(`2d`);
+ image = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`${__dirname}/../../assets/mikkelsen.png`);
+ ctx.drawImage(image, 20, 460, 580, 580);
+ ctx.drawImage(background, 0, 0, 610, 955);
+ return canvas.toBuffer();
+ }
+};
\ No newline at end of file
diff --git a/src/module/montage/mms.js b/src/module/montage/mms.js
index 4fd00fe..2adcb47 100644
--- a/src/module/montage/mms.js
+++ b/src/module/montage/mms.js
@@ -1,18 +1,17 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
module.exports = class Mms {
- /**
- * MMS
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- let bg = await Canvas.loadImage(`${__dirname}/../../assets/mms.png`);
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(400, 400);
- const ctx = canvas.getContext(`2d`);
- ctx.drawImage(img, 60, 10, 270, 270);
- ctx.drawImage(bg, 0, 0, 400, 400);
- return canvas.toBuffer();
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const bg = await Jimp.read(`${__dirname}/../../assets/mms.png`);
+ const img = await Jimp.read(image);
+ const canvas = new Jimp(400, 400);
+ bg.resize(400, 400);
+ img.resize(270, 270);
+ canvas.composite(img, 60, 10);
+ canvas.composite(bg, 0, 0);
+ return canvas.getBufferAsync(Jimp.MIME_PNG);
}
-};
\ No newline at end of file
+};
diff --git a/src/module/montage/notStonk.js b/src/module/montage/notStonk.js
index da008fa..6d5949c 100644
--- a/src/module/montage/notStonk.js
+++ b/src/module/montage/notStonk.js
@@ -1,18 +1,17 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
module.exports = class NotStonk {
- /**
- * NotStonk
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(960, 576);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/notStonk.png`);
- ctx.drawImage(image1, 140, 5, 190, 190);
- ctx.drawImage(background, 0, 0, 960, 576);
- return canvas.toBuffer();
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = new Jimp(960, 576);
+ const img1 = await Jimp.read(image);
+ const background = await Jimp.read(`${__dirname}/../../assets/notStonk.png`);
+ img1.resize(190, 190);
+ background.resize(960, 576);
+ canvas.composite(img1, 140, 5);
+ canvas.composite(background, 0, 0);
+ return canvas.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/podium.js b/src/module/montage/podium.js
index 6a63a8a..dc5064a 100644
--- a/src/module/montage/podium.js
+++ b/src/module/montage/podium.js
@@ -2,24 +2,21 @@ const Canvas = require(`canvas`);
const {
applyText
} = require(`../functions`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Podium {
- /**
- * Podium
- * @param {image} image1
- * @param {image} image2
- * @param {image} image3
- * @param {string} name1
- * @param {string} name2
- * @param {string} name3
- */
async getImage(image1, image2, image3, name1, name2, name3) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
- if (!image3) throw new Error(`You must provide an image as a third argument.`);
- if (!name1) throw new Error(`You must provide a text as a fourth argument.`);
- if (!name2) throw new Error(`You must provide a text as a fifth argument.`);
- if (!name3) throw new Error(`You must provide a text as a sixth argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image2);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image3) return console.error(`You must provide an image as a third argument.`);
+ let isValid3 = await validateURL(image3);
+ if (!isValid3) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!name1) return console.error(`You must provide a text as a fourth argument.`);
+ if (!name2) return console.error(`You must provide a text as a fifth argument.`);
+ if (!name3) return console.error(`You must provide a text as a sixth argument.`);
const canvas = Canvas.createCanvas(1173, 686);
const ctx = canvas.getContext(`2d`);
image1 = await Canvas.loadImage(image1);
diff --git a/src/module/montage/poutine.js b/src/module/montage/poutine.js
index e46b968..3f87955 100644
--- a/src/module/montage/poutine.js
+++ b/src/module/montage/poutine.js
@@ -1,18 +1,16 @@
-const Canvas = require(`canvas`);
-
+const Jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
+// BUG: Placement de l'image n'est pas correcte
module.exports = class Poutine {
- /**
- * Ad
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
- const canvas = Canvas.createCanvas(600, 539);
- const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
- const background = await Canvas.loadImage(`${__dirname}/../../assets/poutine.png`);
- ctx.drawImage(image1, 350, 20, 135, 135);
- ctx.drawImage(background, 0, 0, 600, 539);
- return canvas.toBuffer();
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = new Jimp(600, 539);
+ const img1 = await Jimp.read(image);
+ const background = await Jimp.read(`${__dirname}/../../assets/poutine.png`);
+ canvas.composite(img1, 350, 20);
+ canvas.composite(background, 0, 0);
+ return canvas.getBufferAsync(Jimp.MIME_PNG);
}
};
diff --git a/src/module/montage/rip.js b/src/module/montage/rip.js
index 5ddcefa..71dfc76 100644
--- a/src/module/montage/rip.js
+++ b/src/module/montage/rip.js
@@ -1,13 +1,10 @@
const Canvas = require(`canvas`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Rip {
- /**
- * Rip
- * @param {image} image
- */
-
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
const canvas = Canvas.createCanvas(720, 405);
const ctx = canvas.getContext(`2d`);
const background = await Canvas.loadImage(`${__dirname}/../../assets/rip.png`);
diff --git a/src/module/montage/snyder.js b/src/module/montage/snyder.js
new file mode 100644
index 0000000..32328bb
--- /dev/null
+++ b/src/module/montage/snyder.js
@@ -0,0 +1,28 @@
+const Canvas = require(`canvas`);
+const { validateURL } = require(`../functions`);
+
+module.exports = class Snyder {
+ async getImage(image) {
+
+ function drawImage(ctx, image, x, y, w, h, degrees) {
+ ctx.save();
+ ctx.translate(x + w / 2, y + h / 2);
+ ctx.rotate(degrees * Math.PI / 180.0);
+ ctx.translate(-x - w / 2, -y - h / 2);
+ ctx.drawImage(image, x, y, w, h);
+ ctx.restore();
+ }
+
+ if (!image) throw new Error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ const canvas = Canvas.createCanvas(610, 343);
+ const ctx = canvas.getContext(`2d`);
+ image = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`${__dirname}/../../assets/snyder.png`);
+ ctx.fillRect(0, 0, 610, 343);
+ drawImage(ctx, image, 62, 70, 300, 300, -6);
+ ctx.drawImage(background, 0, 0, 610, 343);
+ return canvas.toBuffer();
+ }
+};
\ No newline at end of file
diff --git a/src/module/montage/spank.js b/src/module/montage/spank.js
index 81b4302..e46ca39 100644
--- a/src/module/montage/spank.js
+++ b/src/module/montage/spank.js
@@ -1,14 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Spank {
- /**
- *
- * @param {image} image1
- * @param {image} image2
- */
async getImage(image1, image2) {
- if (!image1) throw new Error(`You must provide an image as a first argument.`);
- if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (!image1) return console.error(`You must provide an image as a first argument.`);
+ let isValid1 = await validateURL(image1);
+ if (!isValid1) return console.error(`You must provide a valid image URL or buffer.`);
+ if (!image2) return console.error(`You must provide an image as a second argument.`);
+ let isValid2 = await validateURL(image2);
+ if (!isValid2) return console.error(`You must provide a valid image URL or buffer.`);
let bg = await jimp.read(`${__dirname}/../../assets/spank.png`);
image1 = await jimp.read(image1);
image2 = await jimp.read(image2);
@@ -21,10 +20,6 @@ module.exports = class Spank {
image2.resize(120, 120);
bg.composite(image2, 350, 220);
bg.composite(image1, 225, 5);
- let raw;
- bg.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await bg.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/stonk.js b/src/module/montage/stonk.js
index b9a4c34..18e0935 100644
--- a/src/module/montage/stonk.js
+++ b/src/module/montage/stonk.js
@@ -1,17 +1,15 @@
const Canvas = require(`canvas`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Stonk {
- /**
- * Stonk
- * @param {image} image1
- */
- async getImage(image1) {
- if (!image1) throw new Error(`You must provide an image as an argument`);
+ async getImage(image) {
+ if (!image) return console.error(`You must provide an image as an argument`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
const canvas = Canvas.createCanvas(900, 539);
const ctx = canvas.getContext(`2d`);
- image1 = await Canvas.loadImage(image1);
+ image = await Canvas.loadImage(image);
const background = await Canvas.loadImage(`${__dirname}/../../assets/stonk.png`);
- ctx.drawImage(image1, 70, 40, 240, 240);
+ ctx.drawImage(image, 70, 40, 240, 240);
ctx.drawImage(background, 0, 0, 900, 539);
return canvas.toBuffer();
}
diff --git a/src/module/montage/tatoo.js b/src/module/montage/tatoo.js
index 3eb4e2c..4bf8c2e 100644
--- a/src/module/montage/tatoo.js
+++ b/src/module/montage/tatoo.js
@@ -1,12 +1,10 @@
const Canvas = require(`canvas`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Tatoo {
- /**
- * Tatoo
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
const canvas = Canvas.createCanvas(750, 1089);
const ctx = canvas.getContext(`2d`);
const avatar = await Canvas.loadImage(image);
diff --git a/src/module/montage/thomas.js b/src/module/montage/thomas.js
index 8006584..4701231 100644
--- a/src/module/montage/thomas.js
+++ b/src/module/montage/thomas.js
@@ -1,12 +1,10 @@
const Canvas = require(`canvas`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Thomas {
- /**
- * Thomas
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
const canvas = Canvas.createCanvas(841, 1058);
const ctx = canvas.getContext(`2d`);
const avatar = await Canvas.loadImage(image);
diff --git a/src/module/montage/trash.js b/src/module/montage/trash.js
index 147f066..da14cd9 100644
--- a/src/module/montage/trash.js
+++ b/src/module/montage/trash.js
@@ -1,21 +1,15 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Trash {
- /**
- * Trash
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
let bg = await jimp.read(`${__dirname}/../../assets/trash.png`);
image = await jimp.read(image);
image.resize(309, 309);
image.blur(5);
bg.composite(image, 309, 0);
- let raw;
- bg.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await bg.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/montage/wanted.js b/src/module/montage/wanted.js
index 711391d..5d5c236 100644
--- a/src/module/montage/wanted.js
+++ b/src/module/montage/wanted.js
@@ -2,16 +2,14 @@ const Canvas = require(`canvas`);
const {
applyText
} = require(`../functions`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Wanted {
- /**
- * Wanted
- * @param {image} image
- */
async getImage(image, currency = `$`) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
- if (typeof currency != `string`) throw new Error(`You must provide a string for the currency.`);
- if (currency.length > 1) throw new Error(`You must provide only one character for the currency.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ if (typeof currency != `string`) return console.error(`You must provide a string for the currency.`);
+ if (currency.length > 1) return console.error(`You must provide only one character for the currency.`);
var price = Math.floor(Math.random() * 188708) + 329889;
const canvas = Canvas.createCanvas(257, 383);
const ctx = canvas.getContext(`2d`);
diff --git a/src/module/utils/circle.js b/src/module/utils/circle.js
index 218c660..e48dc95 100644
--- a/src/module/utils/circle.js
+++ b/src/module/utils/circle.js
@@ -1,19 +1,13 @@
const jimp = require(`jimp`);
-
+const { validateURL } = require(`../functions`);
module.exports = class Circle {
- /**
- * Circle
- * @param {image} image
- */
async getImage(image) {
- if (!image) throw new Error(`You must provide an image as a first argument.`);
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
image = await jimp.read(image);
image.resize(480, 480);
image.circle();
- let raw;
- image.getBuffer(`image/png`, (err, buffer) => {
- raw = buffer;
- });
- return raw;
+ return await image.getBufferAsync(`image/png`);
}
};
\ No newline at end of file
diff --git a/src/module/utils/color.js b/src/module/utils/color.js
index d25f4a3..7b82439 100644
--- a/src/module/utils/color.js
+++ b/src/module/utils/color.js
@@ -1,10 +1,6 @@
const Canvas = require(`canvas`);
module.exports = class Color {
- /**
- * Color
- * @param {string} color
- */
async getImage(color = `#FFFFFF`) {
const canvas = Canvas.createCanvas(2048, 2048);
const ctx = canvas.getContext(`2d`);
diff --git a/src/module/utils/denoise.js b/src/module/utils/denoise.js
new file mode 100644
index 0000000..158d88d
--- /dev/null
+++ b/src/module/utils/denoise.js
@@ -0,0 +1,16 @@
+const jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
+module.exports = class Denoise {
+ async getImage(image, level = 1) {
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ if (isNaN(level)) level = 1;
+ if (level > 10) level = 10;
+ if (level < 1) level = 1;
+ image = await jimp.read(image);
+ // apply gaussBlur
+ image.gaussian(level);
+ return await image.getBufferAsync(`image/png`);
+ }
+};
\ No newline at end of file
diff --git a/src/module/utils/mirror.js b/src/module/utils/mirror.js
new file mode 100644
index 0000000..46551a9
--- /dev/null
+++ b/src/module/utils/mirror.js
@@ -0,0 +1,12 @@
+const jimp = require(`jimp`);
+const { validateURL } = require(`../functions`);
+module.exports = class Mirror {
+ async getImage(image, horizontal = true, vertical = false) {
+ if (!image) return console.error(`You must provide an image as a first argument.`);
+ let isValid = await validateURL(image);
+ if (!isValid) return console.error(`You must provide a valid image URL or buffer.`);
+ image = await jimp.read(image);
+ image.flip(horizontal, vertical);
+ return await image.getBufferAsync(`image/png`);
+ }
+};
\ No newline at end of file
diff --git a/typings/index.d.ts b/typings/index.d.ts
index 021744f..881253d 100644
--- a/typings/index.d.ts
+++ b/typings/index.d.ts
@@ -10,22 +10,62 @@ export class Blur extends ImageGenerator {
getImage(avatar: string, level?: number): Promise;
}
+export class Gay extends DefaultImageGenerator { }
+
+export class Greyscale extends DefaultImageGenerator { }
+
+export class Invert extends DefaultImageGenerator { }
+
+export class Sepia extends DefaultImageGenerator { }
+
export class Blink extends ImageGenerator {
- getImage(avatar: string, avatar2: string, ...avatars: string[]): Promise;
+ getImage(delay: number, ...avatar: any[]): Promise;
}
+export class Triggered extends DefaultImageGenerator { }
+
+export class Ad extends DefaultImageGenerator { }
+
+export class Affect extends DefaultImageGenerator { }
+
export class Batslap extends ImageGenerator {
getImage(avatar: string, avatar2: string): Promise;
}
+export class Beautiful extends DefaultImageGenerator { }
+
export class Bed extends ImageGenerator {
getImage(avatar: string, avatar2: string): Promise;
}
+export class Bobross extends DefaultImageGenerator { }
+
+export class Clown extends DefaultImageGenerator { }
+
+export class ConfusedStonk extends DefaultImageGenerator { }
+
+export class Deepfry extends DefaultImageGenerator { }
+
+export class Delete extends DefaultImageGenerator { }
+
+export class DiscordBlack extends DefaultImageGenerator { }
+
+export class DiscordBlue extends DefaultImageGenerator { }
+
export class DoubleStonk extends ImageGenerator {
getImage(avatar: string, avatar2: string): Promise;
}
+export class Facepalm extends DefaultImageGenerator { }
+
+export class Heartbreaking extends DefaultImageGenerator { }
+
+export class Hitler extends DefaultImageGenerator { }
+
+export class Jail extends DefaultImageGenerator { }
+
+export class Karaba extends DefaultImageGenerator { }
+
export class Kiss extends ImageGenerator {
getImage(avatar: string, avatar2: string): Promise;
}
@@ -34,52 +74,55 @@ export class LisaPresentation extends ImageGenerator {
getImage(text: string): Promise;
}
+export class Mikkelsen extends DefaultImageGenerator { }
+
+export class Mms extends DefaultImageGenerator { }
+
+export class NotStonk extends DefaultImageGenerator { }
+
export class Podium extends ImageGenerator {
getImage(
- avatar: string,
- avatar2: string,
- avatar3: string,
- name: string,
- name2: string,
+ avatar: string,
+ avatar2: string,
+ avatar3: string,
+ name: string,
+ name2: string,
name3: string
): Promise;
}
+export class Poutine extends DefaultImageGenerator { }
+
+export class Rip extends DefaultImageGenerator { }
+
+export class Snyder extends DefaultImageGenerator { }
+
export class Spank extends ImageGenerator {
getImage(avatar: string, avatar2: string): Promise;
}
+export class Stonk extends DefaultImageGenerator { }
+
+export class Tatoo extends DefaultImageGenerator { }
+
+export class Thomas extends DefaultImageGenerator { }
+
+export class Trash extends DefaultImageGenerator { }
+
export class Wanted extends ImageGenerator {
getImage(avatar: string, currency: string): Promise;
}
+export class Circle extends DefaultImageGenerator { }
+
export class Color extends ImageGenerator {
getImage(color: string): Promise;
}
-export class Gay extends DefaultImageGenerator {}
-export class Greyscale extends DefaultImageGenerator {}
-export class Invert extends DefaultImageGenerator {}
-export class Sepia extends DefaultImageGenerator {}
-export class Triggered extends DefaultImageGenerator {}
-export class Ad extends DefaultImageGenerator {}
-export class Affect extends DefaultImageGenerator {}
-export class Beautiful extends DefaultImageGenerator {}
-export class Bobross extends DefaultImageGenerator {}
-export class ConfusedStonk extends DefaultImageGenerator {}
-export class Delete extends DefaultImageGenerator {}
-export class DiscordBlack extends DefaultImageGenerator {}
-export class DiscordBlue extends DefaultImageGenerator {}
-export class Facepalm extends DefaultImageGenerator {}
-export class Hitler extends DefaultImageGenerator {}
-export class Jail extends DefaultImageGenerator {}
-export class Karaba extends DefaultImageGenerator {}
-export class Mms extends DefaultImageGenerator {}
-export class NotStonk extends DefaultImageGenerator {}
-export class Poutine extends DefaultImageGenerator {}
-export class Rip extends DefaultImageGenerator {}
-export class Stonk extends DefaultImageGenerator {}
-export class Tatoo extends DefaultImageGenerator {}
-export class Thomas extends DefaultImageGenerator {}
-export class Trash extends DefaultImageGenerator {}
-export class Circle extends DefaultImageGenerator {}
+export class Denoise extends ImageGenerator {
+ getImage(avatar: string, level?: number): Promise;
+}
+
+export class Mirror extends ImageGenerator {
+ getImage(avatar: string, horizontal?: boolean, vertical?: boolean): Promise;
+}