Cause I can
This commit is contained in:
parent
4bb88b8296
commit
cec95be43f
1 changed files with 89 additions and 75 deletions
70
index.js
70
index.js
|
@ -34,18 +34,7 @@ for(templateName in templates) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function render(template, url, size) {
|
function render(template, img, size) {
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
console.log("Getting " + url);
|
|
||||||
if (url) {
|
|
||||||
request.get({ url: url, encoding: null }, function (e, r, data) {
|
|
||||||
if (e) {
|
|
||||||
reject({ status: (r && r.statusCode || 500), error: e });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var img = new Image();
|
|
||||||
img.src = data;
|
|
||||||
console.log("image loaded");
|
|
||||||
var width = img.width;
|
var width = img.width;
|
||||||
var height = img.height;
|
var height = img.height;
|
||||||
if (size && size.height) {
|
if (size && size.height) {
|
||||||
|
@ -82,7 +71,7 @@ function render(template, url, size) {
|
||||||
|
|
||||||
var canvas = new Canvas(resultingWidth, resultingHeight);
|
var canvas = new Canvas(resultingWidth, resultingHeight);
|
||||||
var ctx = canvas.getContext("2d");
|
var ctx = canvas.getContext("2d");
|
||||||
console.log("Drawing template")
|
console.log("Drawing template "+template.template)
|
||||||
try {
|
try {
|
||||||
ctx.drawImage(template.image, resultingTemplateLeft, resultingTemplateTop, template.image.width * templateScale, template.image.height * templateScale);
|
ctx.drawImage(template.image, resultingTemplateLeft, resultingTemplateTop, template.image.width * templateScale, template.image.height * templateScale);
|
||||||
console.log("Drawing done.")
|
console.log("Drawing done.")
|
||||||
|
@ -99,12 +88,7 @@ function render(template, url, size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the image and cache it
|
// return the image and cache it
|
||||||
resolve(canvas);
|
return(canvas);
|
||||||
});
|
|
||||||
} else {
|
|
||||||
reject({ status: 400, error: "No url specified" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const circleScale = 0.4;
|
const circleScale = 0.4;
|
||||||
|
@ -112,9 +96,9 @@ const lineWidthScale = 0.2;
|
||||||
const lowerRightFactor = 0.5 + 0.7071 * circleScale; // %-ual location of the lower right end of the strikethrough line
|
const lowerRightFactor = 0.5 + 0.7071 * circleScale; // %-ual location of the lower right end of the strikethrough line
|
||||||
const upperLeftFactor = 0.5 - 0.7071 * circleScale; // %-ual location of the upper left end of the strikethrough line
|
const upperLeftFactor = 0.5 - 0.7071 * circleScale; // %-ual location of the upper left end of the strikethrough line
|
||||||
|
|
||||||
app.get("/:templateName/", function (req, res) {
|
app.get("/:templateName/", async function (req, res) {
|
||||||
if(!templates[req.params.templateName]) return res.status(404).end();
|
if(!templates[req.params.templateName]) return res.status(404).end();
|
||||||
render(templates[req.params.templateName], req.query.url).then((canvas) => {
|
render(templates[req.params.templateName], await loadImage(req.query.url)).then((canvas) => {
|
||||||
console.log(canvas)
|
console.log(canvas)
|
||||||
res.setHeader('Content-Type', 'image/png');
|
res.setHeader('Content-Type', 'image/png');
|
||||||
canvas.pngStream().pipe(res);
|
canvas.pngStream().pipe(res);
|
||||||
|
@ -173,19 +157,49 @@ function findEmoji(str) {
|
||||||
return unicodeEmoji;
|
return unicodeEmoji;
|
||||||
}
|
}
|
||||||
|
|
||||||
client.on('message', function (message) {
|
function loadImage(url) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
console.log("Getting " + url);
|
||||||
|
if (url) {
|
||||||
|
request.get({ url: url, encoding: null }, function (e, r, data) {
|
||||||
|
if (e) {
|
||||||
|
return reject({ status: (r && r.statusCode || 500), error: e });
|
||||||
|
}
|
||||||
|
var img = new Image();
|
||||||
|
img.src = data;
|
||||||
|
resolve(img);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
client.on('message', async function (message) {
|
||||||
console.log(message.cleanContent);
|
console.log(message.cleanContent);
|
||||||
const commandParsed = /^\/(\w+)\b/.exec(message.cleanContent);
|
|
||||||
if (commandParsed && templates[commandParsed[1]]) {
|
const messageSplit = message.cleanContent.split(" ");
|
||||||
// get emoji from message
|
|
||||||
const emoji = findEmoji(message.cleanContent);
|
const emoji = findEmoji(message.cleanContent);
|
||||||
if (emoji) render(templates[commandParsed[1]], emoji.url).then(canvas => {
|
let result = null;
|
||||||
|
try {
|
||||||
|
if (emoji) {
|
||||||
|
let name = emoji.name;
|
||||||
|
for (var i = 0; i < messageSplit.length && i<3; ++i) {
|
||||||
|
const commandParsed = /^\/(\w+)\b/.exec(messageSplit[i]);
|
||||||
|
if (commandParsed && templates[commandParsed[1]]) {
|
||||||
|
name += commandParsed[1];
|
||||||
|
if (result === null) result = await loadImage(emoji.url);
|
||||||
|
result = render(templates[commandParsed[1]], result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result) {
|
||||||
var messageOptions = {
|
var messageOptions = {
|
||||||
files: [
|
files: [
|
||||||
{ attachment: canvas.toBuffer(), name: emoji.name + commandParsed[1] + ".png" }
|
{ attachment: result.toBuffer(), name: name + ".png" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
message.channel.send("", messageOptions);
|
message.channel.send("", messageOptions);
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
} catch(err) {
|
||||||
|
console.error(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
Reference in a new issue